RandomForest 或 SVM 中不平衡类问题的自定义指标

数据挖掘 Python scikit-学习 随机森林 支持向量机
2021-09-23 16:38:38

我的数据集有高度不平衡的类——前景有 30 个类,有几十个样本,背景集超过 10 万个样本。将前景类分类为背景是可以的,而将背景分类为前景应该受到惩罚。

我正在使用 Scikit-learn 的 RandomForests,并且我也在试验 SVM 和 OneVsRest 分类器。我想指定用于fit()模型方法的评分指标,因此它将与我的目标相对应(我想像进化算法的适应度函数)。但是,API不允许这样的事情。

到目前为止,我尝试过:

  • 使用class_weight模型参数。如果我将其设置为代表真实世界,那么分类器将学习将所有内容分类为准确度 > 99 % 的背景。如果我设置class_weight = 'balanced',那么它似乎更好,但它的误报率很高。
  • 使用打分方法GridSearchCV它输出我指定的值(即使是 F1-score 比简单的准确度更有意义),但它仅用于参数选择,最终模型是通过fit()方法学习的,这再次忽略了我的评分。

有没有办法为该fit()方法提供我自己的自定义评分功能?

1个回答

我想我明白你想要做什么。首先,让我尝试弄清两个可能被混淆的概念(如果不是为您,那么为其他用户)。

当随机森林存在时fit,它通常对分类结果变量使用熵或基尼杂质,对数值结果变量使用均方误差或平均绝对误差——这是模型构建步骤但是,在评估拟合模型时,评分方法用于了解模型的性能——这是我们了解模型可能有多准确的步骤

我已经看到 sklearn 允许指定自定义评分方法,但据我所知,我不相信您可以在RandomForestClassifierRandomForestRegressor方法/API中指定自己的criterion参数。