😺

【5日目】標準化、正規化をやってみる【2021アドベントカレンダー】

2021/12/05に公開

2021年1人アドベントカレンダー(機械学習)、5日目の記事になります。

https://qiita.com/advent-calendar/2021/solo_advent_calendar

テーマは 標準化、正規化になります。

標準化、正規化は、特徴量がもつ値の重みを平等にするための手法です。

https://www.codexa.net/normalization-python/

やっておいてなんですが、決定木は各特徴量内の分割を繰り返す特性から、標準化・正規化の影響を受けにくい傾向にあります。

「分類問題を解く教師あり機械学習のアルゴリズム」 より

https://axa.biopapyrus.jp/machine-learning/decision-tree/

Colab のコードはこちら Open In Colab

通常のlightGBMの評価結果(RMSE、以下同様)

rmse = mean_squared_error(y_test, y_pred, squared=False)
print(rmse)

出力:
0.24290787668071306

標準化

標準化は各特徴量の平均を0、分散を1に収まるように変換する処理です。

下記のように、平均値との差額を標準偏差で割って算定します。

\begin{aligned} \frac{x^i - \bar{x}}{σ} \end{aligned}
sc = StandardScaler()

X_train_sc = pd.DataFrame(
                            sc.fit_transform(X_train),
                            columns=X_train.columns
                            )

X_test_sc = pd.DataFrame(
                            sc.transform(X_test),
                            columns=X_test.columns
                            )
rmse_sc = mean_squared_error(y_test, y_pred, squared=False)
print(rmse_sc)

出力:
0.24239129822702232

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html

正規化

正規化は各特徴量が 0 ~ 1 に収まるようにする処理です。

下記のように、最小値との差額を最大値と最小値の差額で割って算定します。

\begin{aligned} \frac{x^i - x^{min}}{x^{max} - x^{min}} \end{aligned}
nl = MinMaxScaler()

X_train_mm = pd.DataFrame(
                            nl.fit_transform(X_train),
                            columns=X_train.columns
                            )

X_test_mm = pd.DataFrame(
                            nl.transform(X_test),
                            columns=X_test.columns
                            )

rmse_mm = mean_squared_error(y_test, y_pred, squared=False)
print(rmse_mm)

出力:
0.25470676902648787

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html

正規化よりも標準化のほうが精度がよくなっています。
分散を計算にいれておりデータの分布を反映しているから、というところでしょうか。

RMSE
標準化・正規化前 0.2429
標準化後 0.2424
正規化後 0.2547

5日目は以上になります、最後までお読みいただきありがとうございました。

Discussion