请写出完整k-means++算法代码
时间: 2023-09-08 15:07:48 浏览: 71
当然可以,请看下面的代码实现:
```python
import numpy as np
def k_means_pp(X, K):
# 随机选择一个初始中心点
centers = [X[np.random.randint(0, X.shape[0])]]
for _ in range(1, K):
# 计算每个样本点到最近中心点的距离
distances = np.array([min([np.linalg.norm(x - c) for c in centers]) for x in X])
# 根据距离选择下一个中心点,距离越大的样本点被选中的概率越大
probs = distances / distances.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)
```
这段代码实现了 k-means++ 算法的核心部分,即选择初始的 K 个中心点。它根据样本点到已有中心点的距离来计算每个样本点被选为中心点的概率,并根据概率选择下一个中心点。最终返回选择的 K 个中心点。
阅读全文