1.算法描述 聚类算法也许是机器学习中“新算法”出现最多、最快的领域,一个重要的原因是聚类不存在客观标准,给定数据集总能从某个角度找到以往算法未覆盖的某种标准从而设计出新算法。Kmeans算法十分简单易懂而且非常有效,但是合理的确定K值和K个初始类簇中心点对于聚类效果的好坏有很大的影响。众多的论文基于此都提出了各自行之有效的解决方案,新的改进算法仍然不断被提出,此类文章大家可以在Web Of Science中搜索。
尽管Kmeans算法在MATLAB、Python等语言的工具箱函数中都有自带的函数可供调用,但作为机器学习的研究者新来说要设计出新的算法,有时就得“定制”自己的Kmeans函数了。自己动手编写无疑也更加能理解算法的具体过程,接下来就让我们进入正题吧
k-means算法中的k代表类簇个数,means代表类簇内数据对象的均值(这种均值是一种对类簇中心的描述),因此,k-means算法又称为k-均值算法。k-means算法是一种基于划分的聚类算法,以距离作为数据对象间相似性度量的标准,即数据对象间的距离越小,则它们的相似性越高,则它们越有可能在同一个类簇。数据对象间距离的计算有很多种,k-means算法通常采用欧氏距离来计算数据对象间的距离。
其中,D表示数据对象的属性个数。
k-means算法聚类过程中,每次迭代,对应的类簇中心需要重新计算(更新):对应类簇中所有数据对象的均值,即为更新后该类簇的类簇中心。定义第k个类簇的类簇中心为Centerk,则类簇中心更新方式如下:
代J的差值小于某一阈值时,即ΔJ<δ时,则终止迭代,此时所得类簇即为最终聚类结果。
k-means算法思想可描述为:首先初始化K个类簇中心;然后计算各个数据对象到聚类中心的距离,把数据对象划分至距离其最近的聚类中心所在类簇中;接着根据所得类簇,更新类簇中心;然后继续计算各个数据对象到聚类中心的距离,把数据对象划分至距离其最近的聚类中心所在类簇中;接着根据所得类簇,继续更新类簇中心;……一直迭代,直到达到最大迭代次数TT,或者两次迭代JJ的差值小于某一阈值时,迭代终止,得到最终聚类结果。
k-means算法步骤为:
1.随机选择 k 个样本作为初始簇类中心(k为超参,代表簇类的个数。可以凭先验知识、验证法确定取值);
2.针对数据集中每个样本 计算它到 k 个簇类中心的距离,并将其归属到距离最小的簇类中心所对应的类中;
3.针对每个簇类,重新计算它的簇类中心位置;
2.仿真效果预览 matlab2022a仿真结果如下:
3.MATLAB核心程序
clear;
close all;
warning off;
addpath(genpath(pwd));
[x1,x2,r1,r2,r3,r4]=data3();%读取数据
x=[x1;x2];
%随意设定俩初始聚类中心,采取K=2
u1=x1(1,:);
u2=x2(1,:);
for y=1:2000 %设置粗估循环多少次
[U1,U2] = count(u1,u2,x);%分类
[u1,u2,k] = new(U1,U2,u1,u2);%更新聚类中心
if k==1 %根据k值来判断循环是否结束
break;
end
end
%写出最终的聚类中心
u1
u2
A114
标签:中心,means,簇类,kmeans,算法,类簇,matlab,聚类
From: https://blog.51cto.com/matworld/6065704