问题标签 [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.

0 投票
0 回答
160 浏览

image-processing - 与其他类相比,如何将图像数量较少的类的数据加倍?

我的训练数据不平衡。所以我决定重新采样我的数据集。我想在重新采样时做些细微的改变。我想对少数类应用水平翻转和高斯滤波器,以使所有类都相等。

为此,我想使用纯图像处理技术来增加少数样本的数量。为此,我在图像较少的类中运行此代码

但是,我已经看到一些教程使用 Keras 库来进行图像增强。就像下面的博客文章:

https://www.pyimagesearch.com/2020/04/27/fine-tuning-resnet-with-keras-tensorflow-and-deep-learning/

在我的情况下,我可以使用第一种技术(纯图像处理=手动复制粘贴数据稍作更改)吗?还是应该使用 Keras 或 PyTorch 中可用的库?

0 投票
0 回答
310 浏览

pytorch - BCEWithLogitsLoss 中的权重

我在多标签、多类分类任务中遇到问题。我有一个大小为 33000 的数据集,每个样本包含 104 个类。我将数据集拆分为 16500 个样本,其标签包括 [1, 0, 1, 0, 0, ...], [0, 1, 1, 0, 1, ...], [1, 0, 0, 0](每个label 中至少有一个元素 1)和 16500 个标签,例如 [0, 0, 0, ...], [0, 0, 0, ...](所有标签中的所有元素都是 0)。在计算每个类的 pos_count 时,类 0 的数字 pos_count_0 是我的数据集中每个标签的第一个位置出现的 1 的数量。对于第 1 类,pos_count_1 为第二个位置的 1 的个数,依此类推。之后,第 0 类的 pos_weight 为 (33000-pos_count_0)/pos_count_0,第 1 类的 pos_weight 为 (33000-pos_count_1)/pos_count_1 ?我有点困惑如何计算一个类的 neg_count 和 pos_count 。

0 投票
1 回答
220 浏览

python - 如何修复对话(文本)时间序列数据中的类别不平衡?

我有一个如下所示的数据集:

“数据”列是我的 X,标签是 y。df 有 34890 行。每行包含 2 个浮点数。数据代表一堆连续的文本,每个观察都是一个句子的表示。有5个班。

我正在用这个 LSTM 代码训练它:

模型进行训练,但每个 epoch 的 val 准确率固定为 53%。我假设这是因为我的类不平衡问题(1 个类占用了约 53% 的数据,另外 4 个类在剩余的 47% 中稍微均匀分布)。

如何平衡我的数据?我知道非时间序列数据的典型过度/不足采样技术,但我不能过度/不足采样,因为这会混淆数据的顺序时间序列性质。有什么建议吗?

编辑

我正在尝试使用 Keras 中的 class_weight 参数来解决这个问题。我将此字典传递给 class_weight 参数:

我基于此建议:

https://stats.stackexchange.com/questions/342170/how-to-train-an-lstm-when-the-sequence-has-imbalanced-classes

然而,acc/loss 现在真的很糟糕。我使用密集网络获得了约 30% 的准确率,因此我预计 LSTM 会有所改进。请参阅下面的 acc/loss 曲线:

在此处输入图像描述

0 投票
0 回答
225 浏览

tensorflow - TypeError:“int”对象不可下标(imblearn 生成器)

我正在处理不平衡的基于文本的数据集。在训练模型时,我使用了 tensorflow 平衡批处理生成器来创建平衡批处理,如下所示:

但出现以下错误:

0 投票
2 回答
1069 浏览

python - 使用班级权重后 F1 分数降低

我正在研究一个多类分类用例,数据高度不平衡。通过高度不平衡的数据,我的意思是频率最高的类别和频率最低的类别之间存在巨大差异。因此,如果我继续使用,SMOTE oversampling那么数据量会大大增加(数据量从 280k 行增加到超过 250 亿行,因为不平衡性太高了)并且实际上不可能将 ML 模型拟合到如此庞大的数据集。同样,我不能使用欠采样,因为这会导致信息丢失。

所以我想compute_class_weight 在创建 ML 模型时使用 from sklearn。

代码:

我对测试数据进行了预测,并记录了 , 等指标的结果accuracyf1_scorerecall尝试复制相同但不通过class_weight,如下所示:

svc_model = LinearSVC()

但是我得到的结果很奇怪。通过后class_weight的指标比没有的指标差一些class_weight

我希望完全相反,因为我正在使用class_weight它来使模型更好,从而使指标更好。

两个模型的指标之间的差异很小,但与没有f1_score模型class_weight相比,模型的差异较小class_weight

我还尝试了以下代码段:

svc_model = LinearSVC(class_weight='balanced')

f1_score与没有的模型相比,它仍然更少class_weight

以下是我获得的指标:

我认为使用class_weight会改善指标,但会恶化指标。为什么会发生这种情况,我该怎么办?如果我不处理不平衡数据可以吗?

0 投票
1 回答
72 浏览

python-3.x - 高度不平衡的分类步骤的步骤。我应该对数据进行上采样和欠采样还是对不平衡类进行上采样

我有一个高度不平衡的二进制(是/否)分类数据集。该数据集目前有大约 0.008% 的“是”。

我需要使用 SMOTE 平衡数据集。

我遇到了两种处理不平衡的方法。在变量上运行 MinMaxScaler 后的以下步骤

这导致数据集的大小从 240 万行减少到 732000 行,并且不平衡从 0.008% 提高到 33.33%

虽然这种方法

这将行数从 240 万行增加到 480 万行,现在不平衡为 50%。

在这些步骤之后,我需要将数据拆分为训练测试数据集......

这里的正确方法是什么?

在选择这些方法之前,我需要考虑哪些因素?

我应该对非采样数据运行 X_test, y_test。这意味着,我拆分数据并仅对训练数据进行上采样/欠采样。

谢谢你。

京东

0 投票
1 回答
369 浏览

machine-learning - 重新规范不平衡数据的类权重

我有一组不平衡的数据用于在 CNN 神经网络上进行训练。我想计算与每个标签的频率成正比的类权重,以便在计算反向传播项时增强频率较低的标签,以便它们得到很好的表示。

到目前为止我做了什么:我有一个列表 A,其中包含每个标签的频率。

所以我做了以下 -

这产生了一个权重列表,这些权重减少了与标签频率成比例的学习,以减少一个标签对其他标签的过度学习。

现在我有两个关于此事的问题 -

  1. 我的逻辑有问题吗,我错过了什么吗?
  2. 到目前为止,这个计算产生了更差的性能,我可能想平滑权重,这样它们仍然会有一些不平衡。我的意思是标签之间的比率将保持不变,但它们都会趋向于接近 1。什么是数学运算会给我这样的结果?

谢谢 !!!

0 投票
1 回答
409 浏览

python - 所有未见数据的概率值均小于 0.5

我有 15 个带有二进制响应变量的特征,我对预测 0 或 1 个类别标签的概率感兴趣。当我在数据框中使用 500 棵树、CV、平衡类权重和平衡样本训练和测试 RF 模型时,我获得了很好的准确度和很好的 Brier 分数。正如您在图像中看到的,测试数据上第 1 类的预测概率值介于 0 到 1 之间。

这是测试数据的预测概率直方图:

在此处输入图像描述

大多数值在 0 - 0.2 和 0.9 到 1 之间,这是非常准确的。但是,当我尝试预测未见数据的概率值,或者假设所有值为 0 或 1 的数据点未知时,预测的概率值仅在第 1 类中介于 0 到 0.5 之间。为什么会这样?值不应该是从 0.5 到 1 吗?

这是未见数据的预测概率直方图:

在此处输入图像描述

我在 python 中使用 sklearn RandomforestClassifier。代码如下:

0 投票
1 回答
555 浏览

python - SMOTE 为所有分类数据集提供数组大小/ValueError

我正在使用 SMOTE-NC 对分类数据进行过采样。我只有 1 个功能和 10500 个样本。

运行以下代码时,我收到错误:

代码:

如果我理解正确,形状X_new应该是 (n_samples, n_features),即 10500 X 1。我不知道为什么在 ValueError 中将其视为 shape=(10500,0)

有人可以在这里帮助我吗?

0 投票
1 回答
42 浏览

python - 多类分类不平衡

我有 5 个不同的标签,频率百分比如下:

我如何评估这是否会严重影响我的预测?我有大约 1800 条记录,每条记录有 28 个特征。

我考虑过使用混淆矩阵的交叉验证,但我对此不太确定