学习: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 我知道这是一种无监督算法,因此分类报告和混淆报告几乎没有价值,但它确实突出了引发这个问题的一个奇怪之处。此外,我还在输出中添加了聚类中心,它们也始终不一致。
你的结果对我来说似乎是一致的。每次 运行 K-Means,你都会得到相同的质心。唯一的变化是顺序,但这应该是任意的。没有特别的理由为特定集群分配第一个或第二个或第三个属性...
为了评估它,因为你的数据被标记了(鸢尾花数据集)。我建议检查每个集群中有多少项目对应于相同的标签集,或者同一集群中有多少具有相同标签的项目。例如:所有山鸢尾都在同一个簇中还是分布在多个簇中?
我猜你 precission/recall/F1 如果你愿意的话,但应该首先定义每个物种对应于哪个集群。我将从视觉评估开始,因为您只有三个标签。但基本上,您需要集群和物种之间的相关性(集群可以预测物种吗?)。
但总的来说,请记住 KMeans 会强制数据中的结构,即使没有(它最初是作为一种压缩算法,而不是一种烧灼算法)。因此,在许多情况下,您实际上并不评估它的性能,而只是评估它是否有用(例如对于特征生成)。
学习 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 我知道这是一种无监督算法,因此分类报告和混淆报告几乎没有价值,但它确实突出了引发这个问题的一个奇怪之处。此外,我还在输出中添加了聚类中心,它们也始终不一致。
你的结果对我来说似乎是一致的。每次 运行 K-Means,你都会得到相同的质心。唯一的变化是顺序,但这应该是任意的。没有特别的理由为特定集群分配第一个或第二个或第三个属性...
为了评估它,因为你的数据被标记了(鸢尾花数据集)。我建议检查每个集群中有多少项目对应于相同的标签集,或者同一集群中有多少具有相同标签的项目。例如:所有山鸢尾都在同一个簇中还是分布在多个簇中?
我猜你 precission/recall/F1 如果你愿意的话,但应该首先定义每个物种对应于哪个集群。我将从视觉评估开始,因为您只有三个标签。但基本上,您需要集群和物种之间的相关性(集群可以预测物种吗?)。
但总的来说,请记住 KMeans 会强制数据中的结构,即使没有(它最初是作为一种压缩算法,而不是一种烧灼算法)。因此,在许多情况下,您实际上并不评估它的性能,而只是评估它是否有用(例如对于特征生成)。