🙂

機械学習前処理:スケーリングについて

2024/01/08に公開

スケーリングとは、機械学習でデータセットの特徴量の範囲を統一する処理のことです。異なるスケールの特徴量が混在していると、モデルの性能に影響を与える可能性があります。
スケーリングについて、分かりやすく簡単にまとめておきますね。

スケーリングが重要な機械学習のモデル

ニューラルネットワークや、線形回帰や、SVMを使う場合は、スケーリングは大事です。
決定木ベースのモデル(ランダムフォレスト、LightGBM、XGBoostなど)は、スケールの違いによる影響が少ないとされますが、特徴量によっては、スケーリングを行ったほうが良い結果が得られます。

主なスケーリング手法

StandardScaler、MinMaxScaler、RobustScalerがあります。

StandardScaler

-特徴: 平均を0、標準偏差を1にスケーリング。
-メリット: 外れ値以外のデータに対して効果的。
-デメリット: 外れ値に影響されやすい。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

処理前
48.220714

処理後
-0.759715

MinMaxScaler

-特徴: 0から1の範囲にスケーリング(または他の指定範囲)。
-メリット: 全ての値を正の範囲に保つ。
-デメリット: 外れ値に非常に敏感。

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data)

処理前
48.220714

処理後
0.234239

RobustScaler

-特徴: 中央値と四分位数を使用してスケーリング。
-メリット: 外れ値に強い。
-デメリット: データの分布によっては効果が限定的。

from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
scaled_data = scaler.fit_transform(data)

処理前
48.220714

処理後
-0.091777

スケーリングの方法の使い分け

通常は、StandardScalerが良いかと思います。マイナスにしたくない場合は、MinMaxScalerが良さそうです。外れ値があり、その影響を減らしたい場合は、RobustScalerを試してみましょう。

Discussion