[ML]ターゲットアンバランス/オーバーサンプリング/アンダーサンプリング


1.目標アンバランス(分類)


多くの場合、
  • ターゲット特性のクラス割合は大きく異なる.
  • scikit-学習ライブラリにはclass weightなどのクラスバランスパラメータがあります.
  • 重みに小さいカテゴリ
  • を乗じてデータをバランスさせるか、
  • は、より少ないカテゴリデータを追加的にサンプリング(オーバーサンプリング)することができ、逆も同様である方法を提供する.
  • 1) class_weight

  • scikit-learn
  • #balanced 옵션으로 비율을 조정
    DecisionTreeClassifier(max_depth=5, class_weight='balanced', random_state=2)
    
    #비중을 직접 계산하여 비율을 조정
    custom = len(y_train)/(2*np.bincount(y_train))
    custom
    
    DecisionTreeClassifier(max_depth=5, class_weight={False:custom[0],True:custom[1]}, random_state=2)
  • XGBoosting
  • XGBClassifier(n_estimators=1000, verbosity=0, n_jobs=-1, scale_pos_weight=ratio)
    
    #ratio = sum(negative instances) / sum(positive instances)
  • XGBoostingではratioはtaret[0]/taret[1]で計算される.
  • において、strが目標値である場合、中間チャネル上のラベルエンコーダが符号化され、0および1が決定される.ratioを計算するときは、陽性と陰性を変えないように注意してください.
  • 2) Neighbor-based approaches


  • Neighborに基づく方法は、隣接する別のクラスを1対に結合し、複数のペアのターゲットクラスを削除することである.
  • この方法は、小数クラスと複数のクラスを使用することによって境界を明確にし、小数クラスをより明確にする.
  • 3) SMOTE

  • SMOTEアルゴリズムは、新しいデータを生成するためのオーバーサンプリング技術である.
  • クラスの少数のデータをk近隣にグループ化し、グループ間のセグメントに沿って新しいデータを作成します.デフォルトでは、既存のデータ値の間に新しいデータを挿入します.
  • には、データ範囲を超えた新しいデータを作成することはできないが、オーバーサンプリングにより同じデータをコピーすることができ、データの分散性を低減し、マッチングを回避する限界がある.
  • sm = SMOTE(ratio='auto', kind='regular')
    X_resampled, y_resampled = sm.fit_resample(X_train, y_train)

    2.目標分布のアンバランス(回帰)

  • 回帰解析では、ターゲットの分布も表示する必要があります.
  • 線形回帰モデルは、特性とターゲットとの間に線形関係があると仮定する.
  • および特性変数と目標変数の分布が正規分布である場合、性能は良好である.したがって、ターゲット変数がねじれの分布(傾斜)である場合、予測パフォーマンスに悪影響を及ぼします.
  • の傾斜を緩和する方法は、第一に、尾部異常を除去することである.
  • は、右斜面の場合、ログ変換を使用して正規分布として作成できます.
  • 第3に、左斜面であれば、ログの逆関数を使用して正規分布として作成することができる.
  • 
    #numpy를 활용한 로그변환
    import numpy
    
    log1p()
    expm1()
    
    #TransformedTargetRegressor를 활용한 로그변환
    
    tt = TransformedTargetRegressor(regressor=pipe,
                                    func=np.log1p, inverse_func=np.expm1)
    
    
  • ログ・フォーマットのコピーを使用する場合は、分析時に逆関数を再使用する必要があります.
  • TransformedTargetRegressorを使用すると、上記の手順を省略できます.