基于K-means具体代码怎么实现
时间: 2024-03-17 16:43:25 浏览: 46
python基于K-means聚类算法的图像分割
5星 · 资源好评率100%
以下是Python中基于K-means的聚类算法的具体实现代码:
```python
import numpy as np
from sklearn.cluster import KMeans
# 创建示例数据集
X = np.array([[1, 2], [1, 4], [1, 0],
[4, 2], [4, 4], [4, 0]])
# 创建KMeans对象,设置聚类数为2
kmeans = KMeans(n_clusters=2, random_state=0)
# 训练模型
kmeans.fit(X)
# 输出聚类结果
print(kmeans.labels_)
```
在这个例子中,我们首先使用numpy库创建了一个大小为6×2的数据集X,表示6个数据点,每个数据点有2个属性。然后,我们创建了一个KMeans对象,并将聚类数设置为2。接着,我们使用fit()方法训练了KMeans模型,并使用labels_属性输出了聚类结果。
需要注意的是,KMeans算法的聚类结果是非确定性的,即每次运行可能会得到不同的结果。为了避免这种情况,我们在创建KMeans对象时可以设置random_state参数,以便在每次运行时使用相同的随机数种子,从而保证结果的一致性。
除了使用sklearn库中的KMeans类实现K-means算法之外,我们也可以手动实现算法。以下是一个基于numpy库的K-means聚类算法实现代码:
```python
import numpy as np
def kmeans(X, k, max_iter=100):
# 随机初始化聚类中心
centroids = X[np.random.choice(len(X), size=k, replace=False)]
for i in range(max_iter):
# 计算每个数据点与聚类中心的距离
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# 将每个数据点分配到最近的聚类中心
labels = np.argmin(distances, axis=0)
# 更新聚类中心
for j in range(k):
centroids[j] = X[labels == j].mean(axis=0)
return labels
```
在这个实现中,我们首先随机初始化了K个聚类中心,然后迭代执行以下步骤:
1. 计算每个数据点与聚类中心的距离。
2. 将每个数据点分配到最近的聚类中心。
3. 更新聚类中心。
重复执行这些步骤,直到达到最大迭代次数为止。最后,我们返回每个数据点所属的聚类标签。
需要注意的是,这个代码实现并没有考虑聚类中心无法收敛的情况,实际应用时需要进行一定的容错处理。
阅读全文