正規化と標準化の違いとその実装
データ前処理の段階で、正規化と標準化は機械学習モデルの性能を向上させるために重要なステップです。これらの手法を用いることで、異なるスケールのデータを整え、モデルが効果的に学習できるようにします。本記事では、正規化と標準化の違いを解説し、それぞれの実装方法について紹介します。
正規化とは
正規化(Normalization)は、データを0から1の範囲にスケーリングする手法です。特に、距離ベースのアルゴリズム(例: K近傍法、SVMなど)では、異なるスケールのデータを揃えるために正規化が重要です。
正規化の実装
MinMaxScaler
を用いることで、正規化を簡単に行うことができます。
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
# サンプルデータの作成
data = {'col1': [10, 20, 30], 'col2': [100, 200, 300]}
df = pd.DataFrame(data)
# MinMaxScalerを使用した正規化
scaler = MinMaxScaler()
df_normalized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print(df_normalized)
このコードでは、MinMaxScaler
を使用して、データを0から1の範囲にスケーリングしています。各列の最大値を1、最小値を0にすることでスケールを揃えています。
標準化とは
標準化(Standardization)は、データを平均0、標準偏差1に変換する手法です。正規分布に基づいたモデル(例: ロジスティック回帰、線形回帰など)では、標準化を行うことで学習効率が向上します。
標準化の実装
StandardScaler
を使用して、データを標準化できます。
from sklearn.preprocessing import StandardScaler
# StandardScalerを使用した標準化
scaler = StandardScaler()
df_standardized = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
print(df_standardized)
このコードでは、StandardScaler
を使用して、各列のデータを標準化しています。データの平均が0、標準偏差が1になるように変換されます。
正規化と標準化の違い
正規化と標準化はどちらもデータのスケールを揃える手法ですが、その適用方法と目的が異なります。
正規化 | 標準化 |
---|---|
データを0から1の範囲にスケーリング | データを平均0、標準偏差1にスケーリング |
距離ベースのアルゴリズムで使用 | 正規分布に基づいたモデルで使用 |
データの最小値と最大値に依存 | データの平均と標準偏差に依存 |
正規化と標準化を使うべき状況
正規化と標準化のどちらを使うべきかは、データの特性や使用するアルゴリズムによって異なります。
- 正規化を使用する状況: 距離ベースのアルゴリズム(K近傍法、SVMなど)では、正規化が推奨されます。これにより、各特徴量が同じスケールに揃えられ、距離の計算に偏りが出ないようにします。
- 標準化を使用する状況: ロジスティック回帰や線形回帰など、データが正規分布に近い場合や、モデルが正規分布に基づく場合に標準化が有効です。
正規化と標準化を行う際の注意点
正規化や標準化を行う際には、以下の点に注意する必要があります。
- 訓練データとテストデータに同じスケーリングを適用する必要があります。テストデータに新しいスケーリングを行うと、モデルの評価が不正確になる可能性があります。
- スケーリングする前に、欠損値や異常値がある場合は、先に処理しておくことが重要です。異常値があると、スケーリングが歪む可能性があります。
まとめ
正規化と標準化は、データをモデルに適した形に整えるための重要な前処理です。正規化はデータを0から1にスケーリングし、距離ベースのアルゴリズムに有効です。一方、標準化はデータを平均0、標準偏差1にスケーリングし、正規分布を仮定するモデルに有効です。正しく手法を選び、データ前処理を行うことで、機械学習モデルの性能を最大限に引き出すことができます。