如何计算Sklearn中点到质心的平均距离的平均值?

时间:2019-07-11 22:00:17

标签: python scikit-learn cluster-analysis k-means unsupervised-learning

我被要求计算每个点到其质心的平均距离。已经提供了数据集和聚类数,这似乎是一个非常简单的问题(考虑到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和机器学习算法还是很陌生。

1 个答案:

答案 0 :(得分:0)

K均值使用平方 Eculidean距离。

人们经常错误地认为这意味着最小化欧几里得距离-并非如此。

无论如何,请尝试插入distances = numpy.sqrt(distances),之后您的均值可能会低于3。