k-means++聚类算法python
时间: 2023-09-30 07:02:08 浏览: 83
k-means++是一种改进的k-means聚类算法,它可以更好地选择质心的初始值,以避免陷入局部最优解。下面是一个Python实现的示例:
```python
import numpy as np
from sklearn.cluster import KMeans
def kmeans_plus_plus(X, K):
centers = []
centers.append(X[np.random.randint(X.shape[0]), :])
for k in range(1, K):
D2 = np.array([min([np.linalg.norm(x-c)**2 for c in centers]) for x in X])
probs = D2 / D2.sum()
cumprobs = probs.cumsum()
r = np.random.rand()
for j, p in enumerate(cumprobs):
if r < p:
i = j
break
centers.append(X[i])
return np.array(centers)
X = np.random.randn(100, 2)
K = 3
init_centers = kmeans_plus_plus(X, K)
km = KMeans(n_clusters=K, init=init_centers).fit(X)
```
其中,`X`是数据矩阵,每行表示一个样本;`K`是聚类的数目;`kmeans_plus_plus`函数用于选择初始质心。在实现中,我们先随机选择一个质心,然后对于每个样本,计算到最近质心的距离的平方,得到一个概率分布。接着,我们根据这个概率分布随机选择下一个质心,直到选择了`K`个质心。最后,使用`KMeans`函数进行聚类。
阅读全文