machine-learning - 如何在 Scikit 中自定义 GridSearchCV 的指标 学习调整特定类?
问题描述
我在 ML 中有一个用例,其中我有 2 个类,0 和 1 用于给定文本。
Class-0:
可以承受一些错误分类Class-1:
非常重要,不能承受任何错误分类
两个类的样本都存在巨大的不平衡,0 类大约 30000 个,1 类只有 1000 个
在进行训练测试拆分时,我根据标签对拆分进行分层,这样,每个标签类保持 70% 训练和 30% 测试的比例。
我想以这样的方式调整参数,Precision
或者Recall
为 class-1 改进。我尝试使用“f1_macro”、“precision”、“recall”作为单独的指标,并将所有指标组合起来使用 GridSearchCV 进行调整,但由于大多数样本为 Class-0,因此它的帮助较小。
我正在探索减少 0 类数据的更安全的方法,尽管我们可以减少的程度很小,无论如何,即使没有调整或使用任何参数,0 类的 f1 分数总是高于 98%。
所以我关心的只是调优class-1
。
您能否建议,也许是一个定制的可调用指标,使其仅关注 Class-1 的精度、召回率或 F1 分数?
我正在使用 scikit-learn 最新的稳定版本。
类似的问题在这里,作者正在尝试使用它被建议尝试自定义指标来调整 Class-1 的 F1 分数Neural Networks (MLP)
,Keras
只是没有提到如何。
可以在这里回答 Scikit-Learn 的人,也可以回答下面的 Keras 链接。
通过 RandomizedSearchCV 在 Keras (MLP) 中调整超参数
解决方案
使用class_weight='balanced'
在这里有帮助。
我在 Scikit-Learn 的官方文档页面中引用了这些文章。
了解参数class_weights
的工作原理:
https ://scikit-learn.org/stable/modules/svm.html#unbalanced-problems
https://stackoverflow.com/a/30982811/3149277
了解使用哪些参数class_weights
:
https
://scikit-learn.org/stable/modules/svm.html#tips-on-practical-use scikit-learn 中的 class_weight 参数如何工作?
虽然由于时间限制,我没有费心定义自定义函数,因为这似乎接近我的预期。
推荐阅读
- mysql - 使用 ON DUPLICATE UPDATE 忽略插入时的值
- cygwin - Cygwin:使用 MinGW fopen/etc 遵循符号链接
- c# - UDP客户端不接收数据
- java - 如何检查 InputStream 是否已被使用?
- pine-script - Pinescript 不能在警报时设置变量文本?
- jquery - IF 语句仅选择 jQuery 中不为空的标题
- php - 有什么方法可以跟踪仅来自特定页面后要访问的网页?
- google-apps-script - getRange.getValue 从 Google 表格返回错误的日期
- c - 如何释放队列[C语言]中的双指针?
- python - Python Change theColor of Column in a Dataframe then merge the Frame