编辑:我已经尝试了几次,在不同的步骤中对数据进行了洗牌。看来只要我重新启动python内核并重置数据帧索引,性能就不错了。如果我不做这些事情,我仍然不确定为什么模型会坦克
我正在尝试多标签分类问题。当我对数据运行 RandomForest 而不进行改组时,结果非常好,在某些情况下令人怀疑。
例子:
feat1 feat2 ... label
chrom1 10 ... [a, b]
chrom1 200 ... [b]
... ... ... ...
... ... ... ...
chrom20 30 ... [c]
值得注意的是,其中两个标签 b 和 c 是完全排序的。所有标记为 b 的样本都在数据集的开头,所有标记为 c 的样本都在末尾。b 和 c 是互斥的。此外,数据按两个特征(示例中的feat1 和feat2)排序。
在不打乱数据的情况下,标签 b 和 c 的预测几乎完美,其他标签也相当不错。
在对数据进行洗牌后,所有标签的性能都会显着下降。
我假设由于数据的顺序,信息会以某种方式泄漏。但是,我无法弄清楚如何。数据在拆分时是分层的,因此在训练集和测试集中标签的比率接近相等。
任何人之前遇到过类似的问题或看到我哪里出错了?
注意:这不是时间序列数据。此外,我在标记后和拆分为训练/测试、规范化、插补等之前对数据进行洗牌。
注2:不知何故,在杀死jupyter笔记本内核并再次通过管道运行之后,这次在标记数据之前进行了洗牌,现在性能又好了。我真的不明白这是怎么回事。随机森林不是从头开始吗?