我正在使用sklearn包来制作模型。
我尝试随机将一些参数设置为 a sklearn.ensemble.RandomForestClassifier,以便了解有关参数的想法以搜索未来的网格搜索。
好吧,这里是这次尝试的结果:
准确度:
培训:0.9209427371993345,测试:0.7035561005518087
显然,我知道这意味着模型过度拟合,因为它无法泛化到新数据。我知道交叉验证会更准确,因为不幸的是,测试集可能与训练集随机地相差太大,但这不是我在当前主题问题中所寻找的。此外,我尝试定位的两个类是不平衡的。Class 1比Class 0更多。
0 类:34% 的测试集/训练集,1 类:66% 的测试集/训练集。
所以因为它不平衡,我检查了精度和召回指标:
在测试集上:
+---------+-----------+--------+----------+----------+
| classes | precision | recall | F1-score | support |
+---------+-----------+--------+----------+----------+
| 0 | 0.60 | 0.38 | 0.47 | 3326 |
| 1 | 0.73 | 0.87 | 0.80 | 6460 |
+---------+-----------+--------+----------+----------+
在训练集上:
+---------+-----------+--------+----------+----------+
| classes | precision | recall | F1-score | support |
+---------+-----------+--------+----------+----------+
| 0 | 0.98 | 0.81 | 0.89 | 31265 |
| 1 | 0.91 | 0.99 | 0.95 | 59492 |
+---------+-----------+--------+----------+----------+
然后,在训练集上,我看到这两个类都得到了很好的预测。直觉上我认为:如果它在训练集上被很好地预测,这意味着特征足以分裂这两个类。所以,这只是参数设置的问题。但是直觉并不像好的经验那么有价值。因此,如果我的直觉是错误的,我要求这个社区更有经验的人,如果是,为什么会这样?
更新:
检查变量后,通过直方图显示训练集和测试集之间的分布相同。