データ分析や機械学習では、データの前処理が重要なステップです。
その中でも「標準化」と「正規化」はよく使われる手法ですが、混同されがちです。
本記事では、それぞれの意味、目的、具体的な方法、そして使い分けについてまとめます。
データの標準化(Standardization)
定義
標準化とは、データの平均を0、分散を1にスケーリングする処理です。具体的には以下の数式で計算します。
$$z = \frac{x – \mu}{\sigma}$$
- \(x\): 元のデータ
- \(\mu\): データ全体の平均
- \(\sigma\): データ全体の標準偏差
目的
- スケールの統一
異なる単位やスケールを持つ特徴量を比較可能にする。 - モデルの収束性向上
勾配降下法を使うアルゴリズムでは、標準化により学習速度が向上します。
使用例
- 機械学習モデル(線形回帰、SVM、ロジスティック回帰など)
- データの分布が正規分布に近い場合に効果的
実装例(Python)
from sklearn.preprocessing import StandardScaler
import numpy as np
data = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)
print(standardized_data)
データの正規化(Normalization)
定義
正規化とは、データを一定の範囲(通常は[0, 1])にスケーリングする処理です。以下の数式で計算します。
$$x_{\text{norm}} = \frac{x – x_{\min}}{x_{\max} – x_{\min}}$$
- \(x_{\min}\): データの最小値
- \(x_{\max}\): データの最大値
目的
- 範囲の統一
データを固定範囲に収めることで、スケール依存のアルゴリズムで安定性を向上させる。 - 解釈の容易化
特徴量間での比較が直感的になる。
使用例
- クラスタリング(K-meansなど)
- ニューラルネットワーク(特に入力層での使用)
- データの分布が正規分布に従わない場合に適用
実装例(Python)
from sklearn.preprocessing import MinMaxScaler
import numpy as np
data = np.array([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)
print(normalized_data)
標準化と正規化の違い
特徴 | 標準化 | 正規化 |
---|---|---|
定義 | 平均0、分散1にスケーリング | データを[0, 1]にスケーリング |
目的 | 分布の形状を保つ | データ範囲の統一 |
使用場面 | 勾配降下法を使用するアルゴリズム | 範囲に敏感なアルゴリズム |
適用対象 | 特徴量単位 | データセット全体 |
使い分けのポイント
- 標準化を選ぶ場合
データが異なる単位を持つ場合や、アルゴリズムが距離や勾配を利用する場合に適しています。
例: SVM, PCA, ロジスティック回帰 - 正規化を選ぶ場合
データ範囲が重要な場合や、距離計算に敏感なアルゴリズムを使用する場合に適しています。
例: K-means, ニューラルネットワーク
注意点と課題
標準化の注意点
異常値(アウトライアー)に敏感です。
必要に応じて異常値を除去するか、ロバスト標準化を検討してください。
正規化の注意点
データがスパース(疎行列)の場合、正規化によって分布が偏る可能性があります。
まとめ
- 標準化
平均0、分散1に変換し、分布を均一化。 - 正規化
データを固定範囲に収めてスケールを統一。
データの前処理において「標準化」と「正規化」を正しく理解し、使い分けることが重要です。