问题标签 [imbalanced-data]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 课堂学习不平衡
我正在处理一个不平衡的类分类问题,其中我的不平衡比率为 0:1 = 717.26:1。我尝试了许多模型,我发现 GBM 最适合我的情况。
比我看到一篇研究论文和一篇处理不平衡阶级问题的文章。
使用 R 和插入符号处理类不平衡 - 使用 AUC 时的注意事项
在上述论文和文章中,我发现他们说的是相反的事情。
它说:“我们发现,除了 ROC 曲线下的面积外,所有性能指标都受到不平衡分布的影响;在许多情况下,情况非常显着。Alpha 和 kappa 测量值受到任一方向偏斜的影响;而 F1 分数受仅向一个方向倾斜。虽然 ROC 不受倾斜影响,但精确召回曲线表明 ROC 可能会掩盖较差的性能”,这意味着 AUC PR 也会受到影响,如图所示
而Dan Martin(作者)在文章中说,不应该只使用AUC ROC来选择最佳分类器。在处理不平衡的课堂学习时,我们也应该考虑 AUC PR。
现在我的问题是,如果我认为研究论文的结果是真实的,那么它将与上述文章结果相矛盾。
那么有人可以告诉哪个应该被认为是正确的吗?
很抱歉这个冗长的问题。
提前致谢!
python - Imbalaced-learn 即使已安装也无法正常工作
这很奇怪,我使用的是 3.7 python,我的库依赖于 Imbalanced-learn 也很满意。但是,当我在 Jupyter 中导入库时,会产生错误。有人可以请教吗?
版本:
machine-learning - F1 - 数据不平衡得分
我正在从事二进制分类任务。我的评估数据不平衡,由 appr 组成。20% 来自第 1 类,80% 来自第 2 类。即使我在每个类类型上都有很好的分类准确度,如在 class1 上为 0.602,在 class2 上为 0.792,如果我计算 class1 上的 f1 分数,我得到 0.46,因为误报计数很大。如果我在 class2 上计算它,我得到 f1-score 为 0.84。
我的问题是,评估不平衡数据分类任务的最佳实践是什么?我可以得到这些 f1 分数的平均值还是应该选择其中一个?在不平衡数据上评估分类任务的最佳评估指标是什么?
顺便说一句,这些是我的 TP、TN、FN、FP 计数;
总价:115
田纳西州:716
前锋:76
FP:188
python - 是否使用缩放的测试数据进行预测?
我有一个不平衡的分类问题。首先,我想缩放数据,然后通过 SMOTE 重新采样。为了防止数据泄漏,我使用了管道。我的代码是:
问题是正类的结果不太好,我认为这与使用未缩放的X_test
预测版本有关(我知道不对测试数据使用重采样,但我不确定缩放))。我的代码是正确的还是有任何问题导致这个不有趣的结果?
python - 在对多数类进行欠采样后,让训练集 < 测试集是否可行?
我有一个包含 1500 条记录的数据集,其中有两个不平衡的类。0 类是 1300 条记录,而 1 类是 200 条记录,因此比率为 6.5:1。
我用这个数据集构建了一个随机森林进行分类。我从过去的经验中知道,如果我使用整个数据集,召回率非常低,这可能是由于类别不平衡造成的。
所以我决定对0类进行欠采样。我的步骤如下:
将数据集随机分成比例为 7:3 的训练和测试集(因此 1050 用于训练,450 用于测试。)
现在,训练集有约 900 个 0 类数据 ~100 类 1 类数据。我对 0 类约 900 个数据进行聚类,并将其(按比例)欠采样到约 100 条记录。
所以现在训练集 ~100 Class 0 + ~100 Class 1 = ~200 条记录,而测试集是 70 Class 0 + 380 Class 1 = 450 条记录。
我的问题来了:
1) 我的步骤有效吗?我首先拆分训练/测试,然后对训练集的多数类进行欠采样。
2)现在我的训练集(~200)<测试集(450)。是否有意义?
3) 性能仍然不是很好。精度为 0.34,召回率为 0.72,f1 得分为 0.46。有什么方法可以改善吗?我应该使用简历吗?
非常感谢您的帮助!
machine-learning - 具有不平衡数据的文本分类
我试图将 10000 个文本样本分类为 20 个类。其中 4 个类每个只有 1 个样本,我尝试 SMOTE 来解决这种不平衡,但我无法为只有一个记录的类生成新样本,尽管我可以为超过 1 个样本的类生成样本。有什么建议么?
machine-learning - 处理不平衡的分类数据?
我正在构建一个预测模型,在此模型上我预测客户是否会再次订阅。我已经有了数据集,问题是它不平衡(NO 多于 YES)。我相信我的模型是有偏差的,但是当我检查训练集和测试集的准确率时,准确率非常接近(训练集为 0.8879,测试集为 0.8868)。我感到困惑的原因是,如果我的模型有偏差,为什么我的训练和测试集的准确性接近?还是我的模型没有偏见?
python - 如何使用 sklearn 对不平衡数据集的逻辑回归进行评估?
我使用 python scikit-learn 进行逻辑回归。我有一个不平衡的数据集,其中 2/3 的数据点标签为 y=0,1/3 的数据点标签为 y=1。
我进行分层拆分:
我的超参数搜索网格是:
然后我进行网格搜索,包括class_weight='balanced'
:
我的第一个问题是关于score
. 这是在 GridSearchCV 中选择什么是“最佳”分类器以找到最佳超参数的方法。由于我使用 执行了 LogisticRegression class_weight='balanced'
,我应该使用经典score='accuracy'
,还是仍然需要使用score='balanced_accuracy'
?为什么?
所以我继续寻找最好的分类器:
现在我想计算评估指标,例如准确性(再次)和 f1 分数。
第二个问题:我这里需要使用“正常”精度/f1 还是平衡/加权精度/f1?
“普通的”:
或平衡/加权:
如果我应该使用平衡/加权版本,我的第三个问题是关于参数的sample_weight=y_weights
。我应该如何设置权重?要获得平衡(尽管正如我所说,我不确定我是否已经达到平衡或未设置class_weight='balanced'
),我应该用 1/3 缩放标签 y=0 和用 2/3 缩放 y=1,对吗?像这样:
或者我应该在这里输入实际分布和比例标签 y=0 和 2/3,标签 y=1 和 1/3?像这样:
我的最后一个问题是:对于评估,我比较准确度的基线准确度是多少?
0.33(1 级)、0.5(平衡后)还是 0.66(0 级)?
编辑:对于基线,我的意思是一个天真地将所有数据分类为“1”的模型或一个将所有数据分类为“0”的模型。一个问题是我不知道我是否可以自由选择。例如,我得到的准确度或平衡准确度为 0.66。如果我与基线“总是 1”(acc 0.33 (?))进行比较,我的模型会更好。如果我与基线“总是 0”(acc 0.66 (?))进行比较,我的模型会更糟。
非常感谢大家对我的帮助。
machine-learning - 过采样:SMOTE 参数“比率”
jupyter notebook 让我出错:
init () 得到了一个意外的关键字参数“比率”
我的代码:
smote = SMOTE(ratio = 'minority', random_state=10)
也可以试试:
smote = SMOTE(ratio = 0.5, random_state=10)
但它给了我同样的错误信息。
如何解决这个问题?谢谢。
python - 使用整个数据集测试在欠采样数据上训练的分类器时,精度显着下降
我正在做 Kaggle 信用卡欺诈检测。
Class = 1
(欺诈性交易)和Class = 0
(非欺诈性)之间存在显着的不平衡。作为补偿,我对数据进行了欠采样,使得欺诈交易和非欺诈交易之间的比率为 1:1(各 492 次)。当我在欠采样/平衡数据上训练我的逻辑回归分类器时,它表现良好。然而,当我使用相同的分类器并在整个数据集上对其进行测试时,召回率仍然很好,但准确率显着下降。
我知道对于这类问题而言,具有高召回率更为重要,但我仍然想了解为什么精度坦克,以及这是否可以。
代码:
输出: