matlab实现kmeans算法
kmeans是一种聚类算法(无监督学习)。
算法分为两步:
1.随机选取k个聚类中心。
2.计算每个样本点离哪个聚类中心最近(距离计算)就将该样本分为这个类。
3.重新计算这k个类的聚类中心。一种简单的计算方法为:计算每个类的平均值即为新的聚类中心。重复执行步骤2,直到聚类中心的变化小于给定阈值,或者达到迭代次数,即停止聚类。
这里只是简单理解,并未深入去考虑k的选择,初始聚类中心的选择对算法的影响。
下面给出一个利用matlab自带kmeans函数实现聚类的实例
close all;
clc;
x=[randn(100,2)*1e2;randn(100,2)*2e2;randn(100,2)*3e2;...
randn(100,2)*4e2;randn(100,2)*5e2;randn(100,2)*6e2];
figure,plot(x(:,1),x(:,2),'.');
[idx,ctrs]=kmeans(x,6);
figure,plot(x(idx==1,1),x(idx==1,2),'.r');
hold on
plot(x(idx==2,1),x(idx==2,2),'.b');
hold on
plot(x(idx==3,1),x(idx==3,2),'.m');
hold on
plot(x(idx==4,1),x(idx==4,2),'.g');
hold on
plot(x(idx==5,1),x(idx==5,2),'.k');
hold on
plot(x(idx==6,1),x(idx==6,2),'.c');
title('kmeans 聚类算法')
plot(ctrs(:,1),ctrs(:,2),'xb');
plot(ctrs(:,1),ctrs(:,2),'ob');
实验结果: