帮我写一个对某一数据集利用python实现kmeans++聚类分析的代码
时间: 2024-03-22 09:37:56 浏览: 68
python实现kmeans聚类算法
5星 · 资源好评率100%
好的,以下是对某一数据集实现KMeans++聚类分析的Python代码:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 读取数据集
data = pd.read_csv('data.csv')
X = data.iloc[:, [0, 1]].values
# 使用KMeans++聚类算法进行聚类
def kmeans_plus_plus(X, n_clusters):
# 随机选择一个样本作为第一个聚类中心
centers = [X[np.random.randint(len(X))]]
# 计算每个样本到最近聚类中心的距离的平方
distances = np.array([np.min([np.linalg.norm(x - c) ** 2 for c in centers]) for x in X])
# 选择剩余的聚类中心
for _ in range(n_clusters - 1):
# 根据距离的平方占比,以概率选择下一个聚类中心
probabilities = distances / np.sum(distances)
centers.append(X[np.random.choice(len(X), p=probabilities)])
distances = np.minimum(distances, np.array([np.linalg.norm(x - c) ** 2 for c in centers]))
# KMeans算法进行聚类
kmeans = KMeans(n_clusters=n_clusters, init=np.array(centers), n_init=1)
kmeans.fit(X)
return kmeans
# 聚类分析并绘制聚类结果
kmeans = kmeans_plus_plus(X, n_clusters=3)
labels = kmeans.labels_
centers = kmeans.cluster_centers_
plt.scatter(X[labels == 0, 0], X[labels == 0, 1], s=100, c='red', label='Cluster 1')
plt.scatter(X[labels == 1, 0], X[labels == 1, 1], s=100, c='blue', label='Cluster 2')
plt.scatter(X[labels == 2, 0], X[labels == 2, 1], s=100, c='green', label='Cluster 3')
plt.scatter(centers[:, 0], centers[:, 1], s=300, c='yellow', label='Centroids')
plt.title('KMeans++ Clustering')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()
```
其中,`data.csv`为数据集文件,其中包含两列数据,分别为X轴和Y轴坐标。在代码中,我们将读取数据集并将其转换为`Numpy`数组`X`,并调用`kmeans_plus_plus`函数进行KMeans++聚类。聚类结果将会用不同的颜色标记在散点图中,其中黄色表示聚类中心。
阅读全文