三维点云处理第三章(2)--K-Means(聚类算法)

只能人工已经给定有多少个类(选定K个类),第一步任意选择K个中心点,然后计算每个点属于哪一个类,第二步将每一个点分配到每一个类之后,第三步更新每一个类中心点的位置(把每个类的求一个平均值,作为这一个类的中心点)。在数学上,有N个点,每个点都是低维度的,选定了K个中心,这些类的中心点由\mu k来表示,\mu k属于一维的,用rnk表达每一个数据点属于哪一个,第n个点属于第k类,那么rnk就等于1,其余的rn0,rn1,,,全都为0,实际上\mu k和rnk我们都是不知道的,需要求它们。K-Means实际上就是在优化这个损失函数J。

怎么去解这个损失函数呢?(实际上就是怎么去最小化这个损失函数),分两步,一个是E-step(expectation),就是固定\mu k,去解rnk,另一个是M-step(maximization),就是固定rnk,去解\mu k。第一步,E-step,固定\mu k,去每个点都是独立的,可以先考虑一个点,要使得J最小,就可以找最近的一个点k,使得rnk为1,其它为0,就可以得到最小的J。

第二步,M-step,固定rnk,J是 \mu k的二次函数,只需要对\mu k求导且令其为0,就可以解出\mu k

 \mu k的这个等式,实际上就是\mu k(一个类的中心点)属于这个类的数据点的平均值。图片解释如下

 K-means初始化不应该随意选点,应该选数据点里面的一个点; K-means初始化的点会影响结果,通常会选择多跑几遍K-means,最后选J最小的那个。在E-step的时候,我们求n个点到k个中心点的邻居(第二节课讲的可以用kdtree\Octree去加速),还有一种变种的K-means叫做Mini-batch,也就是在每一次迭代里面,都选择不同的cirsimple,减少迭代时间,但可能会产生更坏的结果。

如果min-batch等于1,也就是每次只选一个数据点,实际上就变成Sequential Update算法,以前是每次迭代都考滤全部点,这时候只考虑一个点xn,对于xn我们先找到他属于哪一个类,也就是求出\mu k,然后用这个公式更新,\eta是根据经验选择的,其他都不考虑,只考虑最近的\mu k。如果是很多个数据点,那就是Min-batch K-means(速度更快)。

 K-means加强版或者改进版的方法,K-Medoids(K中心点),K-Medoids不易被噪声干扰,E-step与K-means一样,但M-step时,K中心点不是选择平均值,它会历遍所有点,选择的中心点是离其他所有点的距离之和最小的(所选的中心点一定是某一个数据点)。数学上写成了以下形式,这个V函数可以是离散的、不可导的、无法求解的。

  K-means应用,一个做压缩的例子。

 

 问题:K是未知的;易受噪声影响;一个点必须属于一个类,给出的是确定的,不是概率

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值