美文网首页影像组学学习笔记
影像组学学习笔记(30)-SMOTE解决数据不平衡的问题

影像组学学习笔记(30)-SMOTE解决数据不平衡的问题

作者: 北欧森林 | 来源:发表于2020-11-30 00:52 被阅读0次

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频
    本节(30)主要介绍: SMOTE解决数据不平衡的问题

    SMOTE基本介绍

    SMOTE (Synthetic Minority Over-sampling Technique) 采样过程
    1.找到少数类中的某个样本Xi的k个近邻

    1. 随机选取一个Xi的近邻Xi(nn), 并随机生成一个介于0-1之间的数ζ1,合成的新样本Xnew = Xi + ζ1*Xi(nn)
    2. 对每一个随机选出的Xi的近邻重复步骤2
    3. 对少数类中的每个样本重复上述步骤
      例:如果样本数据是一维的,一个样本是0,它有一个近邻是1,那么合成样本将是一个0-1之间的数。
    代码实现
    1. 导入包
    # pip install -U imbalanced-learn  # for the first time
    from sklearn.datasets import make_classification
    import matplotlib.pyplot as plt
    import seaborn as sns
    import numpy as np
    from collections import Counter
    from imblearn.over_sampling import SMOTE
    
    1. 准备数据
    X, y = make_classification(n_classes = 2, class_sep = 2,
                               weights = [0.9, 0.1], n_informative = 2,
                               n_redundant = 0, flip_y = 0,
                               n_features = 2, n_clusters_per_class = 1,
                               n_samples = 100, random_state =1)
    print(Counter(y))
    # > Counter({0: 90, 1: 10})
    
    1. 探索数据
    plt.figure()
    sns.scatterplot(X[:,0],X[:,1],hue = y)
    plt.show()
    

    Output:


    SMOTE1.png
    1. 制造数据
    smo = SMOTE(random_state = 42)
    X_smo, y_smo = smo.fit_sample(X, y)
    print(Counter(y_smo))
    # > Counter({0: 90, 1: 90})
    
    1. 显示制造的数据
    plt.figure()
    sns.scatterplot(X_smo[:,0],X_smo[:,1], hue = y_smo, palette = 'Accent')
    sns.scatterplot(X[:,0],X[:,1],hue = y)
    plt.show()
    

    Output:


    SMOTE2.png

    注意:这种方法只能用于训练集,不能用于测试集(test subset)。

    相关文章

      网友评论

        本文标题:影像组学学习笔记(30)-SMOTE解决数据不平衡的问题

        本文链接:https://www.haomeiwen.com/subject/oiksiktx.html