人工智能AI常见的经典K-means聚类算法原理和工作过程

人工智能AI常见的经典K-means聚类算法原理和工作过程

K-means聚类算法亦称K聚类均值算法,K-means算法是硬聚类算法中的一种。聚类算法是一类无监督机器学习。K-means算法是计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法。K-means算法是典型的基于距离的聚类算法,以距离作为相似性的评价标准,认为两个对象的距离越近,其相似度就越大。物以类聚,人以群分。K均值算法认为簇是由距离靠近的对象组成的,因此把获得距离相近且独立的簇作为最终求解目标。

聚类算法首先要解决相异度问题。即如何定量分析两个可比较元素的相异度。通俗的说法,相异度就是两个东西差别有多大。例如人与章鱼的相异度明显大于人与黑猩猩的相异度,这是人们可以直观感受到的。但是,计算机没有这种直观感受能力,必须对相异度在数学上进行定性、定量。

凡是能把现实世界的事务属性抽象成向量,就可用K-Means算法进行分类。K-Means算法核心思想:指定算法初始点(initial centroids),作为聚类的分类(cluster),重复迭代直至算法收敛为止。

数学坐标系中的二维坐标点(x,y),是一种向量,是一种数学抽象。现实世界中很多属性都可以抽象成向量。比如,人的年龄,喜好,偏好的商品等等,抽象成向量的目的是可以让计算机知道某两个属性间的距离。假定,18岁的人与24岁的人的距离要比离12岁的距离要近。鞋子离衣服这个商品的距离要比电脑要近等等。

K均值算法的弊端

K-Means主要有两个最重大的缺陷——都和初始值有关:

(一)K是先验给定的,但是K值的选定往往非常难以估计。对于大型数据集,到底应该划分几个类群,这在算法启动前是无法准确给出的。

(二)K均值算法需要初始随机种子点启动算法,这个随机种子点很关键,选取不同的随机种子点将得到完全不同的结果和算法执行效率。

以上是关于K-means算法的抽象描述,现在结合一个实际的数据集,运用K-means算法原理进行聚类工作过程。

假设现在有一个杂乱无序数据集D = { 2 , 8 , 3 , 9 },共四个数据。即D1=2,D2=8,D3=3,D4=9。要求对数据集D聚类成两个簇,即K=2。

因为数据量小,人类可以直观的把它们划分为两个簇:{2,3} 和 {8,9},但是机器却无法直观的感受和划分,必须依据一定的算法进行计算才能归类。现在开始用K-means算法进行聚类,下面是K-means算法执行的具体工作步骤和过程:

【准备阶段】选取质心。质心的选择可以任意选取,但尽量要合理。质心可由数据集D内部产生,也可以先验选取合理的值作为质心,我在这里选取两个值center1和center2分别作为两个簇cluster1和cluster2的质心:center1=2,center2=3。

【算法执行阶段】把数据集D全部数据(本例是4个)中的每一个,分别和质心center1和center2计算相异度。相异度小的归入质心所在的簇。以欧氏距离(Euclidean distance)做为相异度。相异度小则归入该簇。

开始算法:

(第一轮循环) 初始化的质心center1=2,center2=3

对于D1=2,距离center1的欧式距离=0,距离center2的欧式距离=1,0<1,故D1归入center1所在的簇:cluster1。此时cluster1={2},cluster2={}。

对于D2=8,距离center1的欧式距离=6,距离center2的欧式距离=5,6>5,故D2归入center2所在的簇:cluster2。此时cluster1={2},cluster2={8}。

对于D3=3,距离center1的欧式距离=1,距离center2的欧式距离=0,1>0,故D3归入center2所在的簇:cluster2。此时cluster1={2},cluster2={8,3}。

对于D4=9,距离center1的欧式距离=7,距离center2的欧式距离=6,7>6,故D4归入center2所在的簇:cluster2。此时cluster1={2},cluster2={8,3,9}。

