基于优化最小簇中心点距离之和的K-means聚类算法 python
时间: 2024-03-03 10:49:08 浏览: 60
基于优化最小簇中心点距离之和的K-means聚类算法,可以分为以下几个步骤:
1. 随机选择K个中心点作为初始聚类中心。
2. 对于每个样本,计算其到每个中心点的距离,将其归为距离最近的簇。
3. 对于每个簇,计算其中所有样本的平均值,将其作为新的中心点。
4. 重复步骤2和步骤3,直到中心点不再发生变化或达到最大迭代次数。
5. 最小化簇中心点距离之和,使得聚类结果更加紧凑。
以下是一个基于Python实现的基于优化最小簇中心点距离之和的K-means聚类算法的示例代码:
```python
import numpy as np
from sklearn.cluster import KMeans
# 加载数据集
data = np.loadtxt("data.txt", delimiter=",")
# K-means聚类算法实现
def kmeans(X, k, max_iter=100):
# 随机选择K个中心点作为初始聚类中心
idx = np.random.choice(X.shape[0], k, replace=False)
centers = X[idx]
for i in range(max_iter):
# 对于每个样本,计算其到每个中心点的距离,将其归为距离最近的簇
distances = np.sqrt(((X - centers[:, np.newaxis]) ** 2).sum(axis=2))
labels = np.argmin(distances, axis=0)
# 对于每个簇,计算其中所有样本的平均值,将其作为新的中心点
new_centers = np.array([X[labels == j].mean(axis=0) for j in range(k)])
# 最小化簇中心点距离之和
if np.allclose(centers, new_centers):
break
centers = new_centers
return labels
# 聚类结果可视化
def plot_clusters(X, labels):
import matplotlib.pyplot as plt
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.show()
# 调用K-means聚类算法
k = 3
labels = kmeans(data, k)
# 聚类结果可视化
plot_clusters(data, labels)
```
其中,`kmeans()`函数实现了基于优化最小簇中心点距离之和的K-means聚类算法,`plot_clusters()`函数实现了聚类结果的可视化,最后调用`kmeans()`函数进行聚类并可视化聚类结果。
阅读全文