如何计算 Sklearn 中点到质心的平均距离的平均值? [复制]
Posted
技术标签:
【中文标题】如何计算 Sklearn 中点到质心的平均距离的平均值? [复制]【英文标题】:How to calculate mean of average distance of points to centroids in Sklearn? [duplicate] 【发布时间】:2019-11-21 16:20:54 【问题描述】:我被要求计算每个点到其质心的平均距离。已经提供了数据集和集群数量,这似乎是一个非常直接的问题(考虑到 k-means 集群的作用),但我似乎找不到可行的解决方案。
数据集是一个 3 列、500 行的带有浮点数的 Excel 工作表。
根据我的阅读,最简单的方法是将点到每个质心的距离放在一个 numpy 数组中并计算平均值。这就是我在下面所做的。
from sklearn.cluster import KMeans
import pandas as pd
import matplotlib.pyplot as plt
'exec(%matplotlib inline)'
import numpy as np
df = pd.read_excel('k-means_test.xlsx', sheet_name='data_set')
X = np.array(df)
plt.scatter(X[:,0],X[:,1], label = 'True Position')
kmeans = KMeans(n_clusters=5)
kmeans.fit(X)
## print(kmeans.cluster_centers_)
plt.scatter(X[:,0],X[:,1], c=kmeans.labels_, cmap='rainbow')
## plt.show()
distances = kmeans.fit_transform(X)
variance = 0
i = 0
for label in kmeans.labels_:
variance = variance + distances[i][label]
i = i + 1
mean_distance = np.mean(distances)
print(mean_distance)
我预期的值介于 1.41 和 2.85 之间,但我得到的是 11.3。很遥远。
任何帮助将不胜感激。一般来说,我对 python 和机器学习算法还是很陌生。
【问题讨论】:
看看:***.com/questions/40828929/… 感谢@MaximilianPeters,我尝试将其中一些代码合并到我上面的示例中,但事情失控了(这里的初学者和对我来说示例中的一些代码很复杂) - 所以我走下麻木的平均方法。我再看看能不能推导出什么。 【参考方案1】:K-means 使用 平方 欧几里得距离。
人们经常错误地认为这意味着最小化欧几里得距离——事实并非如此。
无论如何,尝试插入distances = numpy.sqrt(distances)
,之后您的平均值可能会低于 3。
【讨论】:
嗨@Anony-Mousse,感谢您的评论-从概念上讲,每一个都有帮助。不幸的是,这导致了 3.37 - 所以我一定是在某个地方搞砸了。也许尝试使用欧几里得距离有问题? 嗯,你正在计算到所有三个中心的平均距离...... 嗯......不知道这应该如何影响我的答案仍然需要在 1.41 和 2.85 之间的点,因为所有点到它们各自中心的平均距离。并且有 5 个集群,而不是 3 个。您是否建议上面的代码计算所有点到所有 5 个中心的平均距离? 是的。每个点的所有中心。检查distances
的形状。以上是关于如何计算 Sklearn 中点到质心的平均距离的平均值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
环形环绕地图上一组点之间的“质心”,可最大限度地减少到所有点的平均距离