标签: oversampling

在Scikit学习中将Smote与Gridsearchcv一起使用

我正在处理不平衡的数据集,并希望使用scikit的gridsearchcv进行网格搜索以调整模型的参数。为了对数据进行过采样,我想使用SMOTE,我知道我可以将其作为管道的一个阶段,并将其传递给gridsearchcv。我担心的是,我认为训练和验证折纸都将使用击打,这不是您应该做的。验证集不应过采样。我是否正确,整个管道将应用于两个数据集拆分?如果是的话,我该如何扭转呢?提前谢谢

python machine-learning scikit-learn grid-search oversampling

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

使用 sklearn.train_test_split 处理不平衡数据

我有一个非常不平衡的数据集。我使用 sklearn.train_test_split 函数来提取训练数据集。现在我想对训练数据集进行过采样,所以我用来计算 type1 的数量(我的数据集有 2 个类别和类型(type1 和 tupe2),但几乎所有的训练数据都是 type1。所以我不能过采样。

以前我曾经用我编写的代码分割训练测试数据集。在该代码中,所有类型 1 数据的 0.8 和所有类型 2 数据的 0.8 都在训练数据集中。

如何将此方法与 train_test_split 函数或 sklearn 中的其他分割方法一起使用?

*我应该只使用sklearn或我自己编写的方法。

training-data python-3.x scikit-learn oversampling imbalanced-data

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

加权随机采样器 - 过采样还是欠采样?

问题

我正在 PyTorch 中训练一个用于二元分类的深度学习模型,并且我有一个包含不平衡类比例的数据集。10%我的少数派课程由给定的观察结果组成。为了避免模型学习只预测多数类,我想WeightedRandomSamplertorch.utils.data我的DataLoader.

假设我有1000观察结果(900在类中0100在类中1),并且我的数据加载器的批量大小100为。

如果没有加权随机抽样,我预计每个训练周期将包含 10 个批次。

问题

  • 使用此采样器时,每个时期只会对 10 个批次进行采样 - 因此,由于少数类别现在在训练批次中所占比例过高,模型是否会在每个时期“错过”大部分类别的大部分?
  • 使用采样器是否会导致每个 epoch 采样超过 10 个批次(这意味着相同的少数类观察结果可能会出现多次,并且训练速度也会减慢)?

pytorch oversampling pytorch-dataloader

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

复制训练样例以处理pandas数据帧中的类不平衡

我在pandas中有一个包含训练示例的DataFrame,例如:

   feature1  feature2  class
0  0.548814  0.791725      1
1  0.715189  0.528895      0
2  0.602763  0.568045      0
3  0.544883  0.925597      0
4  0.423655  0.071036      0
5  0.645894  0.087129      0
6  0.437587  0.020218      0
7  0.891773  0.832620      1
8  0.963663  0.778157      0
9  0.383442  0.870012      0
Run Code Online (Sandbox Code Playgroud)

我用它生成的:

import pandas as pd
import numpy as np

np.random.seed(0)
number_of_samples = 10
frame = pd.DataFrame({
    'feature1': np.random.random(number_of_samples),
    'feature2': np.random.random(number_of_samples),
    'class':    np.random.binomial(2, 0.1, size=number_of_samples), 
    },columns=['feature1','feature2','class'])

print(frame)
Run Code Online (Sandbox Code Playgroud)

如您所见,训练集是不平衡的(8个样本具有0级,而只有2个样本具有1级).我想对训练集进行过度采样.具体来说,我想用1级复制训练样本,以便训练集是平衡的(即,0级样本的数量与1级样本的数量大致相同).我怎么能这样做?

理想情况下,我想要一个可以推广到多类设置的解决方案(即,类列中的整数可能大于1).

python machine-learning pandas oversampling

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

如何在词嵌入层之前应用 SMOTE 技术(过采样)

如何在 LSTM 中的词嵌入层之前应用 SMOTE 算法。

我有一个文本二进制分类问题(Good(9500) 或 Bad(500) 评论,总共有 10000 个训练样本,它是不平衡的训练样本),意思是当我使用 LSTM 和预训练的词嵌入(100 维空间用于每个单词)也是如此,所以每个训练输入都有一个单词词典的 id(当文本描述少于 50 个单词时,总共 50 个 id 填充为零,当描述超过 50 个字符时,修剪为 50)。

下面是我的一般流程,

  • 输入 - 1000(batch) X 50 (序列长度)
  • Word Embedding - 200(独特的词汇词)X 100(词表示)
  • 在词嵌入层(LSTM 的新输入)之后 - 1000(批次)X 50(序列)X 100(特征)
  • LSTM 1000(批量)X 100(单位)的最终状态
  • 应用最后一层 1000(batch) X 100 X [100(unit) X 2 (output class)]

我只想在 SMOTE 的帮助下生成更多数据以进行差评

python-3.x deep-learning tensorflow oversampling

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

Pyspark 中的过采样或 SMOTE

我有 7 个类,记录总数为 115,我想对这些数据运行随机森林模型。但由于数据不足以获得高精度。因此,我想对所有类应用过采样,以使多数类本身获得更高的计数,然后相应地获得少数。这在 PySpark 中可能吗?

+---------+-----+
| SubTribe|count|
+---------+-----+
|    Chill|   10|
|     Cool|   18|
|Adventure|   18|
|    Quirk|   13|
|  Mystery|   25|
|    Party|   18|
|Glamorous|   13|
+---------+-----+
Run Code Online (Sandbox Code Playgroud)

machine-learning random-forest pyspark oversampling

6
推荐指数
2
解决办法
7974
查看次数

使用 SMOTE 对图像数据进行过采样

我正在使用 CNN 进行二元分类,并且数据不平衡,其中正医学图像:负医学图像 = 0.4:0.6。所以我想在训练前使用 SMOTE 对正医学图像数据进行过采样。但是,数据的维度是 4D (761,64,64,3) 导致错误

Found array with dim 4. Estimator expected <= 2
Run Code Online (Sandbox Code Playgroud)

所以,我重塑了我的 train_data:

X_res, y_res = smote.fit_sample(X_train.reshape(X_train.shape[0], -1), y_train.ravel())
Run Code Online (Sandbox Code Playgroud)

它工作正常。在将其提供给 CNN 之前,我通过以下方式对其进行了重塑:

X_res = X_res.reshape(X_res.shape[0], 64, 64, 3)
Run Code Online (Sandbox Code Playgroud)

现在,我不确定它是否是一种正确的过采样方法,重塑操作符会改变图像的结构吗?

machine-learning image-processing scikit-learn deep-learning oversampling

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

如何在管道中重新采样文本(不平衡组)?

我正在尝试使用 MultinomialNB 进行一些文本分类,但我遇到了问题,因为我的数据不平衡。(为简单起见,下面是一些示例数据。实际上,我的数据要大得多。)我正在尝试使用过采样对我的数据进行重新采样,并且理想情况下我希望将其构建到此管道中。

下面的管道在没有过度采样的情况下工作正常,但同样,在现实生活中我的数据需要它。这是非常不平衡的。

使用此当前代码,我不断收到错误消息:“TypeError:所有中间步骤都应该是转换器并实现拟合和转换。”

如何将 RandomOverSampler 构建到此管道中?

data = [['round red fruit that is sweet','apple'],['long yellow fruit with a peel','banana'],
    ['round green fruit that is soft and sweet','pear'], ['red fruit that is common', 'apple'],
    ['tiny fruits that grow in bunches','grapes'],['purple fruits', 'grapes'], ['yellow and long', 'banana'],
    ['round, small, green', 'grapes'], ['can be red, green, or purple', 'grapes'], ['tiny fruits', 'grapes'], 
    ['small fruits', 'grapes']]

df = pd.DataFrame(data,columns=['Description','Type'])  

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)
text_clf = Pipeline([('vect', …
Run Code Online (Sandbox Code Playgroud)

python pipeline resampling text-classification oversampling

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

升采样:在向量的每个连续元素之间插入额外的值

假设我们有一个由20个浮点数组成的向量V。是否可以在每对浮点之间插入值,以使向量V成为正好有50个数字的向量。

插入值应该是介于上限和下限之间的随机数,我决定在两者之间插入两个值的中点。

我尝试了以下方法:

 vector<double> upsample(vector<double>& in)
 {

    vector<double> temp;
    for (int i = 1; i <= in.size() - 1 ; i++)
    {
        double sample = (in[i] + in[i - 1]) / 2;
        temp.push_back(in[i - 1]);
        temp.push_back(sample);
    }
    temp.push_back(in.back());
    return temp;
}
Run Code Online (Sandbox Code Playgroud)

使用此功能,输入向量元素增加2(n)-1(20个元素变为39)。输入向量的大小可能小于50。

我认为可以通过在两个元素之间随机插入多个值以具有大小为50的向量来完成此操作(例如,在V [0]和V [1]之间插入3个值,在V [3]和V [4]之间插入1值等)。这可能吗?

您能指导我如何执行此操作吗?谢谢。

c++ oversampling

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

SMOTE 函数在 make_pipeline 中不起作用

我想同时应用交叉验证和过采样。我从这段代码中得到以下错误:

from sklearn.pipeline import Pipeline, make_pipeline
imba_pipeline = make_pipeline(SMOTE(random_state=42), 
                              LogisticRegression(C=3.4))
cross_val_score(imba_pipeline, X_train_tf, y_train, scoring='f1-weighted', cv=kf)
Run Code Online (Sandbox Code Playgroud)

所有中间步骤应该是转换器并实现拟合和转换,或者是字符串 'passthrough' 'SMOTE(k_neighbors=5, kind='deprecated', m_neighbors='deprecated', n_jobs=1, out_step='deprecated', random_state=42 , ratio=None, sampling_strategy='auto', svm_estimator='deprecated')' (type ) 不

附注。我用得到同样的错误imblearn.over_sampling.RandomOverSampler而非SMOTE

python scikit-learn cross-validation oversampling smote

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