更新:2024/12/05
【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