问题标签 [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.
image-processing - 与其他类相比,如何将图像数量较少的类的数据加倍?
我的训练数据不平衡。所以我决定重新采样我的数据集。我想在重新采样时做些细微的改变。我想对少数类应用水平翻转和高斯滤波器,以使所有类都相等。
为此,我想使用纯图像处理技术来增加少数样本的数量。为此,我在图像较少的类中运行此代码
但是,我已经看到一些教程使用 Keras 库来进行图像增强。就像下面的博客文章:
https://www.pyimagesearch.com/2020/04/27/fine-tuning-resnet-with-keras-tensorflow-and-deep-learning/
在我的情况下,我可以使用第一种技术(纯图像处理=手动复制粘贴数据稍作更改)吗?还是应该使用 Keras 或 PyTorch 中可用的库?
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 。
python - 如何修复对话(文本)时间序列数据中的类别不平衡?
我有一个如下所示的数据集:
“数据”列是我的 X,标签是 y。df 有 34890 行。每行包含 2 个浮点数。数据代表一堆连续的文本,每个观察都是一个句子的表示。有5个班。
我正在用这个 LSTM 代码训练它:
模型进行训练,但每个 epoch 的 val 准确率固定为 53%。我假设这是因为我的类不平衡问题(1 个类占用了约 53% 的数据,另外 4 个类在剩余的 47% 中稍微均匀分布)。
如何平衡我的数据?我知道非时间序列数据的典型过度/不足采样技术,但我不能过度/不足采样,因为这会混淆数据的顺序时间序列性质。有什么建议吗?
编辑
我正在尝试使用 Keras 中的 class_weight 参数来解决这个问题。我将此字典传递给 class_weight 参数:
我基于此建议:
然而,acc/loss 现在真的很糟糕。我使用密集网络获得了约 30% 的准确率,因此我预计 LSTM 会有所改进。请参阅下面的 acc/loss 曲线:
tensorflow - TypeError:“int”对象不可下标(imblearn 生成器)
我正在处理不平衡的基于文本的数据集。在训练模型时,我使用了 tensorflow 平衡批处理生成器来创建平衡批处理,如下所示:
但出现以下错误:
python - 使用班级权重后 F1 分数降低
我正在研究一个多类分类用例,数据高度不平衡。通过高度不平衡的数据,我的意思是频率最高的类别和频率最低的类别之间存在巨大差异。因此,如果我继续使用,SMOTE oversampling
那么数据量会大大增加(数据量从 280k 行增加到超过 250 亿行,因为不平衡性太高了)并且实际上不可能将 ML 模型拟合到如此庞大的数据集。同样,我不能使用欠采样,因为这会导致信息丢失。
所以我想compute_class_weight
在创建 ML 模型时使用 from sklearn。
代码:
我对测试数据进行了预测,并记录了 , 等指标的结果accuracy
。f1_score
我recall
尝试复制相同但不通过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
会改善指标,但会恶化指标。为什么会发生这种情况,我该怎么办?如果我不处理不平衡数据可以吗?
python-3.x - 高度不平衡的分类步骤的步骤。我应该对数据进行上采样和欠采样还是对不平衡类进行上采样
我有一个高度不平衡的二进制(是/否)分类数据集。该数据集目前有大约 0.008% 的“是”。
我需要使用 SMOTE 平衡数据集。
我遇到了两种处理不平衡的方法。在变量上运行 MinMaxScaler 后的以下步骤
这导致数据集的大小从 240 万行减少到 732000 行,并且不平衡从 0.008% 提高到 33.33%
虽然这种方法
这将行数从 240 万行增加到 480 万行,现在不平衡为 50%。
在这些步骤之后,我需要将数据拆分为训练测试数据集......
这里的正确方法是什么?
在选择这些方法之前,我需要考虑哪些因素?
我应该对非采样数据运行 X_test, y_test。这意味着,我拆分数据并仅对训练数据进行上采样/欠采样。
谢谢你。
京东
machine-learning - 重新规范不平衡数据的类权重
我有一组不平衡的数据用于在 CNN 神经网络上进行训练。我想计算与每个标签的频率成正比的类权重,以便在计算反向传播项时增强频率较低的标签,以便它们得到很好的表示。
到目前为止我做了什么:我有一个列表 A,其中包含每个标签的频率。
所以我做了以下 -
这产生了一个权重列表,这些权重减少了与标签频率成比例的学习,以减少一个标签对其他标签的过度学习。
现在我有两个关于此事的问题 -
- 我的逻辑有问题吗,我错过了什么吗?
- 到目前为止,这个计算产生了更差的性能,我可能想平滑权重,这样它们仍然会有一些不平衡。我的意思是标签之间的比率将保持不变,但它们都会趋向于接近 1。什么是数学运算会给我这样的结果?
谢谢 !!!
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。代码如下:
python - SMOTE 为所有分类数据集提供数组大小/ValueError
我正在使用 SMOTE-NC 对分类数据进行过采样。我只有 1 个功能和 10500 个样本。
运行以下代码时,我收到错误:
代码:
如果我理解正确,形状X_new
应该是 (n_samples, n_features),即 10500 X 1。我不知道为什么在 ValueError 中将其视为 shape=(10500,0)
有人可以在这里帮助我吗?
python - 多类分类不平衡
我有 5 个不同的标签,频率百分比如下:
我如何评估这是否会严重影响我的预测?我有大约 1800 条记录,每条记录有 28 个特征。
我考虑过使用混淆矩阵的交叉验证,但我对此不太确定