Python K-means算法的计算步骤
- 更新时间:2021-07-25 09:06:27
- 编辑:逯乐意
给网友们整理相关的编程文章,网友吕雪柳根据主题投稿了本篇教程内容,涉及到Python相关内容,已被482网友关注,内容中涉及的知识点可以在下方直接下载获取。
参考资料
- 《从零开始学Python网络爬虫》源代码 配套资源 / 34.6 MB / 罗攀 蒋仟 推荐度:
- Python数据科学入门 PDF 电子书 / 13.9 MB / Dmitry 推荐度:
- 机器学习:使用OpenCV和Python进行智能图像处理 PDF 电子书 / 11.4 MB / 迈克尔·贝耶勒 推荐度:
- Python数据可视化之matplotlib精进 PDF 电子书 / 104 MB / 刘大成 推荐度:
- 《从零开始学Python(第2版)》配套资源 配套资源 / 31.29 KB / [美]约翰·保罗·穆勒(John,Pau 推荐度:
正文内容
无意中在网上看到《Python K-means算法的计算步骤》,技术要点讲的很好,这里给大家转摘到这里,为了大家阅读方便。
1、步骤说明
(1)确定K值(决定数据聚为几类,K值是K-Means算法中唯一的参数);
(2)从原始数据集中随机选择K个点作为初始均值点;
(3)依次从原始数据集中取出数据,每取出一个数据就和K个均值点分别计算距离(默认计算点间的欧氏距离),和谁更近就归为这个均值点所在的簇;
(4)分别计算各簇当前的均值点(即求该簇中所有点的平均值);
(5)比较当前的均值点和上一步得到的均值点是否相同,如果相同,则K-Means算法结束,否则,将当前的均值点替换掉之前的均值点,然后重新划分族,重复步骤三。
2、实例
import numpy as np import matplotlib.pyplot as plt '''标志位统计递归运行次数''' flag = 0 '''欧式距离''' def ecludDist(x, y): return np.sqrt(sum(np.square(np.array(x) - np.array(y)))) '''曼哈顿距离''' def manhattanDist(x, y): return np.sum(np.abs(x - y)) '''夹角余弦''' def cos(x, y): return np.dot(x, y)/(np.linalg.norm(x) * np.linalg.norm(y)) '''计算簇的均值点''' def clusterMean(dataset): return sum(np.array(dataset)) / len(dataset) '''生成随机均值点''' def randCenter(dataset, k): temp = [] while len(temp) < k: index = np.random.randint(0, len(dataset)-1) if index not in temp: temp.append(index) return np.array([dataset[i] for i in temp]) '''以数据集的前k个点为均值点''' def orderCenter(dataset, k): return np.array([dataset[i] for i in range(k)]) '''聚类''' def kMeans(dataset, dist, center, k): global flag #all_kinds用于存放中间计算结果 all_kinds = [] for _ in range(k): temp = [] all_kinds.append(temp) #计算每个点到各均值点的距离 for i in dataset: temp = [] for j in center: temp.append(dist(i, j)) all_kinds[temp.index(min(temp))].append(i) #打印中间结果 for i in range(k): print('第'+str(i)+'组:', all_kinds[i], end='\n') flag += 1 print('************************迭代'+str(flag)+'次***************************') #更新均值点 center_ = np.array([clusterMean(i) for i in all_kinds]) if (center_ == center).all(): print('结束') for i in range(k): print('第'+str(i)+'组均值点:', center_[i], end='\n') plt.scatter([j[0] for j in all_kinds[i]], [j[1] for j in all_kinds[i]], marker='*') plt.grid() plt.show() else: #递归调用kMeans函数 center = center_ kMeans(dataset, dist, center, k) def main(k): '''生成随机点''' x = [np.random.randint(0, 50) for _ in range(50)] y = [np.random.randint(0, 50) for _ in range(50)] points = [[i,j] for i, j in zip(x, y)] plt.plot(x, y, 'b.') plt.show() initial_center = randCenter(dataset=points, k=k) kMeans(dataset=points, dist=ecludDist, center=initial_center, k=k) if __name__ == '__main__': main(3)
以上就是Python K-means算法的计算步骤,希望对大家有所帮助。
相关教程
-
python 获取一个值在某个区间的指定倍数的值方法
今天小编就为大家分享一篇python 获取一个值在某个区间的指定倍数的值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
发布时间:2019-06-03
-
Python基础之条件控制操作示例【if语句】
这篇文章主要介绍了Python基础之条件控制操作,结合实例形式分析了Python使用if语句进行条件控制的相关操作技巧与相关注意事项,需要的朋友可以参考下
发布时间:2019-06-03