import numpy as np
import matplotlib.pyplot as plt
def initialize_centroids(X, k):
""" 随机初始化k个质心 """
m, n = X.shape
centroids = X[np.random.choice(m, k, replace=False)]
return centroids
def closest_centroid(X, centroids):
""" 计算每个点到每个质心的距离,并返回最近的质心的索引 """
m = X.shape[0]
k = centroids.shape[0]
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
return np.argmin(distances, axis=0)
def move_centroids(X, closest, centroids):
""" 根据最近的点的均值更新质心位置 """
m, n = X.shape
k = centroids.shape[0]
new_centroids = np.zeros((k, n))
for i in range(k):
points_in_cluster = X[closest == i]
new_centroids[i] = points_in_cluster.mean(axis=0)
return new_centroids
def kmeans(X, k, max_iters=100):
""" 实现K-Means算法 """
centroids = initialize_centroids(X, k)
for _ in range(max_iters):
closest = closest_centroid(X, centroids)
centroids = move_centroids(X, closest, centroids)
return centroids, closest
# 生成随机数据集
np.random.seed(0)
X = np.random.randn(300, 2)
# 执行K-Means聚类
k = 3
centroids, closest = kmeans(X, k)
# 可视化结果
colors = ['r', 'g', 'b']
for i in range(k):
points = X[closest == i]
plt.scatter(points[:, 0], points[:, 1], s=50, c=colors[i], label=f'Cluster {i+1}')
plt.scatter(centroids[:, 0], centroids[:, 1], s=200, c='yellow', label='Centroids')
plt.legend()
plt.show()
早七睡不醒
- 粉丝: 13
- 资源: 167
最新资源
- 基于plc的污水处理,组态王动画仿真,带PLC源代码,组态王源代码,图纸,IO地址分配
- MATLAB代码:考虑P2G和碳捕集设备的热电联供综合能源系统优化调度模型 关键词:碳捕集 综合能源系统 电转气P2G 热电联产 低碳调度 参考文档:Modeling and Optimiza
- 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极 包括图中模型以及一个仿真设置要点word文档教程
- 基于mpx+vue+node.js的双端网盘系统的设计与实现源代码全套技术资料.zip
- welearn刷时长版本v3.0.bat
- 前端分析-2023071100789-y5
- 前端分析-2023071100789
- 调查问卷系统源代码全套技术资料.zip
- C#实用教程郑阿奇梁敬东程序源代码及电子课件
- 环境监测系统源代码全套技术资料.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