为啥打乱训练数据会影响我的随机森林分类器的准确性?
Posted
技术标签:
【中文标题】为啥打乱训练数据会影响我的随机森林分类器的准确性?【英文标题】:Why does shuffling training data affect my random forest classifier's accuracy?为什么打乱训练数据会影响我的随机森林分类器的准确性? 【发布时间】:2021-02-02 19:04:50 【问题描述】:同样的问题是asked。但由于 OP 没有发布代码,因此没有提供太多有用的信息。
我遇到了基本相同的问题,由于某种原因,改组数据使我的随机森林分类器的准确率大大提高(从 45% 到 94%!)。 (在我的情况下,删除重复项也会影响准确性,但这可能是另一天的讨论)根据我对 RF 算法工作原理的理解,这真的不应该发生。
我的数据是从多个文件合并而来的,每个文件都包含相同顺序的相同样本。对于每个样本,前 3 列是单独的输出,但目前我只关注第一个输出。
合并后的数据如下所示。输出(第一列)是有序且分布不均的:
洗牌后的数据如下所示:
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
TOTAL_OUTPUTS = 3
... (code for merging data and feature engineering)
to_compare =
"merged": merged,
"merged shuffled": merged.sample(frac=1.0),
"merged distinct": merged.drop_duplicates(),
"merged distinct shuffled": merged.drop_duplicates().sample(frac=1.0)
params = 'n_estimators': 300,
'max_depth': 15,
'criterion': 'entropy',
'max_features': 'sqrt'
for name, data_to_compare in to_compare.items():
features = data_to_compare.iloc[:, TOTAL_OUTPUTS:]
y = data_to_compare.iloc[:, 0]
rf = RandomForestClassifier(**params)
scores = cross_val_score(rf, features, y, cv=3)
print(name, scores.mean(), np.std(scores))
输出:
merged 0.44977727094363956 0.04442305341799508
merged shuffled 0.9431099584137672 0.0008679933736473513
merged distinct 0.44780773420479303 0.04365860091028133
merged distinct shuffled 0.8486519607843137 0.00042583049485598673
【问题讨论】:
【参考方案1】:您使用的未打乱数据表明,某些特征的值对于某些行往往是恒定的。这会导致森林变弱,因为构成它的所有单独的树都变弱了。
要看到这一点,请采取极端的推理;如果其中一个特征在整个数据集中是恒定的(或者如果您使用该数据集的一大块特征是恒定的),那么如果选择此特征,则不会带来任何熵变化。所以这个特性永远不会被选中,并且树不适合。
【讨论】:
感谢您的回复。但我不明白这如何回答我的问题:如果确实存在常量特征并使模型更弱,那么改组数据如何解决问题?另外,我想向您保证,数据中不存在常量特征。这些功能是从 700 多个功能中选择的,我已手动检查每个功能是否提供了相当高的信息增益。 仔细阅读:我的假设是某些特征在“某些行上”是恒定的,而不是一直。 CV 过程将在部分数据集上训练模型。在这些部分中,如果数据集未打乱,则有可能某些特征确实是恒定的。这会产生脆弱的树木和脆弱的森林。 你完全正确!我总是将 KFold 与 shuffle=True 一起使用,我完全忘记了更天真的 cv= (some int) 只是“拆分”数据,而不是随机选择样本进行训练/测试。非常感谢! 真正的原因是 RF 是一个贪心算法,因此特征的顺序很重要 好吧,在一定程度上同意,如果您将“presented”更改为“sampled”,因为顺序本身也不重要,所有功能都已尝试并选择最佳。以上是关于为啥打乱训练数据会影响我的随机森林分类器的准确性?的主要内容,如果未能解决你的问题,请参考以下文章