您的位置:首页 > 其它

<机器学习练习>K-means聚类算法

2016-05-25 01:01 549 查看
1:思想

K-means,属于无监督学习。即输入数据没有标签y,经过一些算法后,找到标签y。
聚类的目的就是找到每个样本潜在的标签y,并将同类别的样本放到一起。
而k-means聚类:就是把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,
使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。


2:缺点

1)聚类数量k,需要输入。选择不恰当,聚类结果很糟糕。
2)收敛到局部最优解,和直观想象不一样,这种可以多此选择初始点,进行多次实验,取平均来克服。


3:算法



4:练习程序

clear all;
clc ;
%第一类数据
mu1=[0,0,0];                  %%多维高斯向量均值
s1=[0.3 0 0;0 0.35 0;0 0 0.3];%%协方差分布
data1=mvnrnd(mu1,s1,100);     %%产生高斯分布数据

%第二类数据
mu2=[1.25,1.25,1.25];   %%多维高斯向量均值
s2=[0.3 0 0;0 0.35 0;0 0 0.3];%%协方差分布
data2=mvnrnd(mu2,s2,100);  %%产生高斯分布数据

%第三类数据
mu3=[-1.25,-1.25,-1.25];    %%多维高斯向量均值
s3=[0.3 0 0;0 0.35 0;0 0 0.3];%%协方差分布
data3=mvnrnd(mu3,s3,100);  %%产生高斯分布数据

data=[data1;data2;data3];  %%原始数据

%%K-means聚类
[u]=KMeans(data,10);       %%%

%%显示聚类后的数据
figure;
hold on;
plot3(data1(:,1),data1(:,2),data1(:,3),'co');
hold on
plot3(data2(:,1),data2(:,2),data2(:,3),'go');
hold on
plot3(data3(:,1),data3(:,2),data3(:,3),'bo');
hold on
plot3(u(:,1),u(:,2),u(:,3),'r+');


%%%data 数据  N质心数量  u聚类质心位置
function [u]=KMeans(data,N)
[m,n]=size(data);                             %% m是数据个数
maxtemp=zeros(n);
mintemp=zeros(n);
u=zeros(N,n);                                 %%每一行表示一个质心点

%%%初始化质心点
for i=1:n
maxtemp(i)=max(data(:,i));                %%第一列最大
mintemp(i)=min(data(:,i));
for  j=1:N
u(j,i)=maxtemp(i)+(mintemp(i)-maxtemp(i))*rand();
end
end

eps=1;
IndexData=ones(m,1);                          %%存放质心:每个数据所对应的质心索引

while(eps>0.0001)                             %%%迭代更新质心位置
pre_u=u;

for i=1:N
for j=1:m
temp(j,i)=norm(data(j,:)-u(i,:));   %%每一个数据与N个质心比较  放到m*N矩阵里
%%temp每一列表示数据离不同质心的距离
end
end

for row=1:m
[value,Index]=min(temp(row,:));        %%找到每一行的最小值的索引
IndexData(row)=Index;                  %%把它对应的索引放到IndexData
end

%%%计算新的质心位置
for i=1:N
ZhiXin=zeros(1,3);
Count=0;
for j=1:m
if IndexData(j)==i                 %%计算索引是i的数据点
ZhiXin=ZhiXin+data(j,:);       %%质心的计算按照:所有坐标点的平均值
Count=Count+1;
end
end
u(i,:)=ZhiXin/Count;
end
eps=norm(pre_u-u);
end


5:结果

当聚类数量选则3,10的时候结果如下:其中,有的时候质心会不确定,程序没有做优化处理。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: