Matlab实现K均值聚类
来源:互联网 发布:翻墙用谷歌软件 编辑:程序博客网 时间:2024/06/07 01:26
作为第一个博客,我写了一个简单的K均值聚类算法。过程大致如下:
(1)从n个样本中任意选择(一般是随机分配),k个作为初始聚类中心;
(2)对于剩下的其它样本点,根据它们与这些聚类中心的距离,分别将它们分配给与其最相似的中心所在的类别 C j;
(3)计算每个新类的聚类中心;
(4)不断重复步骤(2)(3),直到所有样本点的分类不再改变或类中心不再改变。
一、方法说明
在(2)计算距离的时候,我用的是欧式距离:
其中,i和j表示第i个点和第j个点,n表示聚类对象是n维的,比如聚类对象为2维的,我们计算第一个点和第二个点的欧式距离:
在(3)更新聚类中心时,对于每一个类,重新计算该类的中心:
二、Matlab实现
数据是用rand随机生成的100个点,K均值聚类的程序如下:
function [C,new_u,iter]=Kmeans(data,k) %该程序对data聚类,k类%从data中随机选择k个样本作为初始均值向量{u1,u2}[row,col]=size(data);%row为样本个数,col为维数%随机抽取样本点作为初始中心的向量rand('seed',9);num=randsample(length(data),k,'false');u=zeros*data(num,:);new_u=data(num,:);%初始化元胞,和迭代次数C=cell(1,k);iter=1;while(new_u~=u) u=new_u;C=cell(1,k); for i=1:k %计算每一个样本点与中心的欧式距离 dist(:,i)=sqrt(sum((data-repmat(u(i,:),row,1)).^2,2)); end for j=1:row index=find(dist(j,:)==min(dist(j,:))); C{1,index}=[C{1,index};data(j,:)]; end for i=1:k new_u(i,:)=sum(C{1,i})/length(C{1,i}); end iter=iter+1; %迭代次数endKmeansPlot(C,new_u,k);%画图end
聚类结果如下:
三、伪代码
在这里,给读者再贴上一个周志华写的机器学习里k均值聚类的伪代码,便于理解。
四、总结
- k均值不需要计算任意两点的距离,因此比其它聚类方法有更快的收敛速度
- k均值被批评可能陷入局部最优,全局最优需要借助模拟退火算法或遗传算法
- 容易受到初始点选择的影响,不适合非凸问题,受异常数据影响受不同类别密度方差大小的影响,解决方法是二分k均值
[1]王星编著.大数据分析 方法与应用[M].北京:清华大学出版社.2013.
[2]周志华著.机器学习[M].北京:清华大学出版社.2016.
1 0
- K均值聚类以及matlab实现
- Matlab实现K均值聚类
- [Matlab] K均值聚类
- K均值聚类算法的MATLAB实现
- K均值聚类算法的MATLAB实现
- K均值聚类算法的MATLAB实现
- K均值算法matlab实现
- K均值聚类算法(matlab)
- Matlab函数kmeans:K-均值聚类
- matlab中k-均值聚类详解
- matlab版K均值聚类
- Kmeans K均值聚类,OpenCV实现
- python实现之K-均值聚类
- K均值聚类算法及MATLAB函数使用
- K-均值聚类
- K均值聚类
- k均值聚类
- k均值聚类
- iOS中图形图像处理第一部分:位图图像原图修改
- 选择排序
- 在变量作用域方面,函数声明和函数表达式有什么区别?
- mysql while loop repeat
- Pseudoprime numbers
- Matlab实现K均值聚类
- 南阳oj忙命逃窜,bfs
- git命令
- Linux下重要目录小结
- ajax提交表单时阻止表单自动提交
- 验证码插件
- element.style存在移动端浏览器兼容性问题
- ES6(五) 数值扩展
- vb.NET入门总结