在给定的数据集中,我使用Python中的sklearn包训练了一个Random Forest分类器。我使用[{"name":"Default Category","slug":"default-category"},{"name":"Main Category","slug":"main-category"}]
参数来平衡不平衡类,即它们的比例约为70-30。
对于每个条目有10个特征且有2,200万个条目的训练数据集,我得到了这个分类报告:
class_weight=balanced
为了增强我的分类器(并且对于具有更少样本的1级实现更好的准确性),我自己平衡了训练数据集,使用pandas随机抽样函数 precision recall f1-score support
0 0.92 0.94 0.93 510310
1 0.74 0.64 0.69 124374
avg / total 0.88 0.88 0.88 634684
,我知道所有我知道的数据混乱之前抽样,我得到了以下分类报告:
pd.sample(frac=0.3)
此时我的训练数据集每个条目有10个特征,大约有1,600万个条目。
当我在测试数据集(由400万个条目组成的测试数据集)中尝试它时,问题就出现了。然后我的模型的性能显着下降,你可以看到:
precision recall f1-score support
0 0.89 0.85 0.87 153117
1 0.86 0.90 0.88 161326
avg / total 0.87 0.87 0.87 314443
此时我必须补充一点,我知道我的数据集的配置文件是一致的。我提到由于列车和测试数据之间的不一致可能会对我的模型的准确性产生负面影响。
此外,我尝试拟合由线性,高斯和树估计器组成的投票分类器,并且再次k-fold CV返回了惊人的结果(约90%精度和召回),但是当我在一个看不见的数据集或甚至一个随机实例中测试它时我的数据集得到的结果非常糟糕。
我对ML分类器有一些经验,但我从未遇到过这样的事情。
我摆弄的唯一参数是林中树木的数量,这就是为什么我无法相信我过度使用我的分类器,因为当我使用例如60和200棵树。
RF是否受到不平衡数据集的影响?
当我平衡课程时,我不应该得到至少不错的结果吗?
RF是否偏离训练数据集,即在训练数据集中给出50%-50%的分布它是否期望与测试数据集的类似分布,并且在70-30测试集的情况下它无法按预期执行?
对不起,很长的帖子。任何帮助将不胜感激。
代码
precision recall f1-score support
0 0.56 0.24 0.33 1221872
1 0.06 0.20 0.09 277578
avg / total 0.47 0.23 0.29 1499450