python imblearn toolboxデータのアンバランス問題を解決する(二)--over-sampling上のサンプリング

5489 ワード

imblearnで紹介した第2節として,imblearnでサンプリングする方法と基本原理を紹介する.
基本使用フレームワーク
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_resample(X, y)

異なるアップサンプリングアルゴリズムに対して、RandomOverSamplerとパラメータを変更すればよい.
方法と原理の紹介
1. Naive random over-sampling : random sampling with replacement.
未表現サンプルをランダムにサンプリングし、heterogeneous data(異機種データ)をサンプリング(例えばいくつかの文字列を含む)することができる.元の少数のサンプルの繰返しサンプリングにより上サンプリングを行った.
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_resample(X, y)

2.The Synthetic Minority OverSampling Technique(SMOTE)
interpolation(補間)により新しいサンプルを生成し、easy samples and hard samplesを区別しない.
from imblearn.over_sampling import SMOTE
X_resampled,y_resampled = SMOTE().fit_resample(X, y)

主な考え方は次のとおりです.
  • Step 1:少数のクラスサンプルのいずれかのサンプルx x xについて、そのK近傍のサンプルを見つける(もちろんここでのKNNは同クラスのKNNである).
  • Step 2:K近隣サンプルy yをランダムに選択する.
  • Step 3:新しいサンプルをx n e w=x+として生成λ ∗ ( y − x ) x_{new} = x +\lambda*(y-x) xnew​=x+λ∗(y−x), λ\lambda λ [0,1][0,1][0,1][0,1]上の乱数です.

  • 3.The Adaptive Synthetic (ADASYN)
    補間により新しいサンプルを生成し,KNNで分類されたエラーに近い元本を生成する.
    from imblearn.over_sampling import ADASYN
    X_resampled, y_resampled = ADASYN().fit_resample(X, y)
    

    主な考え方はSMOTEと同様であるが,x x xを選択する方法は異なる.
    4.SMOTENC
    SMOTEアルゴリズムとADASYアルゴリズムは、サンプリング時に距離を用いているため、x xが異機種データである場合、すなわち、離散変数(例えば、0は男性を表し、1は女性を表す)を含み、この場合、離散変数に直接オーステナイト距離を使用することはできない.従って、K近傍サンプルの中で最も頻度の高い離散データを新しいサンプルの値として用いて離散データを処理する変形SMOTENCが得られる.ただし、離散データが表示される次元の位置を事前に通知します.
    from imblearn.over_sampling import BorderlineSMOTE
    #   mixed data ,    RandomOverSampler   (       ),        ——SMORENC
    from imblearn.over_sampling import SMOTENC 
    #           (0)       (3) categorical features(    )
    smote_nc = SMOTENC(categorical_features=[0,2], random_state=0)
    X_resampled, y_resampled = smote_nc.fit_resample(X,y)
    

    5.bordeline SMOTE
    まず、サンプル(負のサンプル)xをnoise(すべてのKNNサンプルカテゴリがxカテゴリとは異なる)に分割する.In danger(少なくとも半分のKNNサンプルカテゴリはxカテゴリと同じである);safe(すべてのKNNサンプルカテゴリがxカテゴリと同じ)の3種類のサンプル.bordeline SMOTE:Borderline-1およびBorderline-2 SMOTEはin dangerのサンプルを使用します.違いは、Borderline-1 SMOTEが選択した補間に関与するKNNサンプルy yがx xと同じカテゴリに属することである.Borderline−2 SMOTEは任意のクラスのKNNサンプルを使用することができる.
    6.SVMSMOTE
    SVM分類器を用いてサポートベクトルを見つけ、生成時にそれらを考慮する.SVMのCパラメータは、サポートベクトルの選択量を決定する.
    たぶんるいもんだい
  • RandomOverSamplerについては、もともとコピーであり、補間は存在しないため、問題はありません.
  • ADASYNおよびSMOTEにはKNN情報が必要であり、ここではone-vs-rest、すなわち1対余の方
  • を用いる.