我正在处理一个不平衡的数据集,并且像往常一样很容易获得高准确率,但不太频繁的类的召回率非常低。我想改进频率较低的课程的假阴性。
专注于 sklearn 随机森林的具体性,一种可能的策略是设置一个 class_weight 来惩罚频率较低的类上的错误,并使用 sklearn 评分函数作为 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,因为每次出错时付出的成本都非常高。但事实并非如此,拟合的分类器继续产生大量的假阴性。为什么会这样?