我被要求计算每个点到其质心的平均距离。已经提供了数据集和聚类数,这似乎是一个非常简单的问题(考虑到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和机器学习算法还是很陌生。
答案 0 :(得分:0)
K均值使用平方 Eculidean距离。
人们经常错误地认为这意味着最小化欧几里得距离-并非如此。
无论如何,请尝试插入distances = numpy.sqrt(distances)
,之后您的均值可能会低于3。