![基于MATLAB的人工智能模式识别](https://wfqqreader-1252317822.image.myqcloud.com/cover/370/38381370/b_38381370.jpg)
4.2 数据聚类——K-均值算法
4.2.1 K-均值算法概述
K-均值算法是Mac Queen J.在 1967 年提出来的一种经典的聚类算法。该算法属于基于距离的聚类算法,由于该算法的效率较高,所以在科学和工业领域中,需要对大规模数据进行聚类时被广泛应用,是一种极有影响力的技术。
K-均值算法是先随机选取k个对象作为初始聚类中心。然后计算每个对象与各个初始聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件为止。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,或者误差平方和局部最小。
4.2.2 K-均值算法的主要流程
K-均值算法在进行聚类之前需要用户给定类的个数和数据样本等参数,然后根据特定的算法对数据集进行聚类。当满足收敛条件时,算法处理结束,输出最终的聚类结果。其具体过程如下。
K-均值算法使用的聚类准则函数是误差平方和准则JK。
![](https://epubservercos.yuewen.com/5B96F7/20205398108552606/epubprivate/OEBPS/Images/txt004_5.jpg?sign=1738944962-ng7NlFZCgl1oYS14RD4eZyWzsZHnWMIQ-0-c90c8007e67209671a8e2ede238f61da)
(4-7)
为了使聚类结果优化,应该使准则JK最小化。
K-均值算法的主要流程为:
输入:初始数据集DATA和类的数目k。
输出:k个类,满足聚类准则函数收敛。
(1)任意选择k个数据对象作为初始聚类中心;
(2)根据类中对象的平均值,将每个对象赋给最类似的类;
(3)更新类的平均值,即计算每个对象类中对象的平均值;
(4)计算聚类准则函数JK,重复进行(2)~(4);
(5) 直到准则函数JK值不再进行变化(收敛)。
K-均值算法的流程如图4-1所示。
![img](https://epubservercos.yuewen.com/5B96F7/20205398108552606/epubprivate/OEBPS/Images/txt004_6.jpg?sign=1738944962-GryJQvayWSse5IaReb8KIw1zDbYVnato-0-6cb1409368af73df3158a4caa12b8259)
图4-1 K-均值算法的流程
4.2.3 K-均值算法的特点
K-均值算法是一种基于划分的聚类算法,其尝试找出使得聚类准则函数值最小的k个划分,当类与类之间的特征区别比较明显的时候,并且结果类是密集的,K-均值算法聚类结果的效果较好。K-均值算法的优点主要集中在:算法快速、简单;对大数据集有较高的效率并且是可伸缩的;时间复杂度近似于线性,而且适合挖掘大规模数据集。K-均值算法的时间复杂度是O(nkt),其中n代表数据集中对象的数量,t代表着算法迭代的次数,k代表着类的数目。但是,目前为止,K-均值算法也存在着许多缺点,在应用中面临着许多问题,有待于进一步的优化。
(1)K-均值算法的收敛中心随着初始点选取的不同而变化,迄今还没有统一有效的方法来确定初始划分和聚类数目k。
(2)K-均值算法的迭代最优化不能保证收敛到全局最优点。基于随机优化技术的K-均值算法虽然能较好地找到全局最优解,但这是以耗费计算量为代价的。
(3)“均值”的定义将算法限制在只能处理数值变量。而K-中心点算法是一种自然的解决方案,当计算均值没有意义时,中心不需要计算并且总是存在的。
(4)K-均值算法对孤立点和噪声敏感。即使对于一个远离聚类中心的目标,算法也强行将其划分到一个类中,从而扭曲了聚类的形状。
4.2.4 K-均值算法的MATLAB实现
![](https://epubservercos.yuewen.com/5B96F7/20205398108552606/epubprivate/OEBPS/Images/txt004_7.jpg?sign=1738944962-VF2N1d30y5pMHMzrF0ovFunJC8b8v2Ur-0-aad38120a908f63beae461bcb7175892)
其中,data为要聚类的数据集合,每一行为一个样本;IDX为聚类结果;C为聚类中心;SUMD为每一个样本到该聚类中心的距离和;D为每一个样本到各个聚类中心的距离;K为分类的个数。
如果使用命令[IDX,C,SUMD,D]=kmeans(data,4)进行聚类,要想画出4个聚类的图形,可用如下程序:
![](https://epubservercos.yuewen.com/5B96F7/20205398108552606/epubprivate/OEBPS/Images/txt004_8.jpg?sign=1738944962-uXmVVU9hT5jIXyZCetcXamfuQ3LMr4ri-0-1f705dc2d8aac8fd99a19abe64a7ff98)
为了提高图形的区分度,添加如下命令:
![](https://epubservercos.yuewen.com/5B96F7/20205398108552606/epubprivate/OEBPS/Images/txt004_9.jpg?sign=1738944962-H5b1QEEhHK49nm2F1SGW0b48dMUHXFd9-0-ea957565492c29fc9b014a140374cf67)
完整的K-均值算法的代码如下:
![](https://epubservercos.yuewen.com/5B96F7/20205398108552606/epubprivate/OEBPS/Images/txt004_10.jpg?sign=1738944962-YkQMAgeI6Qo9Bm1DGIgSqUAzyk3R9T2s-0-06663e049c9d8b78cbddf19563ce29c0)
![](https://epubservercos.yuewen.com/5B96F7/20205398108552606/epubprivate/OEBPS/Images/txt004_11.jpg?sign=1738944962-IJGmj3SfMYM7ThW4RxfU3eIeocJhrFtx-0-795bd52f864775f4eb498d044d2cbf42)
K-均值算法的聚类仿真结果如图4-2所示。
![img](https://epubservercos.yuewen.com/5B96F7/20205398108552606/epubprivate/OEBPS/Images/txt004_12.jpg?sign=1738944962-KVdwwX8qeJ0G5dEPTnrzrAgfJuhqUFo4-0-86ce77ed7c3f7e4aee7cefb4028180a1)
图4-2 K-均值算法的聚类仿真结果
K-均值算法主要通过迭代搜索获得聚类的划分结果,虽然K-均值算法运算速度快,占用内存小,比较适合大样本量的情况,但是聚类结果受初始聚类点的影响很大,不同的初始聚类点选择会导致截然不同的结果。并且当按最近邻归类时,如果遇到两个聚类点距离相等的情况,那么不同的选择也会造成不同的结果。因此,K-均值算法具有因初始聚类点的不确定性而存在较大偏差的情况。
K-均值算法使用的聚类准则是误差平方和准则。在算法迭代过程中,样本分类不断调整,因此误差平方和JK也在逐步减小,直到没有样本调整为止,此时JK不再变化,聚类达到最优。但是,此算法中没有计算JK值,也就是说JK不是算法结束的明显依据。因此,有待进一步对K-均值算法进行改进,以优化K-均值算法。