我正在处理一个不平衡的数据集,和往常一样,它很容易获得一个高精度,但较少频繁类的召回率非常低。我想对较少上课次数的假阴性进行改进。
针对学习随机森林的具体性,一种可能的策略是在较少频繁的类中设置一个惩罚错误的class_weight,并使用一个学习评分函数作为ROC。
grid = GridSearchCV(pipe, cv=number_of_cross_validations, n_jobs=1, param_grid=param_grid , scoring = scorer)
classifier = grid.fit(X_train, y_train)
其中pipe
是包含RandomForestClassifier的管道,param_grid
包含要尝试的不同的class_weight
。
我的问题可能与这个问题有关,事实上,仅仅class_weight
似乎还不足以显著降低假阴性。作为一个极端的例子,如果我设置:
class_weight = {0: 0.0000001, 1: 0.9999999}
(其中1是实例较少的类,其比例为1:50),我期望最终的分类器几乎总是预测1,因为每次发生错误时,代价都很高。但事实并非如此,匹配的分类器继续产生大量的假阴性。为什么会这样呢?
发布于 2018-10-09 07:08:52
这很可能是因为sklearn已经为您选择了您的多数类,而您只需要用"0“作为多数类来权衡您的类。
发布于 2018-11-08 14:53:07
如果您的类没有类重叠问题,您可能需要尝试一些重采样技术。您可以用较少的记录对类进行过度采样,或者查看诸如SMOTE、ROSE之类的包。
SMOTE很好的例子:https://www.kaggle.com/qianchao/smote-with-imbalance-data#
https://datascience.stackexchange.com/questions/26325
复制相似问题