问题标签 [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 投票
0 回答
48 浏览

python - 如何将 SMOTE 生成的重采样数据与原始训练数据的某些属性进行比较?

我使用 SMOTE 对我的训练集进行过采样。在训练集中,除了数字特征外,每行还有多个分类属性,例如位置和类型。当我使用 SMOTE 重新采样数据时,如何将这些分类属性的分布与训练集中的分布进行比较?在 imblearn 的过采样策略中,sample_indices_ 使这成为可能,但我认为这在 SMOTE 中是不可能的。有没有办法解决这个问题?我们是否也可以让 SMOTE 基于分类属性创建合成示例?例如,在少数类实例较少的位置创建少数类样本?

0 投票
1 回答
461 浏览

python - 无法从“imblearn.over_sampling”导入名称“SMOTEN”

SMOTE 和 SMOTENC 正在工作。但无法使用 SMOTEN。我在这个尝试了解决方案。但仍然只针对 SMOTEN 它返回错误,

我正在使用 Jupyter Notebook,下面是返回的错误片段。

0 投票
1 回答
128 浏览

python - imblearn 的问题:SMOTENC “TypeError:‘int’和‘str’的实例之间不支持‘<’’

我正在使用 SMOTENC 来解决不平衡的分类问题。

我在行收到以下错误:

TypeError:“int”和“str”的实例之间不支持“<”

我可以理解这是变量类型的问题,但我不知道如何解决这个错误。我已经尝试过:

  1. 替换所有缺失值
  2. 修复所有可能的变量类型错误

其他有用信息:数据集的前 6 个变量是字符串,其他是双精度或整数。

只需询问您是否需要更多信息。

提前致谢。

0 投票
0 回答
53 浏览

python - 为什么我在 Python ML 模型中收到此错误?

我在导入数据集时没有遇到任何问题。但是,当我运行 SMOTE 或 RandomUnderSampler 时,我得到了错误(但是,只有在这个数据集中我遇到了这个问题而不是其他人)。我什至无法确定错误指向哪个列/字段。我需要对 SMOTE/RUS 的参数进行任何更改或调整吗?

错误

0 投票
0 回答
155 浏览

numpy - 如何在不耗尽 RAM 的情况下将 SMOTE 应用于 tensorflow 数据集

我一直在研究一个包含近 17k 图像的不平衡数据集,并且我一直在尝试使用不平衡学习库来实现过采样技术,例如 SMOTE。图像和标签作为张量加载,而不平衡学习库中可用的方法需要 numpy 数组。我已经尝试从 tensorflow 数据集中提取图像,但是在大约 10000 张图像之后,我在 google colab 上的会话由于内存不足而崩溃。我也试图寻找不同的方法,但我找不到其他任何东西。这就是为什么我想知道您是否有任何建议可以真正帮助我克服这个问题。

我按照以下步骤操作:

我使用 tf.keras.preprocessing.image_dataset_from_directory 导入数据。

然后我运行这行代码以将图像作为 numpy 数组从 tf 数据集中取出,但正如我已经说过的,此时我的会话崩溃了。

谢谢您的支持。

0 投票
0 回答
62 浏览

classification - 重新采样后性能指标低下

我有一个不平衡的数据。66k:0 和 1k:1。我在我的训练集上尝试了随机过采样、SMOTE 和 SMOTE 的混合方法和欠采样。以下是我使用随机森林分类器针对不同策略的分类报告:

训练集(无重采样):

对于过采样策略:

对于 SMOTE:

并且,对于具有欠采样的 SMOTE

我不知道还能做些什么来改进模型。它们似乎都是可怕的指标。我开始认为特征数据是垃圾。你有什么建议?

0 投票
1 回答
192 浏览

python - SMOTE 之后如何导出到 CSV 文件

我运行了以下 Python 代码来解决我的数据不平衡问题。我使用了 SMOTE 功能。我不确定如何查看和导出(作为 excel 文件到我的桌面)“重新采样数据集”(1:860 到 0:860)。因为我想获取该 excel 文件并使用另一个应用程序处理它。非常感谢任何帮助

输出

原始数据集形状 Counter({1: 860, 0: 483})

重采样数据集形状 Counter({1: 860, 0: 860})

0 投票
1 回答
316 浏览

python - Imblearn SMOTE:如何为多类不平衡数据集设置 sample_strategy 参数?

我正在尝试处理具有以下形状的网络攻击的数据集:

攻击和正常行为的标签有以下计数:

接下来,我将数据集拆分为特征和标签。

然后尝试平衡我的数据集。

所以你可以注意到攻击的数量与正常行为的数量不成比例。

我尝试使用 SMOTE 使少数(攻击)类与多数类(普通)具有相同的值。

我不明白这就是为什么我在应用 SMOTE 后得到 18694722 值的原因。

对于我的情况,对 Normal 类进行下采样还是对 Attack 类进行上采样会更好吗?关于如何正确执行此操作的任何想法?

非常感谢。

0 投票
0 回答
314 浏览

python - ValueError: could not broadcast input array from shape (3,96) into shape (184,96) while using SMOTENC from imbalanced learn

I am trying to use SMOTENC from the imbalanced learn library to oversample a dataframe that includes both categorical and numerical variables. There are 55 columns in total where 3 of them are numerical. The number of samples per class (value counts) in the dataset is below:

I am attempting to oversample this dataset with the code:

Where cat_features contains the indexes of the categorical columns, y contains the class membership of each sample and x contains the rest of the features. However, I cannot oversample this dataset and instead I get the error ValueError: could not broadcast input array from the shape (3,96) into shape (184,96). As far as I could understand, the error is related to the class with id 7. Why can't SMOTENC oversample this class? Is there a limit such as the minimum number of samples that are needed to be provided to oversample a dataset? Also, I do not have 96 columns, where does that come from?

More detailed information about the error is the following: Note that all of my categorical features are binary, which are already one-hot encoded. Thus, it does not require any additional encoding by SMOTENC, which means that the number of columns is not supposed to be increased. The exact line that the error occurs is

The comment for this function (_generate_samples) says that "In the case that the median std was equal to zeros, we have to create non-null entry based on the encoded of OHE". The complete part where the error is raised in base.py is

However, I do not understand how the standard deviation can be zero because I know that the samples in the dataset are not identical to each other, thus the std must be something different from 0. I know that this column is one of the two sparse numerical columns (they have a lot of zero values). In the source code of the SMOTE, I have seen that there is a function to handle sparse columns, but it seems that it does not work fine and that is how I am getting an error. I am not sure how to overcome this problem and I appreciate any help or recommendation regarding this.

0 投票
0 回答
38 浏览

confusion-matrix - 对验证数据使用 SMOTE(即不平衡)

我有不平衡的数据集——不过还不错(850 - 1 级和 450 - 2 级)。然后,我将其拆分(80% 用于训练,20% 用于验证)。我在验证中使用了 SMOTE 技术,因此这两个类平均分布(50%-50%)。

我的理解是我不应该在不平衡的验证集(20%)上应用 SMOTE,因为这会在解释矩阵(例如准确性)时导致问题,所以我需要留下 20% 的偏差(不平衡)——这就是我不确定。

我是否应该继续将我的验证训练集修改为 50% 到 50%(简单地随机删除大多数样本)

“如果你对训练数据进行过采样以改变训练集中的相对类频率,你就是在隐含地告诉分类器期望验证集具有相同的类频率”。这是它从一个较旧的线程中所说的