在(不是)极度不平衡的数据集中,什么是好的 F1 分数?

数据挖掘 机器学习 深度学习 数据挖掘 特征选择 公制
2022-02-25 02:10:50

我有一个大约 4.7K 的数据集,专注于二进制分类。班级比例为 33:67。这意味着标签 1 是 1558 (33%),标签 0 是我数据集的 3154 (67%)。

我的数据集不平衡吗?有人说还不错

我的目标只是增加 F1 分数class_weight=balanced在我的参数和scoring=f1CV 期间设置,如下所示。

svm=SVC(random_state=42)
svm_cv=GridSearchCV(svm,param_grid,cv=5,scoring='f1')
svm_cv.fit(X_train_std,y_train)

你能通过代码示例告诉我如何增加少数类的权重吗?balanced如果这与选择参数有什么不同

目前我的结果如下

在此处输入图像描述

我了解少数算法的 AUC 高于 80,但我相信 F1 分数对于像我这样的不平衡类问题更重要。

你能帮我吗?我尝试过采样少数类但没有太大改善。

增加功能不会让我达到 80% 的 F1 分数

2个回答

我会说你的数据不平衡。33:67 的比例不错,但尝试使用多数类的欠采样。作为另一种选择,您可以尝试诸如随机森林之类的差异算法。您也可以尝试提升。

我称不平衡数据集是指您的比率至少为 90|10。你的问题不是不平衡的。

F1 分数不是损失函数,而是一个指标。在您的 GridsearchCV 中,您正在最小化另一个损失函数,然后在折叠中选择最佳 F1 指标。理解这些概念很重要。

如果您想应用 Oversample/Undersample 技术,您可以使用以下库。(即使你不需要它)

https://pypi.org/project/imbalanced-learn/

如果你想提高你的分数,你可以尝试使用另一种算法,例如Gradient Boosting及其不同的实现 XGB、LightGBM、catboost ...