0Pricing
Learn AI with Python · レッスン

特徴量スケーリング:正規化と標準化

MinMaxScaler、StandardScaler、RobustScaler の使い分けと、その重要性を学びます。

「特徴量スケーリング:正規化と標準化」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

特徴量をスケーリングする理由

多くのアルゴリズムは、特徴量の大きさに影響されます。0から1,000,000までの特徴量は、距離ベースまたは勾配ベースのモデルでは、0から1までの特徴量を圧倒してしまいます。スケーリングによって、特徴量を比較可能な範囲に揃えます。

スケーリングが必要なモデル

スケーリングは、KNN、SVM、k-means、PCA、および線形回帰・ロジスティック回帰やニューラルネットワークなどの勾配降下法を使うモデルで重要です。ランダムフォレストや勾配ブースティングなどの木ベースのモデルはスケール不変なので、スケーリングは必要ありません。

正規化:MinMaxScaler

Min-max正規化は、各特徴量を通常0から1の固定範囲に再スケーリングします。計算式は(x - min) / (max - min)です。分布の形状は維持されます。

from sklearn.preprocessing import MinMaxScaler
import numpy as np
X = np.array([[10.0], [20.0], [30.0], [40.0]])
scaler = MinMaxScaler()
print(scaler.fit_transform(X).ravel())   # [0. 0.333 0.667 1.]

標準化:StandardScaler

標準化は、(x - mean) / stdによって各特徴量の平均を0、分散を1にします。結果はzスコアになり、値は中心化されますが、範囲は制限されません。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
Xs = scaler.fit_transform(X)
print(Xs.ravel())
print(Xs.mean(), Xs.std())   # ~0 and ~1

MinMaxとStandardの比較

値を一定の範囲に収める必要がある場合(画像のピクセル値やニューラルネットワークの入力など)はMinMaxを使用してください。アルゴリズムが、おおむね0を中心とするデータを前提とする場合(PCA、SVM、線形モデルなど)はStandardを使用してください。MinMaxは外れ値の影響をより受けやすくなります。

外れ値に対するRobustScaler

RobustScalerは中央値を中心とし、IQRでスケーリングします。どちらも外れ値の影響を受けにくいため、極端な値が他のスケーラーの結果を歪める場合に適しています。

from sklearn.preprocessing import RobustScaler
Xo = np.array([[1.0], [2.0], [3.0], [4.0], [100.0]])
print(RobustScaler().fit_transform(Xo).ravel())

fitとtransform

スケーラーはfitでパラメータ(最小値・最大値、または平均・標準偏差)を学習し、transformでそれらを適用します。fit_transformを使うと、両方を1回の呼び出しで実行できます。

scaler = StandardScaler()
scaler.fit(X)          # learns mean and std
Xs = scaler.transform(X)   # applies them

鉄則:トレーニングデータだけでfitする

必ずトレーニングセットでfitしてから、学習したパラメータを使ってテストセットにはtransformだけを実行してください。テストデータでfitすると、その情報がモデルに漏洩します。

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)   # transform only!

テストデータでfitしてはいけない理由

テストセットを含む統計量でスケーリングすると、本来見てはいけない情報を評価時に使うことになり、これはデータリーケージです。その結果、性能を楽観的に見積もった、信頼できない評価になります。

逆変換

スケーラーはinverse_transformで処理を元に戻せます。これは、スケーリングした予測値を報告用に元の単位へ戻す際に便利です。

original = scaler.inverse_transform(X_train_scaled)
# recovers the pre-scaled values

目的変数のスケーリング

分類では通常、目的変数ではなく特徴量をスケーリングします。回帰では目的変数もスケーリングすることがありますが、その場合は誤差を報告する前に予測値を逆変換することを忘れないでください。

理解度チェック

スケーリングに関する知識を確認しましょう。

まとめ

スケーリングのツールキット:

  • 距離ベース・勾配ベースのモデルではスケーリングが重要です。木ベースのモデルは影響を受けません
  • MinMaxScaler -> 0..1の範囲に制限;StandardScaler -> 平均0、分散1
  • RobustScalerは中央値とIQRを使用し、外れ値に頑健です
  • トレーニングデータには必ずfit_transformを使い、テストデータにはtransformだけを使ってください(リーケージを回避します)

よくある質問

「特徴量スケーリング:正規化と標準化」レッスンは無料ですか?

はい。「特徴量スケーリング:正規化と標準化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「特徴量スケーリング:正規化と標準化」で何を学びますか?

MinMaxScaler、StandardScaler、RobustScaler の使い分けと、その重要性を学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「特徴量スケーリング:正規化と標準化」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 外れ値の検出と除去
  2. カテゴリ変数のエンコーディング
  3. 特徴量スケーリング:正規化と標準化
  4. 前処理パイプラインの構築
← Learn AI with Pythonに戻る