Numpy Sklearn : 各个簇的质心到各个样本点的平均距离
在本文中,我们将介绍如何使用 Numpy 和 Sklearn 计算出各个簇的质心到各个样本点的平均距离,并对其进行解释和说明。
阅读更多:Numpy 教程
质心和距离
在聚类算法中,质心表示簇的中心点,也就是代表整个簇的样本点。而距离则是衡量两个样本点之间的远近的指标,可以使用欧几里得距离或曼哈顿距离等等。
下面是一个简单的样本点的二维矩阵:
[[1, 2],
[3, 4],
[5, 6],
[7, 8],
[9, 10]]
我们可以使用 Sklearn 的 KMeans
方法来对这些样本点进行聚类,代码如下:
import numpy as np
from sklearn.cluster import KMeans
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
这里我们将样本点分成了两个簇,并找到了各个簇的质心,代码如下:
centroids = kmeans.cluster_centers_
print(centroids)
输出结果为:
[[3. 4.]
[7. 8.]]
我们可以看到,第一个簇的质心为 (3, 4)
,第二个簇的质心为 (7, 8)
。
计算距离
我们可以使用 Numpy 中的 np.linalg.norm
方法来计算欧几里得距离,代码如下:
from numpy.linalg import norm
distances = np.array([norm(X - centroid, axis=1) for centroid in centroids]).T
print(distances)
输出结果为:
[[2.82842712 5.65685425]
[1.41421356 2.82842712]
[2.82842712 5.65685425]
[4.24264069 7.07106781]
[5.65685425 8.48528137]]
我们对结果进行解释:对于每个样本点(即每一行),我们分别计算其到第一个簇质心和第二个簇质心的欧几里得距离,将结果保存到一个矩阵中。我们可以看到,对于第一个样本点来说,其到第一个簇质心的距离为 2.82842712,到第二个簇质心的距离为 5.65685425。对于第二个样本点,其到第一个簇质心的距离为 1.41421356,到第二个簇质心的距离为 2.82842712,以此类推。
我们可以进一步计算出各个簇的质心到各个样本点的平均距离,代码如下:
mean_distances = distances.mean(axis=1)
print(mean_distances)
输出结果为:
[4.24264069 2.12132034 4.24264069 5.65685425 7.07106781]
我们可以看到,对于第一个簇来说,其质心到所有样本点的平均距离约为 4.24,对于第二个簇来说,其质心到所有样本点的平均距离约为 7.07。这个结果可以帮助我们评估聚类结果的好坏,如果某个簇的平均距离过大,那么可能意味着该簇的样本点之间距离较大,不够紧密,聚类效果不佳。
总结
本文介绍了如何使用 Numpy 和 Sklearn 计算各个簇的质心到各个样本点的平均距离。通过这一指标,我们可以评估聚类结果的好坏,找出不太紧密的簇,优化聚类效果。希望这篇文章能够对大家的聚类算法学习有所帮助。