学习:KMeans聚类结果不一致

Learning: KMeans clustering inconsistent results

学习 ML,我是 KMeans 聚类的新手。对于我得到的始终不一致的结果,我如何知道我的模型是否准确?

我所说的始终不一致的意思是我得到了完全相同的一组 4 个结果,但它们是随机出现的。

设置(Jupyter 笔记本): 我正在使用来自 sklearn

的 iris 数据集
from sklearn.datasets import load_iris
data = load_iris()
X = data.data
y = data.target

# I run this "cell" repeatedly and get varying results
model = KMeans(n_clusters=3)
model.fit(X)
print(classification_report(y, model.labels_))
print(confusion_matrix(y, model.labels_))

结果始终不一致,但这是我得到的所有结果:

[[6.85       3.07368421 5.74210526 2.07105263]
 [5.006      3.428      1.462      0.246     ]
 [5.9016129  2.7483871  4.39354839 1.43387097]]

              precision    recall  f1-score   support

           0       0.00      0.00      0.00        50
           1       0.00      0.00      0.00        50
           2       0.23      0.28      0.25        50

    accuracy                           0.09       150
   macro avg       0.08      0.09      0.08       150
weighted avg       0.08      0.09      0.08       150

[[ 0 50  0]
 [ 2  0 48]
 [36  0 14]]

[[5.006      3.428      1.462      0.246     ]
 [5.9016129  2.7483871  4.39354839 1.43387097]
 [6.85       3.07368421 5.74210526 2.07105263]]

              precision    recall  f1-score   support

           0       1.00      1.00      1.00        50
           1       0.77      0.96      0.86        50
           2       0.95      0.72      0.82        50

    accuracy                           0.89       150
   macro avg       0.91      0.89      0.89       150
weighted avg       0.91      0.89      0.89       150

[[50  0  0]
 [ 0 48  2]
 [ 0 14 36]]


[[5.9016129  2.7483871  4.39354839 1.43387097]
 [5.006      3.428      1.462      0.246     ]
 [6.85       3.07368421 5.74210526 2.07105263]]

              precision    recall  f1-score   support

           0       0.00      0.00      0.00        50
           1       0.00      0.00      0.00        50
           2       0.95      0.72      0.82        50

    accuracy                           0.24       150
   macro avg       0.32      0.24      0.27       150
weighted avg       0.32      0.24      0.27       150

[[ 0 50  0]
 [48  0  2]
 [14  0 36]]

[[5.006      3.428      1.462      0.246     ]
 [6.85       3.07368421 5.74210526 2.07105263]
 [5.9016129  2.7483871  4.39354839 1.43387097]]

              precision    recall  f1-score   support

           0       1.00      1.00      1.00        50
           1       0.05      0.04      0.05        50
           2       0.23      0.28      0.25        50

    accuracy                           0.44       150
   macro avg       0.43      0.44      0.43       150
weighted avg       0.43      0.44      0.43       150

[[50  0  0]
 [ 0  2 48]
 [ 0 36 14]]

我的问题是如何知道我的模型是否准确?结果中是否存在我没​​有看到或不知道如何解释的模式?

如有任何帮助,我们将不胜感激。提前谢谢你:)

PS 我知道这是一种无监督算法,因此分类报告和混淆报告几乎没有价值,但它确实突出了引发这个问题的一个奇怪之处。此外,我还在输出中添加了聚类中心,它们也始终不一致。

  1. 你的结果对我来说似乎是一致的。每次 运行 K-Means,你都会得到相同的质心。唯一的变化是顺序,但这应该是任意的。没有特别的理由为特定集群分配第一个或第二个或第三个属性...

  2. 为了评估它,因为你的数据被标记了(鸢尾花数据集)。我建议检查每个集群中有多少项目对应于相同的标签集,或者同一集群中有多少具有相同标签的项目。例如:所有山鸢尾都在同一个簇中还是分布在多个簇中?

我猜你 precission/recall/F1 如果你愿意的话,但应该首先定义每个物种对应于哪个集群。我将从视觉评估开始,因为您只有三个标签。但基本上,您需要集群和物种之间的相关性(集群可以预测物种吗?)。

但总的来说,请记住 KMeans 会强制数据中的结构,即使没有(它最初是作为一种压缩算法,而不是一种烧灼算法)。因此,在许多情况下,您实际上并不评估它的性能,而只是评估它是否有用(例如对于特征生成)。