问题标签 [smote]

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 投票
2 回答
3172 浏览

missing-data - 使用具有 NaN 值的 SMOTE

有没有一种方法可以将 SMOTE 与 NaN 一起使用?

这是一个在存在 NaN 值的情况下尝试使用 SMOTE 的虚拟程序

我得到以下输出/错误:

0 投票
2 回答
280 浏览

python - 分类编码后处理不平衡数据

我最初有一个维度 (13961,48) 的数据,经过一次热编码和基本的数据按摩之后,在 (13961,862) 周围观察到维度。数据不平衡,两类“保留”约为 6%,“未保留”约为 94%。

在运行任何算法(如逻辑、knn、决策树、随机森林)时,即使没有执行任何特征选择过程,数据也会产生非常高的准确率,并且除了“朴素偏差分类器”之外,准确率大多超过 94%。

这似乎很奇怪,甚至随机具有任意两个特征-> 提供超过 94% 的准确度,这通常看起来不现实。

也应用 SMOTE,即使对于上述任何算法的基线模型,如逻辑、knn、决策树、随机森林、

去除前 20 个特征后,这给出了超过 94% 的良好结果的准确率(检查了解真实性)

我的数据有 7 个数值变量,例如月份、金额、利率和所有其他变量(大约 855)作为单热编码转换的分类变量。

有什么方法可以处理此类关于基线、特征选择或不平衡优化技术的数据?请通过查看每个级别的维度和不平衡计数来指导。

0 投票
1 回答
187 浏览

machine-learning - 使用小数据集和 SMOTE 进行深度学习

我有一个包含 6000 条记录的数据。我有一个 60-20-20 的训练、验证和测试集。我使用 XGboost 获得了大约 76% 的准确度。我将数据转换为时间序列并应用 LSTM/1-D Convnets,准确率约为 60%。我的数据集对于深度学习来说太小了吗?

其次,可以在每个训练集、测试集和验证集上应用 SMOTE(拆分数据后)我知道在将数据拆分为训练/测试/验证之前不应该应用 SMOTE。拆分后可以对集合进行上采样、训练/测试/验证吗?

如果在拆分它们之后对训练/测试/验证集进行上采样,我会在 LSTM 左右(80%)获得更好的结果但是这种方法,对吗?我只是想表明,通过更多的数据,我们可以提高深度学习算法的准确性。

0 投票
2 回答
3976 浏览

python - 我们如何在 SMOTE 中设置比率以使正样本多于负样本?

我正在尝试使用 SMOTE 来处理二进制分类中不平衡的类数据,我所知道的是:例如,如果我们使用

对于第 1 类为少数的情况,将导致 50:50 的第 0 类和第 1 类数量

将导致类 1 的大小减半。

我的问题:

我们如何设置比率以使 1 类比 0 类获得更多,例如 75:25?

0 投票
1 回答
398 浏览

python - 使用 SMOTE 对二元类进行过采样;为什么它返回 0 到 1 之间的随机浮点值?

我正在使用 SMOTE 对TARGET_FRAUD包含值 0 和 1 的二进制类进行重新采样。0 有大约 900 条记录,而 1 只有大约 100 条记录。我想将第 1 类过采样到 800 左右。

这是为了进行一些分类建模。

这是重采样前的值计数:

这是重新采样后的值计数:

为什么它会产生 0 到 1 之间的随机浮点值?我只希望它返回 0 和 1 的 int 值。

0 投票
1 回答
570 浏览

python - SMOTENC:无法将字符串转换为浮点数

我的数据不平衡,M 的百分比为 80%,F 的百分比为 20%。以下是数据示例:

所以我想用 M:F 的百分比来平衡数据是 50%:50% 使用SMOTENC. 我试过这个脚本:

但我得到这样的错误:

任何人都可以帮忙吗?

0 投票
0 回答
67 浏览

python-3.x - 麻烦创建测试/培训功能以对少数群体进行过度采样

我正在尝试重新创建 Nick Becker 制作的教程。它位于https://beckernick.github.io/oversampling-modeling/

他发布的代码在您将其复制并粘贴到 Jupyter Notebook 时有效。

我正在尝试使用同样高度不平衡的不同数据集重新创建它。它是 Inside Airbnb 提供的 Airbnb 数据集,我在此处对其进行了操作和重新上传:https ://drive.google.com/file/d/0B4EEyCnbIf1fLTd2UU5SWVNxV29oNHVkc3ZyY2JId3UyRWtv/view?usp=drivesdk

我创建了一个笔记本,在其中我删除了具有空值的行,平均了审查分数,并使 1,2,3 = 1 或负数和 4,5 = 0 或正数。

