如何在 Scikit 中自定义 GridSearchCV 的指标 学习调整特定类?

Posted

技术标签:

【中文标题】如何在 Scikit 中自定义 GridSearchCV 的指标 学习调整特定类?【英文标题】:How to Customize Metric for GridSearchCV in Scikit Learn to tune for specific class? 【发布时间】:2020-02-22 19:30:51 【问题描述】:

我在 ML 中有一个用例,其中我有 2 个类,0 和 1 用于给定文本。

Class-0: 可以承受一些错误分类 Class-1: 非常重要,不能承受任何错误分类

这两个类别的样本存在巨大的不平衡, class-0 大约 30000,class-1 只有 1000

在进行训练-测试拆分时,我根据标签对拆分进行分层,这样,每个标签类保持 70% 训练和 30% 测试的比例。

我想调整参数,以改进 class-1 的 PrecisionRecall。我尝试使用“f1_macro”、“precision”、“recall”作为单独的指标,并将所有指标组合起来使用 GridSearchCV 进行调整,但由于大多数样本为 Class-0,因此它的帮助较小。

我正在探索减少 0 类数据的更安全的方法,不过,我们只能减少很小的程度,无论如何,即使没有调整或使用任何参数,0 类的 f1 分数始终高于 98%。

所以我关心的只是调整class-1

您能否建议,也许是一个自定义的可调用指标,使其仅关注 Class-1 的 Precision、Recall 或 F1-Score?

我正在使用 scikit-learn 最新的稳定版本。

这里有类似的问题,作者正在尝试在Keras 中使用Neural Networks (MLP) 调整Class-1 的F1 分数 有人建议尝试自定义指标,只是没有提到如何。 可以在这里回答 Scikit-Learn 的人,也可以回答下面的 Keras 链接。 Hyperparameter tuning in Keras (MLP) via RandomizedSearchCV

【问题讨论】:

【参考方案1】:

使用class_weight='balanced' 会有所帮助。

我在 Scikit-Learn 的官方文档页面中引用了这些文章。

了解参数class_weights 的工作原理:https://scikit-learn.org/stable/modules/svm.html#unbalanced-problems https://***.com/a/30982811/3149277

了解class_weights使用哪些参数:https://scikit-learn.org/stable/modules/svm.html#tips-on-practical-useHow does the class_weight parameter in scikit-learn work?

尽管由于时间限制,我没有费心定义自定义函数,因为这似乎接近我的预期。

【讨论】:

以上是关于如何在 Scikit 中自定义 GridSearchCV 的指标 学习调整特定类?的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn 中自定义内核 SVM 的交叉验证

如何在 BlackBerry 中自定义 ListField?

如何在Android中自定义动画

如何在 Qt 中自定义列表视图

如何在 JavaScript 中自定义警报?

如何在 Flutter 中自定义 Slider 小部件?