无监督学习,聚类算法
选取K个点作为初始质心:
repeat:
将每个点指派到最近的质心,形成K个类
重新计算每个类的质心
until 质心不在发生变化
计算点到质心的方法:
1.欧氏距离:欧氏空间中的数据
2.哈曼顿距离:
3.余弦相识度:常用于文本数据
最小化目标函数:最小化误差平方和。
数据到该类中心聚类距离平方和
简单,K值不好选取,随机性比较大
K的选取:
1.多次随机选取,选取误差平方和最小的那个质心
2.?
初始中心的选取
1.随机选取
2. 计算每一维特征的最大值和最小值,max min ,该维度的中心选取方式为: min + (max - min)*random(0,1)
其他维度同理
二分K均值
简单思想:为了得到K个簇,将所有的点集合分成两个类簇,从这些簇中选取一个继续分裂,如此下去,直到参生K个簇。
算法流程:
1,初始化类簇,使之包含所有点组成的簇
2,repeat:
2.1从簇表中选取一个类簇
2.2{对选定的类簇多次二分“试验”}
2.2.1for i = 1 to 测试次数 do
2.2.2使用基本K均值,二分选定的簇
2.2.3end for
2.3 从二分试验中选取具有最小总SSE的两个簇
2.4将这两个簇添加到簇表中
2.5until 簇表中包含K个簇
注意:
2.1从簇表中选取一个类簇:选取类簇的方法:
(1)最大的簇
(2)最大SSE的簇
(3)基于最大和SSE的标准选择类簇
实验中通常,使用结果簇的质心作为基本K均值的初始中心,对结果簇逐步求精。
因为在二分K均值算法中只是局部地使用kmeans算法,即其中的二分簇时。
看到下面另外一种kmeans改进算法
K-Means ++ 算法
k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。
1.从输入的数据点集合中随机选择一个点作为第一个聚类中心
2.对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
3.选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
4.重复2和3直到k个聚类中心被选出来
5.利用这k个初始的聚类中心来运行标准的k-means算法
从上面的算法描述上可以看到,算法的关键是第3步,如何将D(x)反映到点被选择的概率上,一种算法如下:
1.先从我们的数据库随机挑个随机点当“种子点”
2.对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。
3.然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。
4.重复2和3直到k个聚类中心被选出来
利用这k个初始的聚类中心来运行标准的k-means算法
可以看到算法的第三步选取新中心的方法,这样就能保证距离D(x)较大的点,会被选出来作为聚类中心了。至于为什么原因比较简单,如下图 所示:
假设A、B、C、D的D(x)如上图所示,当算法取值Sum(D(x))*random时,该值会以较大的概率落入D(x)较大的区间内,所以对应的点会以较大的概率被选中作为新的聚类中心。
来源链接:http://blog.csdn.net/lonelyrains/article/details/50916152