k均值算法
简单的说,k均值算法是将一些坐标点,按距离划分,聚为k类(k为先设置的值)。例:对以下点的坐标进行聚类
坐标点的数量很多,可以通过k均值算法进行聚类。k均值算法的思路是,先初始化k个类心,将所有坐标点归在这些类里,一次次寻找新的类心使聚类效果更佳,直至用k均值算法无法找到更优化的解。
k均值算法的代码及分析
第一步:初始随机选择k个点作为类心。
分析:先随机找一个解,作为初始可行解。故初始解会影响聚类的速度和最终聚类结果(陷入局部最优解)。可以通过多次随机选取初始解找到较优的结果。
第二步:将所有点,按距离分到最近的类心里,得到k个类。
分析: 样本点归在最近的类心比其他归类方式更优。
第三步:类内寻找新类心
方法:新类心的横纵坐标为原来类内所有点横纵坐标的平均值。
分析:对于一片数据点来说,数据点的中心(坐标的平均值),离这些点的总距离最短。
类内距离:
其中xi,yi为类内点的横纵坐标,x*,y*为类心的横纵坐标。当类心坐标为类内点坐标的平均值时,类内距离最小。(证明类似最小二乘法)。
故第三步使聚类效果更优化。
第四步:若类心有变化则返回第二步,若类心没有改变,则聚类结束。
分析:通过第二步、第三步不断优化聚类效果,找到更优化的解,直到类心无变化,说明无法找到更优化的解。
matlab代码
k = 5; %先设定聚类数量
[d,fff] = size(point);%d为样本点的个数
%第一步:初始随机选择k个点作为类心。
leixin = zeros(k,2);
suiji = randperm(d);
for i = 1:1:k
leixin(i,