首先是K-menas算法函数,这里使用3维形式,尽管Iris数据集有4维,但是考虑到4维数据无法绘制图像,所以在这里选择三维。

function [ resX,resY,resZ,recordd] = Kmeans( x,y,z,k )

%resX 存储结果

%resY

%resZ

%centerX 存储聚类中心点

%centerY

%centerZ

%oldcenterX 存储上一次的聚类中心,用于判断是否达到结束循环的条件

%oldcenterY

%oldcenterZ

%recordd 记录每个聚类中的元素个数

resX=zeros(k,length(x));

resY=zeros(k,length(y));

resZ=zeros(k,length(x));

centerX=zeros(1,k);

centerY=zeros(1,k);

centerZ=zeros(1,k);

oldcenterX=zeros(1,k);

oldcenterY=zeros(1,k);

oldcenterZ=zeros(1,k);

recordd=zeros(1,k);

for i=1:k

%生成随机聚类中心

centerX(i)=x(round(rand()*length(x)));

centerY(i)=y(round(rand()*length(x)));

centerZ(i)=z(round(rand()*length(x)));

%保证聚类中心不能够重复

if(i > 1 && centerX(i) == centerX(i-1) && centerY(i) == centerY(i-1)&&centerZ(i) == centerZ(i-1))

i=i-1;

end

end

while 1

resX(:)=0; %将每个聚类的点清空,用新的聚类中心重新进行聚类

resY(:)=0;

resZ(:)=0;

recordd(:)=0;

for i=1:length(x)

%给每一个点分类

belong=1;

for j=2:k

%采用欧式距离,寻找到当前点最近的聚类中心

if(power((x(i)-centerX(belong)),2)+power((y(i)-centerY(belong)),2)+power((z(i)-centerZ(belong)),2)>power((x(i)-centerX(j)),2)+power((y(i)-centerY(j)),2)+power((z(i)-centerZ(j)),2))

belong=j;

end

end

%当前聚类中心内部点数加1

recordd(belong)=recordd(belong)+1;

%将此点放入聚类中心中

resX(belong,recordd(belong))=x(i);

resY(belong,recordd(belong))=y(i);

resZ(belong,recordd(belong))=z(i);

end

%存放聚类中心

oldcenterX=centerX;

oldcenterY=centerY;

oldcenterZ=centerZ;

%更新聚类中心

for i=1:k

%recordd(i)=0表示此类内部无点,则保持聚类中心不变

if(recordd(i)==0)

continue

end

centerX(i)=sum(resX(i,:))/recordd(i);

centerY(i)=sum(resY(i,:))/recordd(i);

centerZ(i)=sum(resZ(i,:))/recordd(i);

end

%如果聚类中心没有改变就停止

if mean([centerX == oldcenterX centerY == oldcenterY centerZ==oldcenterZ]) == 1

break;

end

end

centerX

centerY

centerZ

%下面只是优化内存

maxPos = max(recordd);

resX = resX(:,1:maxPos);

resY = resY(:,1:maxPos);

resZ = resZ(:,1:maxPos);

end

然后是读取数据和显示函数

由于.data数据集本身matlab读取较为困难,所以将其转化为了.txt形式

%读取Iris数据

[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s','delimiter',',');

%选取k=3

k = 3;

%调用函数,这里选择的是feature1、feature2、feature4

[resX resY resZ record] = Kmeans(data1,data2,data4,k);

%绘制图像

for i = 1:length(record)

plot3(resX(i,1:record(i)),resY(i,1:record(i)),resZ(i,1:record(i)),'*')

hold on

end

% 下面是标记出每一个类别的类别代表点

for i = 1:length(record)

plot3(mean(resX(i,1:record(i)),2)',mean(resY(i,1:record(i)),2)',mean(resZ(i,1:record(i)),2)','Marker','square','Color','k','MarkerFaceColor','k','LineStyle','none')

end

Result

124.jpg

matlab iris kmeans,K-means算法用于Iris数据集相关推荐

  1. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  2. 聚类分析 | MATLAB实现k-Means(k均值聚类)分析

    目录 聚类分析 | MATLAB实现k-Means(k均值聚类)分析 k-均值聚类简介 相关描述 程序设计 学习小结 参考资料 致谢 聚类分析 | MATLAB实现k-Means(k均值聚类)分析 k ...

  3. k means算法C语言伪代码,K均值算法(K-Means)

    1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...

  4. k-modes算法mysql_第十一章 K-Means(K均值)算法模型实现(中)

    python2 代码实现: from numpy import * import numpy def loadDataSet(fileName): #general function to parse ...

  5. K-Means(K均值) 算法

    K-Means算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇.然后按平均法重新计算各个簇的质心,从而确定新的簇心.一直迭代,直到簇心的移动距离小于某个给定的值.K是我们 ...

  6. 我的K均值算法的matlab实现

    这是我的第一篇博客: K-Means算法过程,略: 这是一次课程的任务2333,是利用所学K-means聚类分析方法,对iris数据集进行聚类分析,并利用已知的样本类别标 签进行聚类分析评价: 我的K ...

  7. Udacity机器人软件工程师课程笔记(二十一) - 对点云进行集群可视化 - 聚类的分割 - K-means|K均值聚类, DBSCAN算法

    聚类的分割 1.K-均值聚类 (1)K-均值聚类介绍 k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心 ...

  8. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  9. K-Means(K均值)、GMM(高斯混合模型),通俗易懂,先收藏了!

    文章目录 1. 聚类算法都是无监督学习吗? 2. k-means(k均值)算法 2.1 算法过程 2.2 损失函数 2.3 k值的选择 2.4 KNN与K-means区别? 2.5 K-Means优缺 ...

最新文章

  1. 改善代码设计 —— 组织好你的数“.NET研究”据(Composing Data)
  2. 电脑qq文件服务器地址,在电脑上接收QQ地理位置打不开,提示获取不到详细地址...
  3. UltraEdit中显示空格与回车的问题
  4. Spring中的自动装配和Autowired
  5. python中回归拟合图_seaborn库:线性回归拟合图
  6. Microsoft Visual Studio Tools for AI
  7. 35岁了,转去谷歌做人工智能靠谱吗?
  8. [转] Windows完成端口与Linux epoll技术简介
  9. 索益Mike的excel商品操作
  10. Java程序开发过程
  11. 如何从excel中删除奇数行或偶数行
  12. 秦九韶算法与霍纳规则
  13. GIS地图描边特效的实现
  14. Developpeur Reference对Bjarne Stroustrup的采访(转载)
  15. 计算机专业可以谈手机吗,手机真能取代电脑吗?谈手机/PC系统的大一统
  16. 导入自己模块包导入报错:ModuleNotFoundError: No module named ‘xxx‘解决方法 晓物智联
  17. android蓝牙连接通信的实现
  18. 百度竞价账户层级及基本设置
  19. Vue 图片上传功能
  20. 1_华为是怎样开发硬件的

热门文章

  1. MATLAB血氧信号分析,基于MATLAB的血氧饱和度建模与预测方法研究
  2. Java中的“+“,什么时候是连接符,什么时候是运算符
  3. 分类问题学习笔记-决策树
  4. 安排,Elasticsearch Stack深入浅出视频教程
  5. bodipy荧光染料BDP 581/591 NHS ester/琥珀酰亚胺活化酯
  6. 同时删除多个 Word 中间几页
  7. 电气设备安装技术交底
  8. 500元内什么牌子的游戏蓝牙耳机好用?低延迟游戏蓝牙耳机
  9. ZuulFilter统一异常处理
  10. 微信小程序scroll-view 横向滚动 显示下拉条的问题