K-means算法的matlab程序

在“K-means算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度。

作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

1.采用iris数据库

iris_data.txt

  1. 5.1 3.5 1.4 0.2
  2. 4.9 1.4 0.2
  3. 4.7 3.2 1.3 0.2
  4. 4.6 3.1 1.5 0.2
  5. 3.6 1.4 0.2
  6. 5.4 3.9 1.7 0.4
  7. 4.6 3.4 1.4 0.3
  8. 3.4 1.5 0.2
  9. 4.4 2.9 1.4 0.2
  10. 4.9 3.1 1.5 0.1
  11. 5.4 3.7 1.5 0.2
  12. 4.8 3.4 1.6 0.2
  13. 4.8 1.4 0.1
  14. 4.3 1.1 0.1
  15. 5.8 1.2 0.2
  16. 5.7 4.4 1.5 0.4
  17. 5.4 3.9 1.3 0.4
  18. 5.1 3.5 1.4 0.3
  19. 5.7 3.8 1.7 0.3
  20. 5.1 3.8 1.5 0.3
  21. 5.4 3.4 1.7 0.2
  22. 5.1 3.7 1.5 0.4
  23. 4.6 3.6 0.2
  24. 5.1 3.3 1.7 0.5
  25. 4.8 3.4 1.9 0.2
  26. 1.6 0.2
  27. 3.4 1.6 0.4
  28. 5.2 3.5 1.5 0.2
  29. 5.2 3.4 1.4 0.2
  30. 4.7 3.2 1.6 0.2
  31. 4.8 3.1 1.6 0.2
  32. 5.4 3.4 1.5 0.4
  33. 5.2 4.1 1.5 0.1
  34. 5.5 4.2 1.4 0.2
  35. 4.9 3.1 1.5 0.2
  36. 3.2 1.2 0.2
  37. 5.5 3.5 1.3 0.2
  38. 4.9 3.6 1.4 0.1
  39. 4.4 1.3 0.2
  40. 5.1 3.4 1.5 0.2
  41. 3.5 1.3 0.3
  42. 4.5 2.3 1.3 0.3
  43. 4.4 3.2 1.3 0.2
  44. 3.5 1.6 0.6
  45. 5.1 3.8 1.9 0.4
  46. 4.8 1.4 0.3
  47. 5.1 3.8 1.6 0.2
  48. 4.6 3.2 1.4 0.2
  49. 5.3 3.7 1.5 0.2
  50. 3.3 1.4 0.2
  51. 3.2 4.7 1.4
  52. 6.4 3.2 4.5 1.5
  53. 6.9 3.1 4.9 1.5
  54. 5.5 2.3 1.3
  55. 6.5 2.8 4.6 1.5
  56. 5.7 2.8 4.5 1.3
  57. 6.3 3.3 4.7 1.6
  58. 4.9 2.4 3.3
  59. 6.6 2.9 4.6 1.3
  60. 5.2 2.7 3.9 1.4
  61. 3.5
  62. 5.9 4.2 1.5
  63. 2.2
  64. 6.1 2.9 4.7 1.4
  65. 5.6 2.9 3.6 1.3
  66. 6.7 3.1 4.4 1.4
  67. 5.6 4.5 1.5
  68. 5.8 2.7 4.1
  69. 6.2 2.2 4.5 1.5
  70. 5.6 2.5 3.9 1.1
  71. 5.9 3.2 4.8 1.8
  72. 6.1 2.8 1.3
  73. 6.3 2.5 4.9 1.5
  74. 6.1 2.8 4.7 1.2
  75. 6.4 2.9 4.3 1.3
  76. 6.6 4.4 1.4
  77. 6.8 2.8 4.8 1.4
  78. 6.7 1.7
  79. 2.9 4.5 1.5
  80. 5.7 2.6 3.5
  81. 5.5 2.4 3.8 1.1
  82. 5.5 2.4 3.7
  83. 5.8 2.7 3.9 1.2
  84. 2.7 5.1 1.6
  85. 5.4 4.5 1.5
  86. 3.4 4.5 1.6
  87. 6.7 3.1 4.7 1.5
  88. 6.3 2.3 4.4 1.3
  89. 5.6 4.1 1.3
  90. 5.5 2.5 1.3
  91. 5.5 2.6 4.4 1.2
  92. 6.1 4.6 1.4
  93. 5.8 2.6 1.2
  94. 2.3 3.3
  95. 5.6 2.7 4.2 1.3
  96. 5.7 4.2 1.2
  97. 5.7 2.9 4.2 1.3
  98. 6.2 2.9 4.3 1.3
  99. 5.1 2.5 1.1
  100. 5.7 2.8 4.1 1.3
  101. 6.3 3.3 2.5
  102. 5.8 2.7 5.1 1.9
  103. 7.1 5.9 2.1
  104. 6.3 2.9 5.6 1.8
  105. 6.5 5.8 2.2
  106. 7.6 6.6 2.1
  107. 4.9 2.5 4.5 1.7
  108. 7.3 2.9 6.3 1.8
  109. 6.7 2.5 5.8 1.8
  110. 7.2 3.6 6.1 2.5
  111. 6.5 3.2 5.1
  112. 6.4 2.7 5.3 1.9
  113. 6.8 5.5 2.1
  114. 5.7 2.5
  115. 5.8 2.8 5.1 2.4
  116. 6.4 3.2 5.3 2.3
  117. 6.5 5.5 1.8
  118. 7.7 3.8 6.7 2.2
  119. 7.7 2.6 6.9 2.3
  120. 2.2 1.5
  121. 6.9 3.2 5.7 2.3
  122. 5.6 2.8 4.9
  123. 7.7 2.8 6.7
  124. 6.3 2.7 4.9 1.8
  125. 6.7 3.3 5.7 2.1
  126. 7.2 3.2 1.8
  127. 6.2 2.8 4.8 1.8
  128. 6.1 4.9 1.8
  129. 6.4 2.8 5.6 2.1
  130. 7.2 5.8 1.6
  131. 7.4 2.8 6.1 1.9
  132. 7.9 3.8 6.4
  133. 6.4 2.8 5.6 2.2
  134. 6.3 2.8 5.1 1.5
  135. 6.1 2.6 5.6 1.4
  136. 7.7 6.1 2.3
  137. 6.3 3.4 5.6 2.4
  138. 6.4 3.1 5.5 1.8
  139. 4.8 1.8
  140. 6.9 3.1 5.4 2.1
  141. 6.7 3.1 5.6 2.4
  142. 6.9 3.1 5.1 2.3
  143. 5.8 2.7 5.1 1.9
  144. 6.8 3.2 5.9 2.3
  145. 6.7 3.3 5.7 2.5
  146. 6.7 5.2 2.3
  147. 6.3 2.5 1.9
  148. 6.5 5.2
  149. 6.2 3.4 5.4 2.3
  150. 5.9 5.1 1.8

