我被要求计算每个点到其质心的平均距离。数据集和聚类数量已经提供,这似乎是一个非常直接的问题(考虑到 k 均值聚类的作用),但我似乎找不到可行的解决方案。
数据集是一个包含 float 数字的 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 和机器学习算法还很陌生。
最佳答案
K-means 使用平方欧氏距离。
人们经常错误地认为这意味着最小化欧几里得距离 - 事实并非如此。
无论如何,尝试插入 distances = numpy.sqrt(distances)
,之后您的平均值可能会低于 3。
关于python - 如何计算Sklearn中点到质心的平均距离的平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56997813/