K-MEANS,手动指定聚类中心代码
时间: 2023-12-25 12:03:31 浏览: 59
K-means_k-means_K._图像聚类_
以下是手动指定聚类中心的 K-MEANS 算法的 Python 代码实现。首先需要导入 numpy 库和 matplotlib 库:
```python
import numpy as np
import matplotlib.pyplot as plt
```
然后定义一个函数 kmeans,接受数据集和聚类中心个数 k 作为参数:
```python
def kmeans(data, k):
# 手动指定聚类中心
centers = np.array([[2.0, 3.0], [5.0, 4.0], [9.0, 6.0]])
# 记录每个数据点所属的簇
clusters = np.zeros(len(data))
# 聚类迭代次数
max_iter = 100
for i in range(max_iter):
# 计算每个数据点到聚类中心的距离
distances = np.sqrt(((data - centers[:, np.newaxis])**2).sum(axis=2))
# 将每个数据点分配到最近的聚类中心所在的簇
clusters = np.argmin(distances, axis=0)
# 更新聚类中心
for j in range(k):
centers[j] = data[clusters == j].mean(axis=0)
return clusters, centers
```
上述代码中,我们手动指定了三个聚类中心,即 centers 变量。在循环中,我们对每个数据点计算到聚类中心的距离,并将其分配到最近的簇中。然后我们更新聚类中心,使其成为簇中所有数据点的平均值。
最后,我们可以使用以下代码生成数据集并调用 kmeans 函数进行聚类:
```python
# 生成数据集
data = np.concatenate([np.random.randn(100, 2) * 0.5 + [2, 3],
np.random.randn(100, 2) * 0.5 + [5, 4],
np.random.randn(100, 2) * 0.5 + [9, 6]])
# 聚类
clusters, centers = kmeans(data, 3)
# 绘制结果
plt.scatter(data[:, 0], data[:, 1], c=clusters)
plt.scatter(centers[:, 0], centers[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
```
上述代码中,我们生成了一个包含三个簇的数据集,并使用 kmeans 函数进行聚类。最后我们使用 matplotlib 库绘制了聚类结果。
阅读全文