<机器学习练习>K-means聚类算法
来源:互联网 发布:windows outlook 编辑:程序博客网 时间:2024/06/08 02:40
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(); endendeps=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的时候结果如下:其中,有的时候质心会不确定,程序没有做优化处理。
0 0
- <机器学习练习>K-means聚类算法
- 机器学习:k-Means聚类算法
- 机器学习-K-means聚类算法
- 机器学习算法 - k-means Clustering K均值聚类
- 机器学习--k均值聚类(k-means)算法
- 视觉机器学习算法之一k-means算法聚类
- 机器学习算法-k-means聚类算法
- 机器学习之聚类算法/Bisecting K-Means算法
- 动手写机器学习算法:K-Means聚类算法
- 【机器学习】K-means聚类算法原理学习
- 【机器学习】K-means聚类算法初探
- 机器学习之聚类算法(K-Means)
- 【机器学习】K-means聚类算法初探
- 机器学习聚类算法——K-means聚类
- 机器学习之聚类算法k-means
- 【opencv、机器学习】聚类算法——K-means
- 机器学习之K-means聚类算法
- 《机器学习实战》1.K-Means聚类算法
- Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明
- Atitit.100% 多个子元素自适应布局属性
- Atitit.png 图片不能显示 php环境下
- easyUI tabs切换
- Rest API 设计最佳实践(1)
- <机器学习练习>K-means聚类算法
- odoo8-qweb report 制作pdf报表方法介绍
- POJ 3297 Open Source STL(map+set+pair)
- atitit.身份认证解决方案attilax总结
- 关于多态的理解
- Lua 编程(一) 环境配置
- Android中线程那些事
- Android Drawable - Scale Drawable使用详解(附图)
- hdu2099