<机器学习练习>K-means聚类算法
2016-05-25 01:01
549 查看
1:思想
2:缺点
3:算法
4:练习程序
5:结果
当聚类数量选则3,10的时候结果如下:其中,有的时候质心会不确定,程序没有做优化处理。
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的时候结果如下:其中,有的时候质心会不确定,程序没有做优化处理。
相关文章推荐
- Open Asset Import Library(assimp) vs2010编译
- Python built-in函数的源码实现定位
- "大哥,割草机借我用一下,我修整一下草坪。" ---- 谈谈this与JavaScript函数调用的不解之缘
- Win7x64下搭建 Apache2.4.20+php7.0.6+MySQL5.7.12
- Atitit.100% 多个子元素自适应布局属性
- Atitit.100% 多个子元素自适应布局属性
- Atitit.100% 多个子元素自适应布局属性
- 浅谈Perl的类、包、模块与面对对象编程
- Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明
- Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明
- 关于css中的align-content属性详解
- hdu 3191 How Many Paths Are There(次短路+条数)
- Getting Started With Python Internals
- Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明
- 一个简单的rpc框架实现(待连载优化)
- MHA 代码解析(online swtich+master is alive 模式)
- poj 3264 RMQ
- 数据库的原理
- 这些HTML、CSS知识点,面试和平时开发都需要 No10-No11
- BinaryTree