【scikit-learn】特徴量スケーリングの意味と使い方について

はるか
はるか
特徴量スケーリング…重要。
ふゅか
ふゅか
違うスケールのデータを調整するのがポイントだよね!

1. Scikit-learnの特徴量スケーリング

機械学習のモデルを構築する際、特徴量スケーリング(Feature Scaling)は非常に重要な工程です。データセット内の特徴量(各列のデータ)が異なるスケールを持っている場合、スケーリングを行うことでモデルの性能を向上させたり、学習を安定させたりすることができます。この記事では、PythonライブラリであるScikit-learnを使用して、特徴量スケーリングの基本とその使い方を解説します。

1.1. 特徴量スケーリングとは?

特徴量スケーリングとは、データの値を統一した範囲やスケールに変換する処理のことです。例えば、以下のようなデータを考えてみてください。

特徴量A(cm) 特徴量B(kg)
150 50
160 60
170 70

特徴量Aは「身長(cm)」、特徴量Bは「体重(kg)」を表しています。この場合、身長と体重の単位や値の範囲が異なるため、そのまま使うとモデルが特定の特徴量に過剰反応したり、正しく学習できなかったりする可能性があります。

1.2. 特徴量スケーリングが必要なケース

  • 距離ベースのアルゴリズム
    k近傍法(k-NN)やサポートベクターマシン(SVM)など、データ間の距離を計算するアルゴリズムでは、特徴量のスケールが異なると誤差が生じます。
  • 勾配降下法を使用するアルゴリズム
    線形回帰やニューラルネットワークなど、勾配降下法で最適化を行うモデルでは、特徴量のスケールが大きく異なると収束が遅れることがあります。

2. Scikit-learnを使った特徴量スケーリング

Scikit-learnには、簡単に特徴量スケーリングを行うためのツールが用意されています。以下に、主なスケーリング方法を紹介します。

2.1. 標準化(StandardScaler)

標準化では、データの平均を0、標準偏差を1にスケーリングします。

$$z = \frac{x – \mu}{\sigma}$$

  • $x$:元のデータ
  • $\mu$:平均
  • $\sigma$:標準偏差

コード例:

from sklearn.preprocessing import StandardScaler
import numpy as np

# サンプルデータ
data = np.array([[150, 50], [160, 60], [170, 70]])

# スケーラーを適用
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

print("標準化されたデータ:")
print(scaled_data)
はるか
はるか
標準化は平均0、標準偏差1にスケーリングする方法。

2.2. 最小最大スケーリング(MinMaxScaler)

最小値を0、最大値を1に変換するスケーリング方法です。データの値が特定の範囲内に収まるように調整します。

$$x’ = \frac{x – \text{min}(x)}{\text{max}(x) – \text{min}(x)}$$

コード例:

from sklearn.preprocessing import MinMaxScaler

# サンプルデータ
data = np.array([[150, 50], [160, 60], [170, 70]])

# スケーラーを適用
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data)

print("最小最大スケーリングされたデータ:")
print(scaled_data)
はるか
はるか
最小値を0、最大値を1に。

2.3. ロバストスケーリング(RobustScaler)

ロバストスケーリングは外れ値(極端な値)の影響を軽減する方法です。データを四分位範囲(IQR)に基づいてスケーリングします。

from sklearn.preprocessing import RobustScaler

# サンプルデータ
data = np.array([[150, 50], [160, 60], [1000, 70]])  # 外れ値を含む

# スケーラーを適用
scaler = RobustScaler()
scaled_data = scaler.fit_transform(data)

print("ロバストスケーリングされたデータ:")
print(scaled_data)
はるか
はるか
ロバストスケーリングは外れ値に強い。
ふゅか
ふゅか
外れ値があっても影響を抑えるんだね!それなら異常値が混じったデータでも安心!
PR