然后,我按照 Nick Beckers 模型中提供的确切步骤进行操作,当我进入“创建训练和测试集”部分时,出现错误。

****我在最后添加了一个附加问题,因为错误已在评论中解决****

以上是完整错误消息的缩短版本。我确实注意到在尼克的代码中,即使他在他的模型变量中设置了“bad_loans”,然后他创建了假人。当您实际查看“price_relevant_encoded”数据框时,实际上没有为“bad_loans”创建假人。我对“bad_loans”的等价物是“average_review_score”,并且为此创建了假人。我相信这是我的问题。对我来说不好的是我不知道如何绕过它。我的最终目标是能够根据物业类型房间类型和社区获得更现实的评级预测模型。

这是我到目前为止的代码:

输出为

输出为

我继续代码如下:

有没有人对我如何更好地优化我的模型或进行更改以从这些数据中做出更准确的预测有任何想法?

0 投票
0 回答
1037 浏览

r - 我在数据框的下标分配中不允许缺失值有错误

我是 R 新手,我正在为我的个人项目/练习构建 R 代码。我使用的数据是关于香港人种族认同的调查。我使用了来自http://data.hkupop.hku.hk/v3/hkupop/ethnic_identity/ch.html的2019 年数据。

在删除 NA 值并将列减少到我需要的列之后,我注意到数据高度不平衡,因此我尝试使用欠采样、ROSE 和 SMOTE。(数量从 1015 次大幅减少到 573 次)

我从集合中删除了以下列#

但是,这不是二进制数据,因此我不得不强制 eth_id 中的因素组合成 0 = 1&3(香港人和香港中国人)和 1 = 2&4(中国人和中国香港公民)

我如何结合这些因素

  • 0 = 香港公民 + 香港中国公民
  • 1 = 中国公民 + 中国香港公民

我如何重命名列

我如何处理我的 NA 和不必要的异常值

对于 [,2:7] 列,我将它们的值更改为 0 用于 NA,例如,df_f$HongKonger <- ifelse(is.na(df_f$HongKonger),0,df_f$HongKonger)依此类推。

对于其他人,我删除了这样的 NA:

在我的数据集的这一点上,我剩下 14 列,我将它们重命名(请参阅上文)。我上传了我用于 ROSE 和 SMOTE 的数据的最终结构 :-)

此外,我还删除了异常值的行,例如:

删除无法识别的种族身份(8881 或级别 = 5)

  • 这些代码必须仔细编写,如果您在重命名之前运行它,请使用 eth_id 代替 Q001,反之亦然。

现在,当我运行 ROSE 时,我不断收到此错误:Error in [<-.data.frame( *tmp*, , indY, value = c(1L, 1L, 1L, 1L, 1L, : 在数据帧的下标分配中不允许缺失值。

这是非常具有误导性的,因为我确保完全删除 NA 值(因为与此相关的所有问题都与 NA 问题有关,这不适用于我的问题),我什至将所有因子值都更改为数值。(因为我认为程序不理解?因子值。)

我还收到 SMOTE 的此错误消息:名称错误(dn)<- dnn:尝试将属性设置为 NULL。这个马克

我如何将 ROSE 用于“两者”

我如何使用 SMOTE

我不断得到: 1)对于 ROSE:([<-.data.frame, *tmp*, indY, value = c(1L, 1L, 1L, 1L, 1L, 中的错误):在数据帧的下标分配中不允许缺少值

2) 对于 SMOTE: Error in names(dn) <- dnn : 尝试将属性设置为 NULL

  • 我也很困惑将所有因素更改为数值会使其仍然有效。

谢谢你,谢谢你提前分享你的知识。

0 投票
0 回答
1016 浏览

python - ValueError:无法将字符串转换为浮点 SMOTE fit_sample Python 过采样

我有一个信用风险分析数据集,如下所示:

在loan_status 中,1 表示违约,0 表示非违约。

现在默认的数量非常少,大约为 1000,非默认数量为 25,000。所以我想做过度采样或合成采样。

到这里代码运行良好

在此之后我执行以下操作并且出现错误

有人可以帮忙吗?

0 投票
1 回答
1154 浏览

scikit-learn - 我应该在 SMOTE 之前还是之后执行 GridSearch(用于调整超参数)?

我正在使用不平衡数据通过 scikit-learn 执行分类并提高模型的准确性,我使用 SMOTE 技术创建了更多合成数据。我想知道使用 GridSearch 实现超参数优化的最佳时机。我应该只使用原始数据还是原始+合成数据?