タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

サイキットラーンで行う標準化と正規化の違いについて【前処理】

AI Python

t f B! P L

 

パソコンを使っている画像

サイキットラーンで分析を行う前に、データを標準化、正規化することで一般的ですが、

どちらを採用すればいいでしょうか?

〇データを標準化または正規化する主な目的

データを正規化または標準化する主な目的は、機械学習モデルの訓練プロセスを効果的にすることです。以下は、正規化や標準化が行われる理由のいくつかです。

 

・異なる尺度の特徴量の統一:

データセットには通常、異なる尺度や単位を持つ特徴量が含まれます。機械学習モデルは、特徴量の尺度が同じであることを前提としています。正規化や標準化を行うことで、異なる尺度の特徴量を同じスケールに揃え、モデルの学習プロセスを安定化させます。

・外れ値の影響の軽減:

標準化は外れ値の影響を軽減する傾向があります。外れ値があると、特徴量の平均や標準偏差が大きく影響を受け、モデルの性能が低下する可能性があります。標準化を行うことで、外れ値の影響を受けにくくなります。

・最適化アルゴリズムの収束速度の向上:

機械学習モデルの最適化アルゴリズムは、目的関数を最小化するために重みを更新していきます。特徴量が異なる尺度を持つ場合、収束するまでの時間がかかる可能性があります。正規化や標準化を行うことで、収束がより速く進みます。

・一部のアルゴリズムの要件:

一部の機械学習アルゴリズム、特に勾配ベースの最適化アルゴリズム(例: 確率的勾配降下法)は、特徴量が同じ尺度になっていることを前提としています。このようなアルゴリズムを使用する場合、正規化や標準化が必要です。

したがって、データを正規化または標準化することは、モデルの学習プロセスを効果的にするために重要です。どちらの手法を選択するかは、具体的なデータや問題によりますが、一般的には標準化がよく使用されます。

〇標準化と正規化のちがい

標準化(Standardization)と正規化(Normalization)は、データのスケーリング手法であり、特徴量を同じ尺度にすることで機械学習モデルの性能向上に寄与しますが、それぞれ異なるアプローチを取ります。

 

・標準化 (Standardization):

手法:

平均を0にし、標準偏差を1にするように変換します。

具体的には、各特徴量から平均を引いてから、標準偏差で割ります。

利点:

外れ値の影響を受けにくい。

正規分布に従うような形に変換されることが多い。

使用例:

主に回帰モデルやニューラルネットワークで使われることが多い。

・正規化 (Normalization):

手法:

特徴量を0から1の範囲に変換します。最小値を引いて、範囲で割ることで実現されます。

 利点:

特徴量の値を比較的小さな範囲に収めることができ、異なる尺度の特徴量を同じスケールに揃えます。

使用例:

k-NNk近傍法)やクラス分類アルゴリズムなどで使われることがあります。

どちらの手法を選ぶかは、具体的なデータや利用する機械学習モデルに依存します。標準化は外れ値に強く、正規分布に従うデータに対して有効です。正規化は値の範囲を特定の区間に制限したい場合に便利です。適切なスケーリング手法は、実際のデータやタスクによって異なるため、実験を通じて最適な手法を見つけることが重要です。

scikit-learnを使用した標準化の実装

標準化は、特徴量の平均を0にし、標準偏差を1にする変換を行う操作です。scikit-learnライブラリを使用して簡単に標準化を行うことができます。以下に、scikit-learnを使用した標準化の実装方法を示します。

 

from sklearn.preprocessing import StandardScaler

 

# データを作成(例)

data = [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]

 

# StandardScalerのインスタンスを作成

scaler = StandardScaler()

 

# データを標準化

scaled_data = scaler.fit_transform(data)

 

# 標準化されたデータを表示

print("標準化されたデータ:")

print(scaled_data)

この例では、StandardScaler クラスを使ってデータを標準化しています。

fit_transform メソッドは、平均と標準偏差を計算してデータを変換します。変換後のデータは scaled_data に格納されます。

 

標準化は通常、トレーニングデータセットに対して fit_transform を使用して平均と標準偏差を計算し、その後にテストデータセットなどの新しいデータに対して transform を使用して同じ変換を適用するという手順が一般的です。これにより、トレーニングデータセットとテストデータセットの尺度を揃えることができます。

 

# テストデータを標準化(トレーニングデータの平均と標準偏差を使用)

new_data = [[7.0, 8.0], [9.0, 10.0]]

scaled_new_data = scaler.transform(new_data)

 

# 標準化されたテストデータを表示

print("標準化されたテストデータ:")

print(scaled_new_data)

これで、トレーニングデータとテストデータが同じ変換で標準化されました。

scikit-learnを使用した正規化の実装

scikit-learnを使用して正規化(Normalization)を行うには、MinMaxScaler クラスを使用します。このクラスは、特徴量を指定された範囲(通常は0から1)にスケーリングします。以下に、scikit-learnを使用した正規化の実装例を示します。

 

from sklearn.preprocessing import MinMaxScaler

 

# データを作成(例)

data = [[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]

 

# MinMaxScalerのインスタンスを作成

scaler = MinMaxScaler()

 

# データを正規化

normalized_data = scaler.fit_transform(data)

 

# 正規化されたデータを表示

print("正規化されたデータ:")

print(normalized_data)

この例では、MinMaxScaler クラスを使ってデータを正規化しています。fit_transform メソッドは、最小値と最大値を計算してデータを変換します。変換後のデータは normalized_data に格納されます。

 

同様に、トレーニングデータセットとテストデータセットに同じ変換を適用するために、トレーニングデータセットに fit_transform を使用し、テストデータセットには transform を使用します。


# テストデータを正規化(トレーニングデータの最小値と最大値を使用)

new_data = [[7.0, 8.0], [9.0, 10.0]]

normalized_new_data = scaler.transform(new_data)

 

# 正規化されたテストデータを表示

print("正規化されたテストデータ:")

print(normalized_new_data)

これで、トレーニングデータとテストデータが同じ変換で正規化されました。

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