iris_id.txt

  1.  

2.matlab源程序:

My_Kmeans.m

  1. function label_1=My_Kmeans(K)
  2. %输入K:聚类数
  3. %输出:label_1:聚的类, para_miu_new:聚类中心μ
  4. format long
  5. eps=1e-5; %定义迭代终止条件的eps
  6. data=dlmread('E:\www.cnblogs.comkailugaji\data\iris\iris_data.txt');
  7. %----------------------------------------------------------------------------------------------------
  8. %对data做最大-最小归一化处理
  9. [data_num,~]=size(data);
  10. X=(data-ones(data_num,1)*min(data))./(ones(data_num,1)*(max(data)-min(data)));
  11. [X_num,~]=size(X);
  12. %----------------------------------------------------------------------------------------------------
  13. %随机初始化K个聚类中心
  14. rand_array=randperm(X_num); %产生1~X_num之间整数的随机排列
  15. para_miu_new=X(rand_array(1:K),:); %随机排列取前K个数,在X矩阵中取这K行作为初始聚类中心
  16. responsivity=zeros(X_num,K);
  17. %----------------------------------------------------------------------------------------------------
  18. %K-means算法
  19. while true
  20. para_miu=para_miu_new; %上一步的聚类中心
  21. %欧氏距离,计算(X-para_miu)^2=X^2+para_miu^2-2*X*para_miu',矩阵大小为X_num*K
  22. distant=repmat(sum(X.*X,2),1,K)+repmat(sum(para_miu.*para_miu,2)',X_num,1)-2*X*para_miu';
  23. %返回distant每行最小值所在的下标
  24. [~,label_1]=min(distant,[],2);
  25. %构建隶属度矩阵X_num*K
  26. for i=1:X_num
  27. for j=1:K
  28. responsivity(i,j)=isequal(j,label_1(i));
  29. end
  30. end
  31. R_k=sum(responsivity,1); %分母,第k类的个数,1*k的矩阵
  32. para_miu_new=diag(1./R_k)*responsivity'*X; %更新参数miu(聚类中心)
  33. if norm(para_miu_new-para_miu)<=eps
  34. break;
  35. end
  36. end

Eg_Kmeans.m

  1. function ave_acc_kmeans=Eg_Kmeans(K,max_iter)
  2. %输入K:聚的类,max_iter是最大迭代次数
  3. %输出ave_acc_kmeans:迭代max_iter次之后的平均准确度
  4. s=0;
  5. for i=1:max_iter
  6. label_1=My_Kmeans(K);
  7. accuracy=succeed(K,label_1);
  8. s=s+accuracy;
  9. end
  10. ave_acc_kmeans=s/max_iter;

3.结果

  1. >> ave_acc_kmeans=Eg_Kmeans(3,50)
  2. ave_acc_kmeans =
  3. 0.842533333333333

K-means算法的matlab程序的更多相关文章

  1. ISODATA聚类算法的matlab程序

    ISODATA聚类算法的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考:Kmeans及ISODATA算法的matlab实现 算法 ...

  2. GMM算法的matlab程序

    GMM算法的matlab程序 在“GMM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...

  3. GMM算法的matlab程序(初步)

    GMM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648508.html文章中已经介绍了GMM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...

  4. KFCM算法的matlab程序(用FCM初始化聚类中心)

    KFCM算法的matlab程序(用FCM初始化聚类中心) 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行实现,用FCM初始化聚类中心,并求其准确度与 ...

  5. KFCM算法的matlab程序

    KFCM算法的matlab程序 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行简单的实现,并求其准确度. 作者:凯鲁嘎吉 - 博客园 http:// ...

  6. FCM算法的matlab程序2

    FCM算法的matlab程序2 在“FCM算法的matlab程序”这篇文章中已经用matlab程序对iris数据库进行实现,并求解准确度.下面的程序是另一种方法,是最常用的方法:先初始化聚类中心,在进 ...

  7. FCM算法的matlab程序

    FCM算法的matlab程序 在“FCM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...

  8. FCM算法的matlab程序(初步)

    FCM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648430.html文章中已经介绍了FCM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...

  9. K-means算法的matlab程序(初步)

    K-means算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648369.html 文章中已经介绍了K-means算法,现在用matlab程序实现 ...

随机推荐

  1. 分布式系统监视zabbix讲解九之使用snmp监控windows--技术流ken

    前言 使用zabbix监控windows主要有两种方法,一种是在windows端安装zabbix-agent客户端工具,安装麻烦.另外一种是使用snmp协议,配置简单快捷.两种配置都可以实现同样的效果 ...

  2. [转] JSON Web Token in ASP.NET Web API 2 using Owin

    本文转自:http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/ ...

  3. JSTL_XML标记库

    JSTL_XML 一:说明 如有转载请标明出处 必须包含的属性->有默认值的属性->其余属性,中间用回车隔开 二:XML标记库 Xml标记库主要功能就是为在jsp页面中操作xml提供便利支 ...

  4. (4)Microsoft office Word 2013版本操作入门_插入图片及图片的排版

    1.word中插入图片和文绕图 1.1插入图片 :点击[插入]-->[图片] 或者 [联机图片]从网上选择. 1.2文字环绕: [格式] --->点击[位置]   .[自动换行]  进行图 ...

  5. MyBatis:GeneratorConfig生成mapper以及pojo

    首先我们需要导入相应的依赖 之后需要针对的配置一些数据 接着我们需要针对性的写配置文件,在根目录下写mybatis的主要配置文件 如上图我们配置了数据库连接.对应的一些pojo.mapper.java ...

  6. 【Linux命令】ps命令

    ps命令介绍 用于报告当前系统的进程状态.可以搭配kill指令随时中断.删除不必要的程序. ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结 ...

  7. Python3 系列之 面向对象篇

    面向对象的三大特性:继承.封装和多态 Python 做到胶水语言,当然也支持面向对象的编程模式. 封装 class UserInfo(object): lv = 5 def __init__(self ...

  8. HDU6187(对偶图生成树)

    Destroy Walls Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)T ...

  9. 详解纯css实现瀑布流(multi-column多列及flex布局)

    瀑布流的布局自我感觉还是很吸引人的,最近又看到实现瀑布流这个做法,在这里记录下,特别的,感觉flex布局实现瀑布流还是有点懵的样子,不过现在就可以明白它的原理了 1.multi-column多列布局实 ...

  10. 借鉴Glide思想二次封装Fresco

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近封装了个 Fresco 的组件库:DFresco,就顺便来讲讲. 背景 Fresco 图片库很强大,我们项目中就是使用的 Fre ...