機械学習やデータ分析を始める際に「正規化ってどうやってやるの?」「Pythonでの実装はどう書けばいいの?」という疑問を持つ方は多いのではないでしょうか。
この記事では正規化の具体的な手順と実装方法をMin-Max正規化とz-score標準化の両面から、実際のコード例とともにわかりやすく解説していきます。
正規化のやり方はMin-Max正規化とz-score正規化の2種類が基本である
それではまず、正規化の基本的なやり方の全体像について解説していきます。
データの正規化において最もよく使われる手法はMin-Max正規化(値を0〜1に変換)とz-score標準化(平均0・標準偏差1に変換)の2種類です。
どちらの手法も「スケールの異なる特徴量を揃えて機械学習モデルが公平に学習できるようにする」という共通の目的を持ちます。
正規化の実施前に必ず行うべき重要な注意点として、学習データとテストデータで同じ正規化パラメーター(最小値・最大値または平均・標準偏差)を使うことが挙げられます。
テストデータ独自のパラメーターで正規化してしまうと、モデルの評価に情報リークが生じるため、必ず学習データのパラメーターをテストデータにも適用する必要があります。
Min-Max正規化の手順と実装
続いては、Min-Max正規化の具体的な手順と実装方法について確認していきます。
手動計算での手順
Min-Max正規化の計算手順
手順1:データの最小値(min)と最大値(max)を求める
手順2:各データ値に対して (値 – min) / (max – min) を計算する
例:データ [10, 20, 30, 40, 50]の場合
min=10・max=50として計算:
10→(10-10)/(50-10)=0.0 、30→(30-10)/(50-10)=0.5 、50→(50-10)/(50-10)=1.0
PythonのsciKit-learnを使った実装
scikit-learnでのMin-Max正規化実装例
from sklearn.preprocessing import MinMaxScaler
import numpy as np
data = np.array([[10], [20], [30], [40], [50]])
scaler = MinMaxScaler()
scaler.fit(X_train) # 学習データでフィット
X_train_normalized = scaler.transform(X_train)
X_test_normalized = scaler.transform(X_test) # 学習データのパラメーターで変換
z-score標準化の手順と実装
続いては、z-score標準化の具体的な手順と実装方法について確認していきます。
手動計算での手順
z-score標準化の計算手順
手順1:データの平均(μ)と標準偏差(σ)を求める
手順2:各データ値に対して (値 – μ) / σ を計算する
例:データ [10, 20, 30, 40, 50]の場合
平均μ=30・標準偏差σ≈14.14として計算:
10→(10-30)/14.14≈-1.41 、30→(30-30)/14.14=0.0 、50→(50-30)/14.14≈1.41
scikit-learnでの実装
scikit-learnでのz-score標準化実装例
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train) # 学習データで平均・標準偏差を計算
X_train_standardized = scaler.transform(X_train)
X_test_standardized = scaler.transform(X_test) # 学習データの統計量で変換
Excelでの正規化のやり方
続いては、ExcelでMin-Max正規化を行う方法について確認していきます。
ExcelのMIN・MAX関数を使った正規化
ExcelでMin-Max正規化を行う場合は、MIN関数とMAX関数を使った数式で計算できます。
ExcelでのMin-Max正規化の計算式
A列にデータがA2:A11にある場合、B2セルに以下の数式を入力します。
=(A2-MIN($A$2:$A$11))/(MAX($A$2:$A$11)-MIN($A$2:$A$11))
絶対参照($)をつけることで数式を下にコピーしてもMIN・MAXの範囲がずれません。
z-score標準化はExcelの「STANDARDIZE関数」を使って「=STANDARDIZE(A2, AVERAGE($A$2:$A$11), STDEV($A$2:$A$11))」と記述することで計算できます。
正規化時の注意事項
続いては、正規化を実施する際に注意すべき重要なポイントについて確認していきます。
外れ値の扱い
Min-Max正規化は最小値・最大値に大きく依存するため、外れ値があると正規化後の値が極端に偏ることがあります。
外れ値の除去や外れ値に頑健なRobustScalerの使用を検討することが重要です。
カテゴリ変数への適用
数値に見えてもカテゴリとして扱うべき変数(郵便番号・電話番号など)には正規化を適用すべきではありません。
正規化はあくまで連続値の数値変数に適用する前処理手法です。
まとめ
正規化のやり方はMin-Max正規化とz-score標準化が基本であり、学習データのパラメーターをテストデータにも適用する点が最も重要な注意事項です。
Pythonではscikit-learnのMinMaxScalerとStandardScalerで簡単に実装でき、Excelではmin・max・AVERAGE・STDEV・STANDARDIZE関数で計算できます。
外れ値の有無とアルゴリズムの特性に合わせて適切な正規化手法を選び、データ前処理を正確に行うことで機械学習モデルの性能向上につながるでしょう。
まずは小さなデータセットで手動計算を試してみることで、正規化の仕組みを実感してみてください。