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()
早七睡不醒
- 粉丝: 0
- 资源: 167
最新资源
- vscode-remote-ssh插件
- Ruby - Ruby 开发 - 常用知识点
- 响应式营销型运动健身器材pbootcms网站模板
- ingress.yaml
- LabVIEW练习44,计算学生三门课(语文,数学,英语)的平均分,并根据平均分划分成绩等级
- densenet模型-基于深度学习对时尚配饰识别-不含数据集图片-含逐行注释和说明文档.zip
- 【C语音期末/课程设计】银行客户管理系统(DevC项目)
- densenet模型-基于深度学习识别电子产品-不含数据集图片-含逐行注释和说明文档.zip
- shufflenet模型-基于卷积神经网络识别地理特征-不含数据集图片-含逐行注释和说明文档.zip
- 西北工业大学编译原理试点班大作业-实现一个能够正常工作的Sysy语法编译器+源代码+文档说明+实验报告
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