1. import numpy as np
  2. import sklearn.datasets #加载原数据
  3. import matplotlib.pyplot as plt
  4. import random
  5.  
  6. #点到各点距离
  7. def PointToData(point,dataset):
  8. a = np.multiply(dataset - point,dataset - point)
  9. # print('a',a)
  10. distence = np.sqrt(a[:,0]+a[:,1])
  11. return distence
  12.  
  13. #选择初始的k个中心簇
  14. def startpoint(k,dataset):
  15. m, n = np.shape(dataset)
  16. index1 = random.randint(0,len(dataset) - 1)
  17. A = [] # 初始的k个中心簇
  18. A_dit = [] # 初始所有点到中心簇的距离
  19. A.append(dataset[index1])
  20. sum_dis = np.zeros((m, 1))
  21. flag_mat = np.ones((m,1))
  22. flag_mat[index1] = 0
  23. for i in range(0, k - 1):
  24. A_dit.append((PointToData(A[i], dataset)).reshape(-1,1) )
  25. # print('A_dit[{}]:{}'.format(i,A_dit[i]))
  26. sum_dis =(sum_dis + A_dit[i]) * flag_mat
  27. # print('sum_dis[{}]:{}'.format(i,sum_dis))
  28. Index = np.argmax(sum_dis)
  29. flag_mat[Index] = 0
  30. # print('选的Index:',Index)
  31. A.append(dataset[Index])
  32. return A
  33.  
  34. #加载数据
  35. Data = sklearn.datasets.load_iris()
  36. dataset = Data.data[:,0:2]
  37.  
  38. # #小数据测试编码
  39. # test = dataset[0:15,:]
  40. # testm,testn = np.shape(test)
  41. # print(test)
  42.  
  43. #测试k
  44. # k = 4
  45. #初始点测试函数
  46. # Apoint = startpoint(k,test)
  47. # print('Apoint',Apoint)
  48. #距离函数测试
  49. # d = PointToData(test[0,:],test)
  50. # print('d,d+d:',d,d+d)
  51.  
  52. def classfy(dataset,Apoint):
  53. m,n = np.shape(dataset)
  54. dis_li = []
  55. num = 0
  56. for point in Apoint:
  57. distence = PointToData(point,dataset)
  58. dis_li.append(distence)
  59. if num == 0:
  60. dis_li_mat = dis_li[num]
  61. else:
  62. dis_li_mat = np.column_stack((dis_li_mat,dis_li[num]))
  63. num += 1
  64. result = np.argmin(dis_li_mat,axis=1)
  65. # print('dis_li:',dis_li)
  66. # print('dis_li_mat:\n', dis_li_mat)
  67. # print('classfy:',result)
  68. return result
  69. # label2 = classfy(test,Apoint)
  70. # print('label2:',label2)
  71.  
  72. #求分类的新中心
  73. def Center(dataset,label,k):
  74. i = 0
  75. newpoint = []
  76. for index in range(k):
  77. flag = (label==index)
  78. # print('flag,i:',flag,i)
  79. num = sum(flag)
  80. # print('num:',num,index)
  81. a = flag.reshape(-1,1) * dataset
  82. newpoint.append(np.sum(a,axis = 0)/num)
  83. i += 1
  84. # print(newpoint)
  85. return newpoint
  86. # testcenter = center(test,label2,k)
  87. # print('testcenter:',testcenter)
  88.  
  89. #K-means主体函数
  90. def myK(k,dataset):
  91. Startpoint = startpoint(k,dataset)
  92. m,n = np.shape(Startpoint)
  93. centerpoint = Startpoint
  94. labelset = classfy(dataset,Startpoint)
  95. newcenter = Center(dataset,labelset,k)
  96. # print('外:cecnterpoint', centerpoint)
  97. # print('外:newcenter', newcenter)
  98. flag = 0
  99. for i in range(k):
  100. for j in range(n):
  101. if centerpoint[i][j] != newcenter[i][j]:
  102. flag = 1
  103. while flag:
  104. print('循环')
  105. # print('里:cecnterpoint', centerpoint)
  106. # print('里:newcenter', newcenter)
  107. flag = 0
  108. for i in range(k):
  109. for j in range(n):
  110. if centerpoint[i][j] != newcenter[i][j]:
  111. flag = 1
  112. # print('flag:',flag)
  113. centerpoint = newcenter[:]
  114. labelset = classfy(dataset,centerpoint)
  115. newcenter = Center(dataset, labelset, k)
  116. # print('final_resultlabel:',labelset)
  117. # print('cenerpoint:', centerpoint)
  118. return labelset,centerpoint
  119.  
  120. #测试
  121. k=5
  122. final_label,centerpoint = myK(k,dataset)
  123. print('centerpoint:',centerpoint)
  124. mat_center = np.mat(centerpoint)
  125.  
  126. #画图
  127. # plt.scatter(test[:,0],test[:,1],40,10*(labelset+1))
  128. plt.scatter(dataset[:, 0], dataset[:, 1],40,10*(final_label+1))
  129. plt.show()

