k-means 聚类算法思想先随机选择k个聚类中心,把集合里的元素与最近的聚类中心聚为一类,得到一次聚类,再把每一个类的均值作为新的聚类中心重新聚类,迭代n次得到最终结果分步解析
一、初始化聚类中心
首先随机选择集合里的一个元素作为第一个聚类中心放入容器,选择距离第一个聚类中心最远的一个元素作为第二个聚类中心放入容器,第三、四、、、N个同理,为了优化可以选择距离开方做为评判标准
二、迭代聚类
依次把集合里的元素与距离最近的聚类中心分为一类,放到对应该聚类中心的新的容器,一次聚类完成后求出新容器里个类的均值,对该类对应的聚类中心进行更新,再次进行聚类操作,迭代n次得到理想的结果
三、可视化展示
利用 python 第三方库中的可视化工具 matplotlib.pyplot 对聚类后的元素显示(散点图),方便查看结果
python代码实现
import numpy as np import matplotlib.pyplot as plt # 两点距离 def distance(e1, e2): return np.sqrt((e1[0]-e2[0])**2+(e1[1]-e2[1])**2) # 集合中心 def means(arr): return np.array([np.mean([e[0] for e in arr]), np.mean([e[1] for e in arr])]) # arr中距离a最远的元素,用于初始化聚类中心 def farthest(k_arr, arr): f = [0, 0] max_d = 0 for e in arr: d = 0 for i in range(k_arr.__len__()): d = d + np.sqrt(distance(k_arr[i], e)) if d > max_d: max_d = d f = e return f # arr中距离a最近的元素,用于聚类 def closest(a, arr): c = arr[1] min_d = distance(a, arr[1]) arr = arr[1:] for e in arr: d = distance(a, e) if d < min_d: min_d = d c = e return c if __name__=="__main__": ## 生成二维随机坐标(如果有数据集就更好) arr = np.random.randint(100, size=(100, 1, 2))[:, 0, :] ## 初始化聚类中心和聚类容器 m = 5 r = np.random.randint(arr.__len__() - 1) k_arr = np.array([arr[r]]) cla_arr = [[]] for i in range(m-1): k = farthest(k_arr, arr) k_arr = np.concatenate([k_arr, np.array([k])]) cla_arr.append([]) ## 迭代聚类 n = 20 cla_temp = cla_arr for i in range(n): # 迭代n次 for e in arr: # 把集合里每一个元素聚到最近的类 ki = 0 # 假定距离第一个中心最近 min_d = distance(e, k_arr[ki]) for j in range(1, k_arr.__len__()): if distance(e, k_arr[j]) < min_d: # 找到更近的聚类中心 min_d = distance(e, k_arr[j]) ki = j cla_temp[ki].append(e) # 迭代更新聚类中心 for k in range(k_arr.__len__()): if n - 1 == i: break k_arr[k] = means(cla_temp[k]) cla_temp[k] = [] ## 可视化展示 col = ['HotPink', 'Aqua', 'Chartreuse', 'yellow', 'LightSalmon'] for i in range(m): plt.scatter(k_arr[i][0], k_arr[i][1], linewidth=10, color=col[i]) plt.scatter([e[0] for e in cla_temp[i]], [e[1] for e in cla_temp[i]], color=col[i]) plt.show()
结果展示
总结
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“k-means 聚类算法与Python实现代码”评论...
更新日志
2024年11月08日
2024年11月08日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]