k-means聚类欧式距离
时间: 2024-12-27 18:19:48 浏览: 3
### 实现基于欧氏距离的K-Means聚类算法
#### 算法解释
K-Means是一种迭代式的无监督学习算法,用于将数据集划分为预定义数量\(k\)的簇(cluster)[^2]。该过程始于随机选择的数据点作为初始质心(centroid),随后通过不断更新这些质心的位置以及重新分配属于各个簇的数据点来优化划分。
对于每一个数据样本到各簇中心的距离计算采用的是欧几里得距离(Euclidean Distance),其公式表示如下:
\[d(p,q)=\sqrt{(p_1-q_1)^2+(p_2-q_2)^2+\cdots +(p_n-q_n)^2}\]
其中,\(p=(p_1,p_2,...,p_n)\) 和 \(q=(q_1,q_2,...,q_n)\) 是n维空间中的两点坐标向量。
每次迭代过程中,会执行两步操作:
- 计算所有数据点至当前各簇中心之间的欧式距离,并据此调整它们所属的簇;
- 更新每个簇的新质心位置为该簇内所有成员坐标的平均值;
当连续两次迭代间质心不再发生显著变化或达到最大迭代次数时,则认为收敛完成。
#### Python代码实现
下面给出一段简单的Python代码片段展示如何利用`scikit-learn`库快速构建并运行一个基于欧氏距离度量的标准K-Means模型:
```python
from sklearn.cluster import KMeans
import numpy as np
# 假设我们有二维平面上的一些观测数据
data = np.array([[1, 2], [1, 4], [1, 0],
[4, 2], [4, 4], [4, 0]])
# 创建KMeans实例对象,指定要形成的簇数k=2
kmeans_model = KMeans(n_clusters=2)
# 使用fit()函数训练模型(即找到最佳质心)
kmeans_model.fit(data)
# 输出最终得到的两个簇各自的质心坐标
print("Cluster centers:\n", kmeans_model.cluster_centers_)
```
这段程序首先导入必要的模块,接着准备了一些模拟数据供测试之用。之后创建了一个`KMeans`分类器实例,并指定了期望获得的簇的数量(\(k=2\))。调用`.fit()`方法启动实际的学习流程,在此期间自动完成了初始化、分配和重定位三个核心阶段的工作。最后打印出了由算法确定下来的两类群组的核心代表——也就是所谓的“质心”。
阅读全文