机器学习之--kmeans聚类简单算法实例的更多相关文章

  1. 机器学习六--K-means聚类算法

    机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...

  2. 机器学习中K-means聚类算法原理及C语言实现

    本人以前主要focus在传统音频的软件开发,接触到的算法主要是音频信号处理相关的,如各种编解码算法和回声消除算法等.最近切到语音识别上,接触到的算法就变成了各种机器学习算法,如GMM等.K-means ...

  3. 机器学习-K-means聚类及算法实现(基于R语言)

    K-means聚类 将n个观测点,按一定标准(数据点的相似度),划归到k个聚类(用户划分.产品类别划分等)中. 重要概念:质心 K-means聚类要求的变量是数值变量,方便计算距离. 算法实现 R语言 ...

  4. 菜鸟之路——机器学习之Kmeans聚类个人理解及Python实现

    一些概念 相关系数:衡量两组数据相关性 决定系数:(R2值)大概意思就是这个回归方程能解释百分之多少的真实值. Kmeans聚类大致就是选择K个中心点.不断遍历更新中心点的位置.离哪个中心点近就属于哪 ...

  5. 机器学习:K-Means聚类算法

    本文来自同步博客. 前面几篇文章介绍了回归或分类的几个算法,它们的共同点是训练数据包含了输出结果,要求算法能够通过训练数据掌握规律,用于预测新输入数据的输出值.因此,回归算法或分类算法被称之为监督学习 ...

  6. 【机器学习】K-means聚类算法与EM算法

    初始目的 将样本分成K个类,其实说白了就是求一个样本例的隐含类别y,然后利用隐含类别将x归类.由于我们事先不知道类别y,那么我们首先可以对每个样例假定一个y吧,但是怎么知道假定的对不对呢?怎样评价假定 ...

  7. 机器学习: K-means 聚类

    今天介绍机器学习里常见的一种无监督聚类算法,K-means.我们先来考虑在一个高维空间的一组数据集,S={x1,x2,...,xN}" role="presentation&quo ...

  8. 机器学习之KMeans聚类

    零.学习生成测试数据 from sklearn.datasets import make_blobs from matplotlib import pyplot # create test data ...

  9. 【Python学习笔记】使用python进行kmeans聚类

    使用python进行kmeans聚类 假设我们要解决一个这样的问题. 以下是一些同学,大萌是一个学霸,而我们想要找到这些人中的潜在学霸,所以我们要把这些人分为两类--学霸与非学霸. 高数 英语 Pyt ...

随机推荐

  1. Evaluation of Forwarding Efficiency in NFV-Nodes Toward Predictable Service Chain Performance

    文章名称:Evaluation of Forwarding Efficiency in NFV-Nodes Toward Predictable Service Chain Performance 发 ...

  2. ES 常用的查询语句介绍

    elasticsearch定义了两种查询方式: 一.索引(index).type.document 相关语句 1.列出所有索引的状态 GET /_cat/indices?v health status ...

  3. 关于4A系统(我对4A系统的维护的理解)

    4A系统 4A系统是统一安全管理平台解决方案,指认证Authentication.账号Account.授权Authorization.审计Audit,中文名称为统一安全管理平台解决方案.即将身份认证. ...

  4. mysql删除多个重复数据,多个字段添加唯一性索引

    需求:删除station_id.ab_data_time.item_code_id.data_cycle.ab_value 字段重复的记录 #查询重复的数据 select b.id,b.station ...

  5. hibernate之事务处理

    四个方面:事务的性质,事物的隔离级别,hibernate配置事务的隔离级别,使用事务小案例 1. 事务的性质: 四种性质:原子性,一致性,隔离性,持久性. 原子性:原子,不可再分.一个操作不能分为更小 ...

  6. vue swiper中的大坑

    mounted() { var self = this; for (var i = 0; i < self.$refs.mySwiper.swiper.pagination.bullets.le ...

  7. pythonのdjango Form简单应用。

    Form表单有两种应用场景: 1.生成HTML标签. 2.验证输入内容. 如果我们在django程序中使用form时,需要在views中导入form模块 from django import form ...

  8. spring boot启动项的问题

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...

  9. CocoaLumberjack——带颜色的Log

    CocoaLumberjack可以带颜色Log,具体的好处嘛,谁用谁知道,:] 具体步骤如下: 1. 安装XcodeColors插件 下载地址:https://github.com/robbiehan ...

  10. GitLab实战操作指南

    一.Git原理 1.Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). 2.Git有什么特点? 简单来说就是:高端大气上档次! 3.GIt与SVN区别 SVN管理: 属于集中式 ...