最近有人建议我将机器学习框架更改为 mlr3。但我发现过渡比我一开始想象的要困难一些。在我当前的项目中,我正在处理高度不平衡的数据,我希望在训练模型之前对其进行平衡。我发现这个教程解释了如何通过管道和图形学习器处理不平衡:
https://mlr3gallery.mlr-org.com/posts/2020-03-30-imbalanced-data/
恐怕这种方法也会通过新数据预测来执行类平衡。我为什么要这样做并减少我的测试样本?
所以出现的两个问题是:
当然,我可以手动对训练数据进行子集化并自己处理不平衡问题,但这不再有趣了!:)
无论如何,感谢您的回答,
干杯!
我有一个包含 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) 我想用 H2O 构建一个 GBM 模型。我的数据集不平衡,所以我使用 balance_classes 参数。对于网格搜索(参数调整),我想使用 5 折交叉验证。我想知道在这种情况下 H2O 如何处理类平衡。只会重新平衡训练折叠吗?我想确保测试折叠没有重新平衡。
我有大约 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
我已经重新安装了最新的 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) 我正在研究二元分类任务。我的评估数据不平衡,包含大约。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
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
我有一个信用卡数据集,其中 98% 的交易是非欺诈交易,2% 是欺诈交易。
我一直在尝试在训练和测试拆分之前对大多数类别进行欠采样,并在测试集上获得非常好的召回率和精度。
当我仅在训练集上进行欠采样并在独立集上进行测试时,我得到的精度非常差,但召回率相同!
我的问题是:
我是否应该在分成 train 和 test 之前进行欠采样,这会扰乱数据集的分布并且不能代表现实世界吗?
或者上述逻辑仅在过采样时适用?
谢谢
我有一个不平衡的数据集,想对代表性过高的类进行不足采样。我该怎么做。我想使用 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
imblearn ×2
python ×2
scikit-learn ×2
cnn ×1
gbm ×1
h2o ×1
keras ×1
mlr3 ×1
oversampling ×1
pipeline ×1
precision ×1
pytorch ×1
r ×1
resampling ×1
statistics ×1
tensorflow ×1