Hello there, ('ω')ノ
📌 1. なぜスケーリングや正規化が必要なのか?
データの数値範囲が異なると、以下のような問題が発生します。
🔍 問題①: 数値の大きな特徴が支配的になる
ID | 年収(万円) | 身長(cm) |
---|---|---|
1 | 500 | 170 |
2 | 800 | 160 |
3 | 600 | 175 |
上記のようなデータでは、年収(500〜800万円)が身長(150〜180cm)よりも数値が大きいため、機械学習モデルが「年収」を重要視しすぎる可能性 があります。
➡ 対策: 特徴量のスケールを統一することで、すべての変数が平等に扱われるようにする。
🔍 問題②: 距離ベースのアルゴリズムに影響
K近傍法(KNN)やサポートベクターマシン(SVM)などの 「距離」に基づくアルゴリズム では、数値の大きさに依存しないようにスケーリングが必須です!
📌 2. 数値スケーリングの手法
数値データのスケールを揃える方法には、主に 「標準化(Standardization)」 と 「正規化(Normalization)」 の2つがあります。
手法 | 計算方法 | 特徴 | 使うべきケース |
---|---|---|---|
標準化(Standardization) | 平均0、標準偏差1に変換 | 外れ値に強い | 線形回帰、SVM、ロジスティック回帰 |
正規化(Normalization) | [0,1] の範囲に変換 | 比較がしやすい | KNN、ニューラルネットワーク |
適切な手法を選ぶことで、モデルの学習がスムーズになり、精度向上につながります! 🚀
📌 3. 標準化(Standardization)
標準化は、各特徴量を 平均0・標準偏差1 に変換する方法です。
✅ 計算式
[ X_{\text{scaled}} = \frac{X - \text{平均}(\mu)}{\text{標準偏差}(\sigma)} ]
✅ 実装(scikit-learnを使用)
import pandas as pd from sklearn.preprocessing import StandardScaler # データ準備 df = pd.DataFrame({"年収": [500, 800, 600], "身長": [170, 160, 175]}) # 標準化の適用 scaler = StandardScaler() df_scaled = pd.DataFrame(scaler.fit_transform(df), columns=df.columns) print(df_scaled)
🔍 出力結果
年収 身長 0 -1.069045 0.267261 1 1.336306 -1.336306 2 -0.267261 1.069045
✅ メリット: データの分布を保ちつつスケールを統一できる
✅ デメリット: 値の範囲が固定されない(-∞ 〜 +∞ の範囲になる)
➡ 線形回帰やSVMなど、正規分布に近いデータを扱うモデルで推奨!
📌 4. 正規化(Normalization)
正規化は、データを [0,1] の範囲 に変換する方法です。
✅ 計算式
[ X{\text{scaled}} = \frac{X - X{\text{min}}}{X{\text{max}} - X{\text{min}}} ]
✅ 実装(MinMaxScalerを使用)
from sklearn.preprocessing import MinMaxScaler # 正規化の適用 scaler = MinMaxScaler() df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns) print(df_normalized)
🔍 出力結果
年収 身長 0 0.00 0.67 1 1.00 0.00 2 0.33 1.00
✅ メリット: すべての値が [0,1] の範囲 に収まり、学習が安定しやすい
✅ デメリット: 外れ値に弱い(大きな値があると影響を受ける)
➡ ニューラルネットワークやK近傍法(KNN)で推奨!
📌 5. ログ変換(Log Transformation)
外れ値の影響を減らすために 対数変換(Log Transform) を使うこともあります。
✅ 実装
import numpy as np # 対数変換(+1 するのは 0 を防ぐため) df["年収_log"] = np.log1p(df["年収"]) print(df)
✅ メリット: 外れ値の影響を小さくできる
✅ デメリット: 0以下のデータには適用できない(対策として log1p()
を使用)
➡ 「収入」や「人口」など、桁の大きなデータに有効!
📌 6. 機械学習モデルごとの適切なスケーリング手法
どのモデルにどの手法を使うべきか?
モデル | 推奨するスケーリング |
---|---|
線形回帰(Linear Regression) | 標準化(Standardization) |
ロジスティック回帰(Logistic Regression) | 標準化(Standardization) |
SVM(サポートベクターマシン) | 標準化(Standardization) |
KNN(K近傍法) | 正規化(Normalization) |
ニューラルネットワーク(NN) | 正規化(Normalization) |
決定木(Decision Tree) | 不要(スケーリングなし) |
ランダムフォレスト(Random Forest) | 不要(スケーリングなし) |
✅ 距離ベースのモデル(KNN、SVM)は「正規化」推奨!
✅ 線形モデル(回帰、SVM)は「標準化」推奨!
🎯 まとめ
✅ データのスケールを統一すると、機械学習モデルが学習しやすくなる!
✅ 「標準化(Standardization)」は平均0・標準偏差1にする手法!
✅ 「正規化(Normalization)」は [0,1] に変換する手法!
✅ モデルによって最適なスケーリング手法を選ぶことが重要!
Best regards, (^^ゞ