😺
【5日目】標準化、正規化をやってみる【2021アドベントカレンダー】
2021年1人アドベントカレンダー(機械学習)、5日目の記事になります。
テーマは 標準化、正規化になります。
標準化、正規化は、特徴量がもつ値の重みを平等にするための手法です。
やっておいてなんですが、決定木は各特徴量内の分割を繰り返す特性から、標準化・正規化の影響を受けにくい傾向にあります。
Colab のコードはこちら
通常のlightGBMの評価結果(RMSE、以下同様)
rmse = mean_squared_error(y_test, y_pred, squared=False)
print(rmse)
出力:
0.24290787668071306
標準化
標準化は各特徴量の平均を0、分散を1に収まるように変換する処理です。
下記のように、平均値との差額を標準偏差で割って算定します。
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
正規化
正規化は各特徴量が 0 ~ 1 に収まるようにする処理です。
下記のように、最小値との差額を最大値と最小値の差額で割って算定します。
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
正規化よりも標準化のほうが精度がよくなっています。
分散を計算にいれておりデータの分布を反映しているから、というところでしょうか。
RMSE | |
---|---|
標準化・正規化前 | 0.2429 |
標準化後 | 0.2424 |
正規化後 | 0.2547 |
5日目は以上になります、最後までお読みいただきありがとうございました。
Discussion