Kmeans++聚类模型的建立 Kmeans++ [6]是一种迭代求解的聚类分析算法
时间: 2025-07-06 14:54:20 浏览: 1
### Kmeans++ 聚类模型的构建
#### 初始化方法
为了改善传统K-means算法中初始化质心位置带来的局限性,Kmeans++引入了一种更合理的初始质心选择策略。该策略旨在通过增加不同初始质心之间的最小化距离来提高最终聚类的效果和效率。
具体来说,在第一次迭代时会从整个数据集中随机挑选一个点作为首个聚类中心[^1]。对于后续每一个新的聚类中心,则依据未被选中的各点到最近已有聚类中心的距离平方的概率分布来进行加权抽样选取。这意味着离现有任何已知聚类中心越远的数据点有更高的概率成为新加入的聚类中心之一[^2]。
```python
import numpy as np
from sklearn.cluster import KMeans
def init_centers(X, k):
"""利用KMeans++的方式初始化k个聚类中心"""
centers = []
# 随机选择第一个中心点
idx = np.random.randint(len(X))
centers.append(X[idx])
while len(centers) < 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()
ind = np.where(cumprobs >= r)[0][0]
centers.append(X[ind])
return np.array(centers)
```
#### 迭代过程
一旦完成了上述精心设计的初始化阶段之后,Kmeans++就进入了标准的K-means循环流程:
- 对于每一轮迭代,计算所有样本相对于当前各个聚类中心的距离,并据此分配给最近的那个类别;
- 更新每个簇的新质心为其成员坐标的平均值;
- 当达到预设的最大迭代次数或连续两次更新后的变化量小于某个阈值时停止迭代[^3]。
```python
class KMeansPlusPlus(KMeans):
def _init_centroids(self, X):
self.cluster_centers_ = init_centers(X, self.n_clusters)
model = KMeansPlusPlus(n_clusters=3).fit(data_points)
labels = model.labels_
centroids = model.cluster_centers_
```
阅读全文
相关推荐


















