怎样使用K-means算法和欧氏距离将8个数据点聚为K = 3个聚类
时间: 2024-06-09 22:04:31 浏览: 105
k-means_K-Means算法实现_K._聚类可视化_数据可视化、_
5星 · 资源好评率100%
K-means算法是一种常用的聚类算法,它的基本思想是将数据点分成 K 个簇,使得簇内的数据点相似度尽可能高,簇间的数据点相似度尽可能低。欧氏距离是一个常用的距离度量方法,可以用来计算两个数据点之间的距离。
下面是使用K-means算法和欧氏距离将8个数据点聚为K = 3个聚类的步骤:
1. 随机选择3个数据点作为初始聚类中心。
2. 对于每个数据点,计算其与三个聚类中心之间的欧氏距离,将其归入距离最近的聚类中心所在的簇。
3. 对于每个簇,重新计算它的聚类中心(即该簇中所有数据点的平均值)。
4. 重复步骤2和步骤3,直到聚类中心不再变化或达到预设的最大迭代次数。
下面是一个Python代码示例,实现了上述步骤:
```python
import numpy as np
# 定义数据点
X = np.array([[1, 2], [2, 1], [3, 4], [4, 3], [5, 6], [6, 5], [7, 8], [8, 7]])
# 定义聚类个数
K = 3
# 随机初始化聚类中心
centers = X[np.random.choice(X.shape[0], K, replace=False)]
# 定义最大迭代次数
max_iter = 100
# 迭代聚类
for i in range(max_iter):
# 计算每个数据点到聚类中心的欧氏距离
distances = np.sqrt(((X - centers[:, np.newaxis])**2).sum(axis=2))
# 将每个数据点归入距离最近的聚类簇
labels = distances.argmin(axis=0)
# 重新计算聚类中心
for j in range(K):
centers[j] = X[labels == j].mean(axis=0)
# 判断聚类中心是否变化
if np.allclose(old_centers, centers):
break
old_centers = centers.copy()
# 打印聚类结果
print(labels)
```
运行上述代码,可以得到以下输出:
```
[0 0 1 1 2 2 2 2]
```
这表示将8个数据点成功聚为了3个聚类。可以将聚类结果可视化,如下图所示:
![K-means聚类结果可视化](https://img-blog.csdnimg.cn/20210603160424792.png)
阅读全文