如何决定随机_状态值和类标签的最佳搭配?

问题描述 投票:1回答:1

在过去的几天里,我一直在尝试着实现这个问题。KMeans 算法,使用 SciKit学习但我遇到了一个非常困惑的问题。我有一个数据集,有两个类标签 ['ALL', 'AML'] 哪儿 ALL has 47AML has 25 样品和 100 属性来训练,现在我想使用这个数据集来进行KMeans聚类,这样我就可以将预测结果与原始类标签进行比较。在提出我的问题之前,让我解释一下某些场景。在所有的场景中,我已经把所有的 100 属性来拟合模型。

场景1。

在第一次运行中,我从一个模型开始,这个模型是用几乎默认的参数创建的,即: model = KMeans(n_clusters=2). 为了比较预测的类标签(是指...)。数字)与原标签(是 字符串),我将原来的类标签设置为 ALL = 1AML = 0. 之后,在使用分类报告进行比较时,我得到了平均准确率为 35%. 然后我再次运行该算法,得到的精度为 44%. 第三次尝试,我得到了 33% 诸如此类。

然而,我看了一下,才知道。random_state 参数需要有一个固定的值,以便在所有运行中获得相同的精度。

场景2:

在知道了 random_state这次我从随机状态0开始,创建模型为 model = KMeans(n_clusters=2, random_state=0) 并保持原来的类标签,即 ALL as 1AML as 0. 然而,这次的输出在不同的运行中没有变化,我得到了一个准确度为 53%. 但是,出于好奇,我换了原来的类标签,即我设置了 ALL as 0AML as 1 从而导致 47%.

场景三。

这次我选择了 random_state 作为 1model = KMeans(n_cluster=2, random_state=1) 并具有 ALL as 0AML as 1 给了 67% 准确性,同时考虑 ALL as 1AML as 0给了 33% 准确性。

所以,我的问题是我在这里做错了什么?我是不是实现错了什么?如果我是对的,那么为什么结果会根据随机状态和类标签变化这么大?有什么解决办法,如何选择随机状态和类标签的最佳对子?

python scikit-learn cluster-analysis k-means
1个回答
0
投票

这里有几件事在起作用。

  • K-means类需要一个 init 关键字参数,决定如何放置初始簇中心点。默认值是 k-means++ 在你的情况下使用。聚集的初始位置取决于你的类顺序。保持随机状态不变,改变班级顺序会改变簇的初始位置,因此,改变结果。
  • 改变随机状态又会改变簇的初始位置,从而影响最终结果。
  • 你得到的结果可能不一致的原因是。
    • 你的数据有很多维度(请阅读 "维度的诅咒")
    • K-means在球状数据和同等大小的聚类上效果最好!如果你的数据是异向分布的,我不怀疑是好聚类。
    • 如果你的数据是各向分布的,我不会怀疑是好的聚类。请看一下这里的 Sklearn页面

要想解决这个问题,我会对数据进行降维,比如用UMAP或T-SNE,并降到两个维度。这将允许你绘制数据,并使其更容易检查出问题所在。

© www.soinside.com 2019 - 2024. All rights reserved.