python实现kmeas++对数据实现聚类分析
时间: 2024-03-22 15:37:24 浏览: 65
算法改进基于python实现K-Means聚类算法及其改进(K-mean++)源码+详细代码注释.zip
5星 · 资源好评率100%
好的,下面是Python实现K-means++对数据进行聚类分析的代码:
```python
import numpy as np
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
def kmeans_pp(X, k):
# 初始化聚类中心
centers = [X[np.random.choice(len(X), 1)][0]]
for i in range(1, k):
# 计算每个样本点距离当前聚类中心的最短距离
distances = np.array([min([np.linalg.norm(x-c)**2 for c in centers]) for x in X])
# 根据距离的权重挑选下一个聚类中心
probs = distances / distances.sum()
next_center = X[np.random.choice(len(X), 1, p=probs)][0]
centers.append(next_center)
# 进行K-means聚类
labels = np.zeros(len(X))
while True:
dist = np.array([np.linalg.norm(X - c, axis=1) for c in centers]).T
new_labels = np.argmin(dist, axis=1)
if np.array_equal(labels, new_labels):
break
labels = new_labels
centers = [np.mean(X[labels == i], axis=0) for i in range(k)]
return labels
# 生成数据集
X, y = make_blobs(n_samples=300, centers=4, random_state=0, cluster_std=0.7)
# 进行聚类分析
labels = kmeans_pp(X, 4)
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.show()
```
其中,`X`为数据集,`k`为聚类个数,返回的是每个样本所属的聚类类别。代码中使用了`make_blobs`函数生成了一个4类数据集,最后将聚类结果可视化。
阅读全文