多维kmeans聚类算法python代码实现并绘制图像
时间: 2023-07-02 21:23:08 浏览: 146
好的,下面是多维K-Means聚类算法的Python代码实现,并绘制图像:
```python
import numpy as np
import matplotlib.pyplot as plt
def kmeans(data, k, max_iter=300):
"""
多维K-Means聚类算法实现
:param data: 数据集,形状为 (N, D),N为数据点个数,D为数据维度
:param k: 聚类簇数
:param max_iter: 最大迭代次数
:return: centroids: 聚类中心,形状为 (k, D)
clusters: 数据点所属的聚类簇,形状为 (N,)
"""
N, D = data.shape
centroids = data[np.random.choice(N, k, replace=False)] # 随机选择k个数据点作为聚类中心
clusters = np.zeros(N, dtype=int) # 初始化每个数据点所属的聚类簇
for i in range(max_iter):
# 分配每个数据点到最近的聚类中心
for j in range(N):
distances = np.linalg.norm(data[j] - centroids, axis=1) # 计算数据点到每个聚类中心的距离
clusters[j] = np.argmin(distances) # 将数据点分配到最近的聚类中心
# 更新聚类中心
for j in range(k):
centroids[j] = np.mean(data[clusters == j], axis=0)
return centroids, clusters
# 生成随机数据集
np.random.seed(42)
data = np.random.randn(100, 2)
# 调用kmeans函数进行聚类
centroids, clusters = kmeans(data, k=3)
# 绘制数据点和聚类中心
plt.scatter(data[:, 0], data[:, 1], c=clusters)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='*', s=150, c='r')
plt.show()
```
运行以上代码,即可得到多维K-Means聚类的结果图像。
阅读全文