Pythonにおける規格化 (Normalization) と正規化 (Standardization) の違い

# Pythonにおける規格化 (Normalization) と正規化 (Standardization) の違い

データを解析や機械学習に適した形に整える前処理として、「規格化」と「正規化」という手法が広く用いられます。これらはどちらもデータのスケーリング手法ですが、手法と適用目的が異なります。ここでは、両者の違いと使用例について説明します。

---

## 目次

1. [規格化 (Normalization) とは](#規格化-Normalization-とは)
2. [正規化 (Standardization) とは](#正規化-Standardization-とは)
3. [規格化と正規化の違い](#規格化と正規化の違い)
4. [使い分けのポイント](#使い分けのポイント)
5. [Pythonでの実装例](#Pythonでの実装例)
6. [まとめ](#まとめ)

---

## 規格化 (Normalization) とは

規格化は、データを特定の範囲（通常は0から1）に収める手法です。Min-Maxスケーリングとも呼ばれ、特徴量の最小値を0、最大値を1にスケーリングします。主に、以下のようなケースで用いられます。

- データを指定の範囲に収めて、異なるスケールの特徴量を揃えたい場合。
- 距離ベースのアルゴリズム（k近傍法、ニューラルネットワークなど）でデータの範囲が重要な場合。

**特徴:**

- データの最小値が0、最大値が1となるようスケーリングされます【1】。
- データの範囲が狭いと外れ値の影響を受けやすい傾向があります【2】。
- 元のデータ分布を保持します。

**Python実装例:**

```python
from sklearn.preprocessing import MinMaxScaler

# 規格化の例
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)
```

---

## 正規化 (Standardization) とは

正規化は、データの平均を0、標準偏差を1にスケーリングする手法です。正規分布に従うデータに特に適しており、データのばらつきを一定にすることで、異なるスケールの特徴量の影響を軽減します。

- 正規分布が期待されるアルゴリズム（サポートベクターマシン、ロジスティック回帰など）に有効です。
- 正規化により、特徴量の標準偏差が1に調整されるため、外れ値の影響を受けにくくなります【2】【3】。

**特徴:**

- 平均が0、標準偏差が1となるようスケーリングされます【1】。
- 外れ値の影響を受けにくく、データのスケールを統一するために役立ちます。

**Python実装例:**

```python
from sklearn.preprocessing import StandardScaler

# 正規化の例
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)
```

---

## 規格化と正規化の違い

| 比較項目       | 規格化 (Normalization)                    | 正規化 (Standardization)                    |
| -------------- | ---------------------------------------- | ------------------------------------------ |
| 目的           | データを指定範囲 (通常は0～1) に収める  | 平均を0、標準偏差を1に調整                |
| アルゴリズム適用例 | k近傍法、ニューラルネットワーク           | ロジスティック回帰、サポートベクターマシン |
| 外れ値の影響   | 受けやすい                               | 受けにくい                                 |
| データ分布     | 元のデータ分布を保持                     | 正規分布に適している                       |
| 特徴量のスケール | 絶対値の範囲で統一                       | 相対的な分布で統一                         |

---

## 使い分けのポイント

- **正規分布に近いデータ**: 正規化 (Standardization) が推奨されます【3】【4】。
- **範囲を限定したい場合**: 規格化 (Normalization) が有効です。たとえば、ニューラルネットワークやk近傍法では、範囲内でデータを扱う方が効果的です【2】。
- **外れ値が多い場合**: 外れ値の影響が少ない正規化 (Standardization) が向いています。
- **使用するアルゴリズムの特性に合わせる**: 距離ベースのアルゴリズム（例: k近傍法）では規格化が有効で、統計ベースのアルゴリズム（例: ロジスティック回帰）には正規化が有効です【4】。

---

## Pythonでの実装例

以下に、両手法を実装する例を示します。

```python
import numpy as np
from sklearn.preprocessing import MinMaxScaler, StandardScaler

# サンプルデータ
data = np.array([[1, 2], [2, 3], [4, 5], [6, 8], [10, 12]])

# 規格化
min_max_scaler = MinMaxScaler()
normalized_data = min_max_scaler.fit_transform(data)
print("規格化 (0〜1スケール):")
print(normalized_data)

# 正規化
standard_scaler = StandardScaler()
standardized_data = standard_scaler.fit_transform(data)
print("\n正規化 (平均0、標準偏差1):")
print(standardized_data)
```

このコードにより、`data` を 0〜1 の範囲に規格化した結果と、平均0・標準偏差1に正規化した結果を得られます。

---

## まとめ

規格化と正規化はどちらもデータのスケーリング手法ですが、その目的と適用ケースは異なります。データの特性とアルゴリズムの要件を理解し、適切なスケーリング方法を選択することが、精度や効率性の向上につながります。

---

## 参考文献

1. [Shiksha - Normalization vs Standardization](https://www.shiksha.com/online-courses/articles/normalization-and-standardization/)
2. [GeeksforGeeks - Normalization vs Standardization](https://www.geeksforgeeks.org/normalization-vs-standardization/)
3. [KDnuggets - Data Transformation](https://www.kdnuggets.com/2020/04/data-transformation-standardization-normalization.html)
4. [Towards Data Science - Normalization vs Standardization Explained](https://towardsdatascience.com/normalization-vs-standardization-explained-209e84d0f81e)
5. [DataCamp - Normalization vs Standardization](https://www.datacamp.com/tutorial/normalization-vs-standardization)

--- 

これで、Pythonでの規格化と正規化の違いや使い分けのポイントを把握できました。適切な手法を選び、精度の高い分析やモデル構築を実現しましょう。