1、主 讲:周润景 教授 单 位:电子信息工程学院,K均值聚类算法,目 录,K均值聚类简介 K均值聚类的原理 K均值算法的优缺点 K均值聚类的MATLAB实现 待聚类样本的分类结果 结论,一.K均值聚类简介,K均值聚类发明于1956年,该算法最常见的形式是采用被称为劳埃德算法(Lloydalgorithm)的迭代式改进探索法。劳埃德算法首先把输入点分成K个初始化分组,可以是随机的或者使用一些启发式数据。然后计算每组的中心点,根据中心点的位置把对象分到离它最近的中心,重新确定分组。继续重复不断地计算中心并重新分组,直到收敛,即对象不再改变分组(中心点位置不再改变)。,二.K均值聚类的原理,2.1 K
2、均值聚类算法使用的聚类准则函数是误差平方和准则:为了使聚类结果优化,应该使准则最小化。 2.2 初始聚类中心的选取,初始中心选取方法 1.选一批代表点后,代表点就是聚类中心,计算其它样本到聚类中心的距离,把所有样本归于最近的聚类中心点,形成初始分类,再重新计算各聚类中心,称为成批处理法。 (此方法为本文所采用的选取方法),二.K均值聚类的原理,2. 选一批代表点后,依次计算其它样本的归类,当计算完第一个样本时,把它归于最近的一类,形成新的分类。再计算新的聚类中心,再计算第二个样本到新的聚类中心的距离,对第二个样本归类。即每个样本的归类都改变一次聚类中心。此法称为逐个处理法。 3. 直接用样本进
3、行初始分类,先规定距离d,把第一个样品作为第一类的聚类中心,考察第二个样本,若第二个样本距第一个聚类中心距离小于d,就把第二个样本归于第一类,否则第二个样本就成为第二类的聚类中心,再考虑其它样本,根据样本到聚类中心距离大于还是小于d,决定分裂还是合并。,二.K均值聚类的原理,2.3类别数选取方法 C-均值算法,其类型数目假定已知为K。对于K未知时,可以令K逐渐增加,如:K=1,2.,使用C-均值算法,误差平方和Jc随K的增加而单调减少。最初,由于K较小,类型的分裂会使Jc迅速减小,但当K增加到一定数值时,Jc的减小速度会减慢,即:随着初始分类k的增大,准则函数下降很快,经过拐点后,下降速度减慢
4、。拐点处的K值就是最佳初始分类。,二.K均值聚类的原理,2.4算法流程 给出个n混合样本,令 表示迭代运算次数,选取K个初始聚心 ; 计算每个样本与聚合中心的距离 , 若 ,则 。 计算K个新的集合中心: 。 判断: 若 ,则 ,返回,否则算法结束。,二.K均值聚类的原理,将每个对象赋给最类似的中心,更新簇的平均值,重新赋值,更新簇的平均值,重新赋值,算法流程示意图:,三.K均值算法的优缺点,优点: (1)如果变量很大,k均值比层次聚类的计算速度更快。 (2)与层次聚类相比,k均值可以得到更紧密的簇,尤其是对于球状簇。 (3)大数据集合,效率比较高。 (4)算法尝试找出使平方误差函数最小的k个
5、划分。当结果簇是密集的,而簇与簇之间区别明显的时候,效果较好。 缺点: (1)没有指明初始化均值的方法。常用的方法是随机的选取k个样本作为均值。 (2)产生的结果依赖于均值的初始值,经常发生得到次优划分的情况。解决方法是多次尝试不同的初始值。 (3)可能发生距离簇中心mj最近的样本集为空的情况,因此,mj将得不到更新。 (4)不适合发现非凸面形状的簇,并且对噪声和离群点数据是比较敏感的,因为少量的这类数据能够对均值产生极大的影响。,四.K均值聚类的MATLAB实现,完整程序: clear all; data= 1702.8 1639.79 2068.74 1877.93 1860.96 197
6、5.3 867.81 2334.68 2535.1 1831.49 1713.11 1604.68 460.69 3274.77 2172.99 2374.98 3346.98 975.31 2271.89 3482.97 946.7 1783.64 1597.99 2261.31 198.83 3250.45 2445.08 1494.63 2072.59 2550.51 1597.03 1921.52 2126.76 1598.93 1921.08 1623.33 1243.13 1814.07 3441.07,四.K均值聚类的MATLAB实现,完整程序: 2336.31 2640.26
7、1599.63 354 3300.12 2373.61 2144.47 2501.62 591.51 426.31 3105.29 2057.8 1507.13 1556.89 1954.51 343.07 3271.72 2036.94 2201.94 3196.22 935.53 2232.43 3077.87 1298.87 1580.1 1752.07 2463.04 1962.4 1594.97 1835.95 1495.18 1957.44 3498.02 1125.17 1594.39 2937.73 24.22 3447.31 2145.01 1269.07 1910.72 2
8、701.97 1802.07 1725.81 1966.35,四.K均值聚类的MATLAB实现,完整程序: 1817.36 1927.4 2328.79 1860.45 1782.88 1875.13 ;IDX,C,SUMD,D = kmeans(data,4); plot3(data(:,1),data(:,2),data(:,3),*); grid; D=D minD=min(D); index1 = find(D(1,:) =min(D) index2 = find(D(2,:) =min(D) index3 = find(D(3,:) =min(D) index4 = find(D(4
9、,:) =min(D) line(data(index1,1),data(index1,2),data(index1,3),linestyle, none,marker,*,color,g); line(data(index2,1),data(index2,2),data(index2,3),linestyle,四.K均值聚类的MATLAB实现,完整程序: none,marker,*,color,r); line(data(index3,1),data(index3,2),data(index3,3),linestyle, none,marker,+,color,b); line(data(i
10、ndex4,1),data(index4,2),data(index4,3),linestyle, none,marker,+,color,y); title(C均值聚类分析图); xlabel(第一特征坐标); ylabel(第二特征坐标); zlabel(第三特征坐标);,五.待聚类样本的分类结果,(1)所分4类的聚类中心C: C =1.0e+03 *1.2964 1.9194 2.8753(index1聚类中心)0.3012 3.2749 2.2052(index2聚类中心)2.2603 3.0410 1.0579(index3聚类中心)1.7583 1.7493 1.9655(inde
11、x4聚类中心) (2)所分的4类: index1 =3 10 13 22 24 25 27 index2 =5 9 15 17 19 26 index3 =6 7 14 16 20 21 index4 =1 2 4 8 11 12 18 23 28 29 30,五.待聚类样本的分类结果,六.总结,在K均值聚类算法中,Kmeans算法主要通过迭代搜索获得聚类的划分结果,虽然 Kmeans算法运算速度快,占用内存小,比较适合于大样本量的情况,但是聚类结果受初始凝聚点的影响很大,不同的初始点选择会导致截然不同的结果。并且当按最近邻归类时,如果遇到两个凝聚点距离相等的情况,不同的选择也会造成不同的结果。因此,K均值动态聚类法具有因初始中心的不确定性而存在较大偏差的情况。 K均值算法使用的聚类准则函数是误差平方和准则。在算法迭代过程中,样本分类不断调整,因此误差平方和JK也在逐步减小,直到没有样本调整为止,此时JK不再变化,聚类达到最优。但是,此算法中没有计算JK值,也就是说JK不是算法结束的明显依据。因此,有待进一步对K均值算法进行改进,以优化K均值聚类算法。,