标签: imbalanced-data

使用 mlr3 处理类别不平衡问题

最近有人建议我将机器学习框架更改为 mlr3。但我发现过渡比我一开始想象的要困难一些。在我当前的项目中,我正在处理高度不平衡的数据,我希望在训练模型之前对其进行平衡。我发现这个教程解释了如何通过管道和图形学习器处理不平衡:

https://mlr3gallery.mlr-org.com/posts/2020-03-30-imbalanced-data/

恐怕这种方法也会通过新数据预测来执行类平衡。我为什么要这样做并减少我的测试样本?

所以出现的两个问题是:

  1. 我在测试数据中不平衡类别是否正确?
  2. 如果是这样,mlr3中有没有办法做到这一点?

当然,我可以手动对训练数据进行子集化并自己处理不平衡问题,但这不再有趣了!:)

无论如何,感谢您的回答,
干杯!

pipeline r mlr3 imbalanced-data

3
推荐指数
1
解决办法
421
查看次数

在keras中计算微型F-1分数

我有一个包含 15 个不平衡类别的数据集,并尝试使用 keras 进行多标签分类。

我正在尝试使用微型 F-1 分数作为衡量标准。

我的型号:

# Create a VGG instance
model_vgg = tf.keras.applications.VGG19(weights = 'imagenet', pooling = 'max', include_top = False, 
input_shape = (512, 512, 3))

# Freeze the layers which you don't want to train. 
for layer in model_vgg.layers[:-5]:
layer.trainable = False

# Adding custom Layers 
x = model_vgg.output
x = Flatten()(x)
x = Dense(1024, activation = "relu")(x)
x = Dropout(0.5)(x)
x = Dense(1024, activation = "relu")(x)
predictions = Dense(15, activation = "sigmoid")(x)

# creating …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow loss-function imbalanced-data

3
推荐指数
1
解决办法
2681
查看次数

交叉验证中的平衡类

我想用 H2O 构建一个 GBM 模型。我的数据集不平衡,所以我使用 balance_classes 参数。对于网格搜索(参数调整),我想使用 5 折交叉验证。我想知道在这种情况下 H2O 如何处理类平衡。只会重新平衡训练折叠吗?我想确保测试折叠没有重新平衡。

machine-learning cross-validation gbm h2o imbalanced-data

2
推荐指数
1
解决办法
1880
查看次数

用于不平衡二元分类的过采样数据的过程

我有大约 30% 和 70% 的 0 类(少数类)和 1 类(多数类)。由于我没有很多数据,我计划对少数类进行过采样以平衡这些类,使其成为 50-50 的分割。我想知道是否应该在将数据拆分为训练集和测试集之前或之后进行过采样。我通常在在线示例中拆分之前看到它完成,如下所示:

df_class0 = train[train.predict_var == 0]
df_class1 = train[train.predict_var == 1]
df_class1_over = df_class1.sample(len(df_class0), replace=True)
df_over = pd.concat([df_class0, df_class1_over], axis=0)
Run Code Online (Sandbox Code Playgroud)

然而,这是否意味着测试数据可能有来自训练集的重复样本(因为我们对训练集进行了过采样)?这意味着测试性能不一定基于新的、看不见的数据。我这样做很好,但我想知道什么是好的做法。谢谢!

classification machine-learning scikit-learn train-test-split imbalanced-data

2
推荐指数
1
解决办法
3644
查看次数

不平衡学习:导入错误:无法导入名称“MultiOutputMixin”

我已经重新安装了最新的 scikit-learn 和不平衡学习。我还检查了所有其他库,以确保它们与不平衡学习兼容。

我只想运行一个简单的RandomOverSample(),但我收到以下导入错误消息:

import imblearn
from imblearn.over_sampling import RandomOverSampler

ros = RandomOverSampler()
X_ros, y_ros = ros.fit_sample(x, y)
Run Code Online (Sandbox Code Playgroud)

错误信息:

    ---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-122-0bf7409a8688> in <module>
----> 1 import imblearn
      2 from imblearn.over_sampling import RandomOverSampler
      3 
      4 ros = RandomOverSampler()
      5 X_ros, y_ros = ros.fit_sample(x, y)

~/.local/lib/python3.5/site-packages/imblearn/__init__.py in <module>
     32     Module which allowing to create pipeline with scikit-learn estimators.
     33 """
---> 34 from . import combine
     35 from . import ensemble
     36 from . …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn imblearn imbalanced-data

2
推荐指数
1
解决办法
8897
查看次数

F1 - 数据不平衡的得分

我正在研究二元分类任务。我的评估数据不平衡,包含大约。20%来自class1,80%来自class2。即使我对每个类类型都有很好的分类准确度,如 class1 为 0.602,class2 为 0.792,如果我计算 class1 上的 f1 分数,我会得到 0.46,因为假阳性计数很大。如果我在 class2 上计算,我得到的 f1 分数为 0.84。

我的问题是,评估不平衡数据分类任务的最佳实践是什么?我可以获得这些 f1 分数的平均值还是应该选择其中一个?在不平衡数据上评估分类任务的最佳评估指标是什么?

顺便说一句,这些是我的 TP、TN、FN、FP 计数;

目标点:115

田纳西州:716

国民警卫队:76

FP:188

precision statistics classification machine-learning imbalanced-data

2
推荐指数
1
解决办法
5754
查看次数

过采样:SMOTE 参数“比率”

jupyter笔记本出现错误:

init () 收到意外的关键字参数“ratio”

我的代码:

smote = SMOTE(ratio = 'minority', random_state=10)

也尝试使用: smote = SMOTE(ratio = 0.5, random_state=10) 但它给了我同样的错误消息。

怎么解决这个问题呢?谢谢。

machine-learning cross-validation oversampling imblearn imbalanced-data

2
推荐指数
1
解决办法
5293
查看次数

训练/测试分割之前或之后的欠采样

我有一个信用卡数据集,其中 98% 的交易是非欺诈交易,2% 是欺诈交易。

我一直在尝试在训练和测试拆分之前对大多数类别进行欠采样,并在测试集上获得非常好的召回率和精度。

当我仅在训练集上进行欠采样并在独立集上进行测试时,我得到的精度非常差,但召回率相同!

我的问题是:

我是否应该在分成 train 和 test 之前进行欠采样,这会扰乱数据集的分布并且不能代表现实世界吗?

或者上述逻辑仅在过采样时适用?

谢谢

classification machine-learning resampling imbalanced-data

2
推荐指数
1
解决办法
1万
查看次数

Pytorch - 如何使用 weightedrandomsampler 进行欠采样

我有一个不平衡的数据集,想对代表性过高的类进行不足采样。我该怎么做。我想使用 weightedrandomsampler 但我也愿意接受其他建议。

到目前为止,我假设我的代码必须具有如下结构。但我不知道如何精确地做到这一点。

trainset = datasets.ImageFolder(path_train,transform=transform) ... sampler = data.WeightedRandomSampler(weights=..., num_samples=..., replacement=...) ... trainloader = data.DataLoader(trainset, batchsize = batchsize, sampler=sampler)

我希望有人能帮帮忙。非常感谢

neural-network conv-neural-network pytorch imbalanced-data cnn

1
推荐指数
1
解决办法
2726
查看次数