K中心聚类python实现 并用数据集进行性能测试
时间: 2023-07-25 09:41:08 浏览: 45
好的,下面是一个完整的K中心聚类Python实现,以及使用数据集进行性能测试的示例:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.metrics import pairwise_distances_argmin
from time import time
class KMeans:
def __init__(self, k):
self.k = k
def fit(self, X):
m = X.shape[0] # 样本数量
self.centers = X[np.random.choice(m, self.k, replace=False)] # 随机选择k个中心点
while True:
# 分配样本到最近的中心点
labels = pairwise_distances_argmin(X, self.centers)
# 计算新的中心点
new_centers = np.array([X[labels == i].mean(0) for i in range(self.k)])
# 如果中心点不再变化,停止迭代
if np.all(self.centers == new_centers):
break
self.centers = new_centers
return self.centers, labels
# 生成随机数据集
X, y = make_blobs(n_samples=1000, centers=3, n_features=2, random_state=0)
# 测试KMeans算法性能
t0 = time()
kmeans = KMeans(k=3)
centers, labels = kmeans.fit(X)
t1 = time()
print('KMeans算法用时: %.2f秒' % (t1 - t0))
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], marker='*', s=300, c='red')
plt.show()
```
这里使用scikit-learn中的make_blobs函数生成一个包含1000个样本,3个类别的数据集。然后,我们使用KMeans类进行聚类,将k设置为3,并记录算法的运行时间。最后,我们使用matplotlib库将聚类结果可视化。
您可以根据需要更改数据集的大小和K值,并比较不同参数下算法的性能及聚类效果。