前面我们了解了很多有监督学习相关的知识,相信大家一定对其中的精彩还回味无穷呢(原谅我就是这么臭不要脸,哈哈哈),最近闲来无事,看了看无监督学习相关的资料和知识,今天我们就先来看看无监督学习之kmenas算法,从名字可以看到两个信息:1)k个簇;2)每个簇的质心是它的means,即均值。我们先来看看kmeans的思路:
思路解析:
1)确定k个中心表示k个簇(方法各异);
2)对n个样本,找到距离其最近的簇,重新计算每个簇的中心;
3)重复2)知道簇中心不发生变化或者达到最大迭代次数!
步骤分析:
对于1)中k的确定以及对应的簇的中心选择,我们对症下药设计了不同的方法:
k的确定:如果问题中没有给定k值,我们需要自己确定k的大小,可以选用的方法很多很多,包括:
1)肘部法则:选用不同的k值,得到其对应的畸变度量(SSE),然后选择变化最大(由迅猛转化为缓慢)的那一个k值;
2)与层次聚类结合:先用层次聚类确定一个大体的k值,然后找到一个初始聚类,然后用迭位重定位来改进该聚类;
3)稳定性方法:
初始质心选择:
1)随机选取质心:这种方法的随机性很大,这样簇的质量往往很差,一种改进方法为:随机选取质心,多次运行,选取具有最小SSE的簇集(这需要执行到1)+2)的前部分);
2)取一个样本,使用层次聚类技术对其进行聚类,从层次聚类中提取k个簇,并用这些簇的质心作为初始质心;
3)选择第一个点(随机地选择或者选取所有点的质心),然后对于**每个后继初始质心**,选择距离已经选取过的初始质心最远的点,求距当前质心距离最远的点时计算成本很高,而且这种方法可能选中离群点。
对于2)中的第二个步骤(重新计算每个簇的中心),我们为其设计的目标函数为sum of squared Error(SSE),即平方误差和:
最小化目标函数,可得:
因此我们可以得到更新每一个簇的质心即为该簇的均值!
不足之处:
kmeans方法的缺点:
1)k值需要预先确定;
2)kmeans算法对于初始质心的选择超级敏感,不同的初始质心的选择得到的聚类结果完全不同;
3)kmeans算法适应的数据类型:球形簇,圆形簇。对于不同簇的规模差距较大或者分布属于长条形等时,不适合使用kmeans算法;
4)对离群点很敏感。
如果后面有时间的话,我们再来看看其对应的改进算法!