python实现kmeans++聚类分析
时间: 2023-07-31 16:12:53 浏览: 122
Kmeans++ 是 Kmeans 算法的一种改进,它在初始化聚类中心的过程中引入了一些随机化方法,可以帮助我们更好地选择初始聚类中心,提高聚类的质量和效率。
以下是 Python 实现 Kmeans++ 聚类分析的代码:
```python
import numpy as np
import random
def kmeans_plus_plus(X, K):
"""
Kmeans++ 聚类分析
:param X: 数据集,N*D 的矩阵,N 行 D 列
:param K: 聚类中心个数
:return: 聚类中心
"""
centers = [] # 存储聚类中心
n_samples, n_features = X.shape
# 1. 从数据集中随机选择一个样本作为第一个聚类中心
random_index = random.randint(0, n_samples - 1)
centers.append(X[random_index])
# 2. 选择剩余的 K-1 个聚类中心
for i in range(K - 1):
# 2.1 计算每个样本距离最近的聚类中心的距离
distances = []
for j in range(n_samples):
dist = np.min([np.linalg.norm(X[j] - c) for c in centers])
distances.append(dist)
distances = np.array(distances)
# 2.2 选择新的聚类中心
probabilities = distances / np.sum(distances)
new_center_index = np.random.choice(range(n_samples), p=probabilities)
centers.append(X[new_center_index])
return np.array(centers)
```
使用方法如下:
```python
# 生成样本数据
X = np.random.randn(100, 2)
# Kmeans++ 聚类分析
K = 3
centers = kmeans_plus_plus(X, K)
print("聚类中心:", centers)
```
其中,X 是样本数据,K 是聚类中心个数,函数返回聚类中心。
阅读全文