Numpy Sklearn : 各个簇的质心到各个样本点的平均距离

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 计算各个簇的质心到各个样本点的平均距离。通过这一指标,我们可以评估聚类结果的好坏,找出不太紧密的簇,优化聚类效果。希望这篇文章能够对大家的聚类算法学习有所帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程