码迷,mamicode.com
首页 > 编程语言 > 详细

视觉SLAM之词袋(bag of words) 模型与K-means聚类算法浅析(2)

时间:2016-06-01 06:45:11      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

聚类概念:

聚类:简单地说就是把相似的东西分到一组。同 Classification (分类)不同,分类应属于监督学习。而在聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起,因此,一个聚类算法通常只需要知道如何计算相似 度就可以开始工作了。聚类不需要使用训练数据进行学习,应属于无监督学习。

我们经常接触到的聚类分析,一般都是数值聚类,一种常见的做法是同时提取 N 种特征,将它们放在一起组成一个 N 维向量,从而得到一个从原始数据集合到 N 维向量空间的映射,然后基于某种规则进行分类,在该规则下,同组分类具有最大的相似性。

需要解决的问题:

K-Means算法主要解决的问题如下图所示。我们可以看到,在图的左边有一些点,我们用肉眼可以看出来有四个点群,但是我们怎么通过计算机程序找出这几个点群来呢?

技术分享

 

 

算法概要:

技术分享

 

 

A,B,C,D,E是五个在图中点。而灰色的点是我们的种子点,也就是我们用来找点群的点。有两个种子点,所以K=2

上图K-Means的算法描述:

1.随机在图中取K(这里K=2)个种子点。

2.然后对图中的所有点求到这K个种子点的距离,假如点Pi离种子点Si最近,那么Pi属于Si点群。(上图中,我们可以看到A,B属于上面的种子点,C,D,E属于下面中部的种子点)

3.接下来,我们要移动种子点到属于他的“点群”的中心。(见图上的第三步)

4.然后重复第2)和第3)步,直到种子点没有移动(我们可以看到图中的第四步上面的种子点聚合了A,B,C,下面的种子点聚合了D,E)。

K-Means聚类算法主要分为三个步骤:

(1)第一步是为待聚类的点寻找聚类中心

(2)第二步是计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中去

(3)第三步是计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心,反复执行(2)、(3),直到聚类中心不再进行大范围移动或者聚类次数达到要求为止。

 

求点群中心的公式:

技术分享

 

 

假设我们提取到原始数据的集合为技术分享,并且每个xi为d维的向量,K-means聚类的目的就是,在给定分类组数k(k ≤ n)值的条件下,将原始数据分成k类 S = 技术分享,在数值模型上,即对以下表达式求最小值:

技术分享         

这里技术分享表示分类技术分享的平均值。

arg表示使目标函数取最小值时的变量值

设我们一共有 N 个数据点需要分为 K 个 cluster ,k-means 要做的就是最小化

技术分享

 

其中  rnk在  在数据点 n 被归类到 cluster k 的时候为 1 ,否则为 0 。直接寻找  rnk  和 uk  最小化 j 并不容易,不过我们可以采取迭代的办法:先固定 uk,选择最优的 rnk,很容易看出,只要将数据点归类到离他最近的那个中心就能保证 j  最小。下一步则固定 rnk ,再求最优的 uk 。将j 对 uk 求导并令导数等于零,很容易得到 j 最小的时候uk 应该满足:

技术分享

 

亦即 uk的值应当是所有 cluster k 中的数据点的平均值。

首先 3 个中心点被随机初始化,所有的数据点都还没有进行聚类,默认全部都标记为红色,如下图所示:

技术分享

 

然后进入第一次迭代:按照初始的中心点位置为每个数据点着上颜色,重新计算 3 个中心点,结果如下图所示:

技术分享

 

 

可以看到,由于初始的中心点是随机选的,这样得出来的结果并不是很好,接下来是下一次迭代的结果:

 

技术分享

可以看到大致形状已经出来了。再经过两次迭代之后,基本上就收敛了,最终结果如下:

技术分享

 

不过正如前面所说的那样 k-means 也并不是万能的,虽然许多时候都能收敛到一个比较好的结果,但是也有运气不好的时候会收敛到一个让人不满意的局部最优解,例如选用下面这几个初始中心点:

技术分享

最终会收敛到这样的结果:

技术分享

 

 

视觉SLAM之词袋(bag of words) 模型与K-means聚类算法浅析(2)

标签:

原文地址:http://www.cnblogs.com/zjiaxing/p/5548274.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!