问题标签 [oversampling]
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.
python-3.x - SMOTE 过采样的尺寸误差
我有一个关于如何使用 imblearn 库中的 SMOTE 模块来处理不平衡数据集的快速问题:
我有一个数据集来训练我的 DNN 模型。它有 12442 个样本,每个样本是一个 650*5 的数组:
X.shape # (12442, 650, 5) y.shape # (12442, 1)
该数据集适用于我使用 tf.keras API 构建的 DNN 模型。
但是,当我尝试使用 SMOTE 添加过采样时,它返回错误:
是不是 imblearn 包中的 SMOTE 只需要一维数据?有没有办法或其他包来解决它?
python - Python 过采样在管道中组合了多个采样器
我的问题涉及 SMOTE 类引发的值错误。
预期 n_neighbors <= n_samples,但 n_samples = 1,n_neighbors = 6
经过一番调查,我发现我的一些班级(总共 158 个班级)的样本极少。
根据这篇文章中提出的解决方案
创建一个使用 SMOTE 和 RandomOversampler 的管道,以满足 smoted 类的条件 n_neighbors <= n_samples 并在不满足条件时使用随机过采样。
但是,我仍在努力设置和运行我的实验。
当我运行它时,我仍然有同样的错误。我的猜测是,生成的管道应用了两个采样器,而我只需要一次应用其中一个,基于预定义的条件(如果项目数小于 X,则为 RandomSampler,否则为 SMOTE)。有没有办法在项目数量极少的情况下设置调用 RandomSampler 的条件?
先感谢您。
python - 具有不平衡二进制数据集的机器学习
我有一个我正在尝试解决的问题: - 具有 2 个类的不平衡数据集 - 一个类使另一个类相形见绌(923 对 38) - 当数据集按原样用于训练 RandomForestClassifier 时,f1_macro 得分保持在 0.6 中的 TRAIN 和 TEST - 0.65 范围
昨天在研究该主题时,我自学了重采样,尤其是 SMOTE 算法。它似乎为我的 TRAIN 分数创造了奇迹,因为在将数据集与它们平衡后,我的分数从 ~0.6 上升到 ~0.97。我应用它的方式如下:
我一开始就将我的 TEST 集与其余数据分开(整个数据的 10%)
我只在 TRAIN 集上应用了 SMOTE(班级余额 618 与 618)
我已经在 TRAIN 集上训练了一个 RandomForestClassifier,并实现了 f1_macro = 0.97
使用 TEST 集进行测试时,f1_macro 分数保持在 ~0.6 - 0.65 范围内
我会假设发生的情况是,TEST 集中的保留数据包含观察结果,这与 TRAIN 集中少数类的 SMOTE 前观察有很大不同,最终教会模型很好地识别 TRAIN 集中的案例,但是使模型与测试集中的这些少数异常值失去平衡。
处理这个问题的常用策略是什么?常识表明我应该尝试在 TRAIN 集中捕获一个非常具有代表性的少数类样本,但我认为 sklearn 没有任何自动化工具可以实现这一点?
python - 我如何将 SMOTE 应用于多类文本数据
我有一个要使用 SMOTE 的多类数据集,但我面临着一个
ValueError: "sampling_strategy" 只有当目标类型是二进制时才能是浮点数。对于多类,使用字典。
我想使用 SMOTE 或任何其他多类技术来平衡我的数据,并且我的原始数据是文本。
python - 交叉验证和过采样功能 (SMOTE)
我写了下面的代码。X
是具有形状的数据框(1000,5)
,y
是具有形状的数据框(1000,1)
。y
是要预测的目标数据,而且是不平衡的。我想应用交叉验证和 SMOTE。
当我运行代码时,我收到以下错误:
[Int64Index([ 4231, 4235, 4246, 4250, 4255, 4295, 4317, 4344, 4381,\n 4387,\n ...\n 13122, 13123, 13124, 13125, 13126, 1313127, 13128, , 13130,\n
13131],\n dtype='int64', length=8754)] 在 [columns]"
帮助使其运行表示赞赏。
python - 从真实数据生成人工数据
我有一个包含 2000 行和 5 个特征(列)的数据框,如下所示:
在每个 Id(例如,u1 或 u2)的这个数据帧中,只有少数实例,例如,10、13 或最多 15 个样本。当然,我想为每个单独的 Id 做一些分类和预测任务,这个数据点数量不足以完成 ML 任务。有什么方法可以为每个 Id 生成一些人工数据点(比如过采样),这在统计上可以依赖于机器学习任务?
python - 使用 SMOTE 后导致高误报的不平衡数据集
我正在研究一个二进制分类不平衡的营销数据集,它具有:
- 否:是 88:12 的比例(否 - 未购买产品,是 - 购买)
- 约 4300 个观察值和 30 个特征(9 个数字和 21 个分类)
我将我的数据分为训练集(80%)和测试集(20%),然后在训练集上使用标准标量和 SMOTE。SMOTE 将训练数据集的“否:是”比率设为 1:1。然后我运行了一个逻辑回归分类器,如下面的代码所示,在测试数据上获得了 80% 的召回分数,而通过应用没有 SMOTE 的逻辑回归分类器在测试数据上只有 21% 的召回率。
使用 SMOTE,召回率提高很大,但是误报率很高(请参阅混淆矩阵的图像),这是一个问题,因为我们最终会针对许多虚假(不太可能购买)客户。有没有办法在不牺牲召回/真阳性的情况下降低误报?
machine-learning - 在训练数据上使用 SMOTE
我有一个不平衡的数据集,我想使用 SMOTE。我正在使用 Azure ML。我在 Microsoft Doku 页面中阅读了许多示例。我想知道为什么 SMOTE 设置在 SPLIT DATA 函数之前,而不是在 70% 数据集上的 SPLIT DATA 之后进行训练。我看到的所有示例都在 SPLIT DATA 函数之前。这是 SMOTE 的正确用法吗?
这是来自 Microsoft 的示例: https ://imaginemedia.blob.core.windows.net/content/Lab%20PDF%20-%20Churn%20Prevention%20and%20Intervention-db9732e3e8c6.pdf
python - 留一个交叉验证的过采样
我正在为我的研究项目使用一个极其不平衡的数据集,总共有 44 个样本。这是一个二元分类问题,有 3/44 个少数类样本,我正在使用 Leave One Out Cross Validation。如果我在 LOOCV 循环之前对整个数据集执行 SMOTE 过采样,则 ROC 曲线的预测精度和 AUC 分别接近 90% 和 0.9。但是,如果我只对 LOOCV 循环内的训练集进行过采样(这恰好是一种更合乎逻辑的方法),ROC 曲线的 AUC 会低至 0.3
我还尝试了精确召回曲线和分层 k 折交叉验证,但在循环内外过采样的结果中遇到了类似的区别。请建议我什么是过采样的正确位置,并尽可能解释区别。
循环内的过采样:-
曲线下面积:0.25
准确度:68.1%
循环外的过采样:
曲线下面积:0.99
准确度:90.24%
这两种方法怎么会导致如此不同的结果?我要遵循什么?
python - 使用不平衡学习进行过采样后的训练形状输出
我正在使用不平衡学习对我的数据进行过采样。我想知道使用过采样方法后每个类中有多少条目。此代码运行良好:
但我转而使用管道,因此我可以使用 GridSearchCV 找到最佳的过采样方法(ADASYN、SMOTE 和 BorderlineSMOTE)。因此,我从来没有真正自己调用 fit_resample 并使用以下方式丢失我的输出:
上采样有效,但我失去了关于训练集中每个类有多少条目的输出。
有没有办法获得与使用管道的第一个示例类似的输出?