k均值聚类算法 python样本距离
时间: 2024-12-30 18:23:09 浏览: 10
### 计算K-Means聚类算法中的样本距离
在Python中实现K-Means聚类时,通常会利用`scikit-learn`库来简化操作。对于计算样本间的距离,在K-Means过程中主要是为了找到最接近质心(centroid)的数据点作为簇成员。
#### 使用Scikit-Learn进行K-Means并获取样本距离
通过`sklearn.cluster.KMeans`模块可以直接调用内置函数完成整个流程:
```python
from sklearn.cluster import KMeans
import numpy as np
# 假设X是我们想要分类的数据集
X = np.array([[1, 2], [1, 4], [1, 0],
[10, 2], [10, 4], [10, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
# 获取每个样本所属的标签
labels = kmeans.labels_
# 获得所有样本到各自最近质心的距离平方和
inertia = kmeans.inertia_
print(inertia)
# 对于单个样本与指定质心之间的欧式距离可以通过下面方式获得
sample_index = 0 # 取第一个样本为例
distance_to_centroids = np.linalg.norm(X[sample_index] - kmeans.cluster_centers_, axis=1)
print(distance_to_centroids)
```
上述代码展示了如何基于已训练好的模型得到特定样本至各个质心的实际距离[^3]。
#### 自定义计算两两点间距离矩阵
有时也需要构建完整的距离矩阵用于更复杂的分析或验证目的:
```python
def pairwise_distances(data_points):
n_samples = data_points.shape[0]
dist_matrix = np.zeros((n_samples, n_samples))
for i in range(n_samples):
for j in range(i+1, n_samples):
diff = data_points[i] - data_points[j]
squared_dist = np.dot(diff.T, diff)
dist_matrix[i][j] = dist_matrix[j][i] = np.sqrt(squared_dist)
return dist_matrix
distances_between_all_pairs = pairwise_distances(X)
print(distances_between_all_pairs)
```
这段自定义函数实现了任意两个样本之间欧几里德距离的计算,并返回一个对称的距离矩阵[^1]。
阅读全文