【发布时间】:2020-09-27 12:38:33
【问题描述】:
最近几天,我尝试使用 SciKit Learn 实现 KMeans 算法,但遇到了一个非常令人困惑的问题。我有一个数据集,它有两个类标签['ALL', 'AML'],其中ALL has 47 和AML has 25 样本和100 属性要从中进行训练,现在我想将此数据集用于KMeans 聚类,以便我可以将预测结果与原始类标签。在问我的问题之前,让我解释一下某些场景。在所有场景中,我都采用了所有 100 属性来拟合模型。
场景 1:
在第一次运行中,我从一个使用几乎默认参数创建的模型开始,即model = KMeans(n_clusters=2)。为了将预测的类标签(numeric)与原始标签(strings)进行比较,我将原始类标签设置为ALL = 1 和AML = 0。之后,在使用分类报告进行比较时,我得到了35% 的平均准确度。然后我再次运行算法并得到44% 的准确度。第三次尝试,我得到了33%等等。
但是,我查看了一下,发现random_state 参数需要有一个固定值才能在所有运行中获得相同的准确性。
场景 2:
在了解random_state之后,这次我从随机状态0开始,创建模型为model = KMeans(n_clusters=2, random_state=0),并保持原来的类标签,即ALL as 1和AML as 0。但是,这次输出在不同的运行中没有改变,我得到了53% 的准确度。但是,出于好奇,我交换了原来的类标签,即我设置了ALL as 0 和AML as 1,结果是47%。
场景 3:
这次我选择random_state 为1 即model = KMeans(n_cluster=2, random_state=1) 并在考虑ALL as 1 和AML as 0 的同时具有ALL as 0 和AML as 1 给出67% 的准确性
给了33% 准确度。
所以,我的问题是我在这里做错了什么?我执行错了吗?如果我是对的,那么为什么结果会根据 random_state 和类标签而发生如此大的变化?解决方案是什么?如何选择最佳的 random_state 和 class 标签对?
【问题讨论】:
标签: python scikit-learn cluster-analysis k-means