经过第一轮循环,得到cluster1={2},cluster2={8,3,9}。

(第二轮循环) 经过第一轮循环处理后,得到cluster1={2},cluster2={8,3,9}。选取新质心,此时选择质心以簇内的算术平均值为质心。那么新的cluster1质心center1=2/1=2;cluster2质心center2=(8+3+9)/3=6.67(四舍五入)。于是此时center1=2,center2=6.67。

对于D1=2,距离center1的欧式距离=0,距离center2的欧式距离=4.47,0<4.47,故D1归入center1所在的簇:cluster1。此时cluster1={2},cluster2={}。

对于D2=8,距离center1的欧式距离=6,距离center2的欧式距离=1.33,6>1.33,故D2归入center2所在的簇:cluster2。此时cluster1={2},cluster2={8}。

对于D3=3,距离center1的欧式距离=1,距离center2的欧式距离=0,1<3.37,故D3归入center1所在的簇:cluster1。此时cluster1={2,3},cluster2={8}。

对于D4=9,距离center1的欧式距离=7,距离center2的欧式距离=2.33,7>2.33,故D4归入center2所在的簇:cluster2。此时cluster1={2,3},cluster2={8,9}。

经过第二轮循环,得到cluster1={2,3},cluster2={8,9}。

(第三轮循环) 经过第二轮循环处理后,得到cluster1={2,3},cluster2={8,9}。选取新质心,此时选择质心以簇内的算术平均值为质心。那么新的cluster1质心center1=(2+3)/2=2.5;cluster2质心center2=(8+9)/2=8.5。于是此时center1=2.5,center2=8.5。

对于D1=2,距离center1的欧式距离=0.5,距离center2的欧式距离=6.5,0.5<6.5,故D1归入center1所在的簇:cluster1。此时cluster1={2},cluster2={}。

对于D2=8,距离center1的欧式距离=5.5,距离center2的欧式距离=0.5,5.5>0.5,故D2归入center2所在的簇:cluster2。此时cluster1={2},cluster2={8}。

对于D3=3,距离center1的欧式距离=0.5,距离center2的欧式距离=5.5,0.5<5.5,故D3归入center1所在的簇:cluster1。此时cluster1={2,3},cluster2={8}。

对于D4=9,距离center1的欧式距离=6.5,距离center2的欧式距离=0.5,6.5>0.5,故D4归入center2所在的簇:cluster2。此时cluster1={2,3},cluster2={8,9}。

经过第三轮循环后,得到cluster1={2,3},cluster2={8,9}。

(第四轮循环) 经过第三轮循环处理后,得到cluster1={2,3},cluster2={8,9}。选取新质心,此时选择质心以簇内的算术平均值为质心。那么新的cluster1质心center1=(2+3)/2=2.5;cluster2质心center2=(8+9)/2=8.5。于是此时center1=2.5,center2=8.5。发现新选取的质心和上一轮即第三轮使用的质心相同,说明算法已经收敛,K-means算法聚类划分完成,计算结束。最终得到的两个簇为:

cluster1={2,3}

cluster2={8,9}

是理想的聚类结果。说明算法成功完成划分。

以上循环涉及到的算法数据可以简化为:

D={2,8,3,9},即D1=2 , D2=8 , D3=3 , D4=9

循环1:

质心center1=2 ,center2= 3

cluster1={2}, cluster2={8,3,9}

循环2:

质心center1=2/1=2 ,center2= (8+3+9)/3=6.67

cluster1={2,3}, cluster2={8,9}

循环3:

质心center1=(2+3)/2=2.5 ,center2= (8+9)/2=8.5

cluster1={2,3}, cluster2={8,9}

循环4:

质心center1=(2+3)/2=2.5 ,center2= (8+9)/2=8.5

质心和上一轮循环相同,故算法收敛,计算结束。

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/zhangphil/article/details/78783629
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