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

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

我被要求计算每个点到其质心的平均距离。数据集和聚类数量已经提供,这似乎是一个非常直接的问题(考虑到 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/

相关文章:

python - 使用 PCA (Python) 可视化聚类结果

python - Flask-Login 包因导入 Google App Engine 的测试台而被破坏

scikit-learn - 如何在MLPClassifier中设置初始权重?

r - 为什么在集群代码中没有NA简介?

machine-learning - Scikit Learn 中小正样本集的机器学习实验设计

python-2.7 - 如何计算骰子系数以测量python中图像分割的准确性

r - r中dist函数的区别

python - 使用 PyQT4 和 Phonon 交叉淡入淡出音频

python - 为什么我应该在 Scikit-Learn 管道中子类化 BaseEstimator?

python - 如何将 Python 的 GTK 与 gevent 集成?