SVM(サポートベクターマシン)についてまとめてみました

サポートベクターマシン（Support Vector Machine, SVM）は、分類や回帰分析に用いられる強力な機械学習アルゴリズムで、特に分類問題で高い性能を発揮します。SVMは、与えられたデータを線形または非線形に分類するための「最適な超平面（分離面）」を見つけることを目的としています。

## SVMの基本的な考え方

SVMの基本アイデアは、データポイントを分類するために「マージンが最大化される」ような超平面を見つけることです。SVMでは、2つのクラス間の境界から最も近いデータポイント（サポートベクター）までの距離が最大化されるように分離面を設計します。これにより、分類の信頼性を高め、汎化性能が向上します。

### SVMの仕組み

#### 1. 線形分離
データが線形に分離可能な場合、SVMは次のように「最適な超平面」を見つけます：
￼
ここで、￼ は超平面の法線ベクトル、￼ はデータポイントの特徴ベクトル、￼ はバイアス項です。この超平面を基準に、各クラスのデータポイントが区別されます。
#### 2. サポートベクトル
サポートベクトルは、マージンの端に位置するデータポイントで、これらのデータポイントが分離面の位置を決定します。サポートベクトル以外のデータは、分類に影響を与えません。
#### 3.	最大マージン
分離面とサポートベクトルとの距離（マージン）を最大化することで、SVMは新しいデータに対しても分類精度が高くなるようにします。これは、過剰適合を防ぎ、モデルの汎化性能を向上させるためです。

### 非線形分離とカーネルトリック

実際のデータは、必ずしも線形に分離できるとは限りません。このような場合には、SVMは「カーネルトリック（Kernel Trick）」を用いることで、データを高次元の空間にマッピングし、そこで線形分離を行います。カーネル関数を使用することで、実際に高次元にマッピングすることなく、データの内積計算だけで済ませることができます。

### 代表的なカーネル関数
•	線形カーネル：データが線形に分離できる場合に使用します。
•	多項式カーネル：データの非線形性が多項式で表現できる場合に使用します。
•	ガウシアン（RBF）カーネル：最も一般的なカーネルで、データの複雑な非線形性を扱えます。
•	シグモイドカーネル：ニューラルネットワークと類似したカーネルで、特定の非線形性を表現します。

### ソフトマージンSVM

SVMは、全てのデータポイントが完全に分離されない場合にも対応できます。この場合、ソフトマージンを導入し、少しの誤分類を許容することで、モデルの柔軟性を持たせます。これにより、ノイズや外れ値を含むデータでも適用可能です。

ソフトマージンの調整は、正則化パラメータ ￼ によって行われます。￼の値を高くすると誤分類が減りますが、過剰適合のリスクが増えます。一方、￼を小さくするとマージンが広がり、過剰適合のリスクが減りますが、誤分類が増える可能性があります。

## SVMの評価指標

SVMを評価するためには、一般的な分類モデルと同様に以下の指標が用いられます：

•	正解率（Accuracy）：正しく分類されたデータの割合。
•	精度（Precision）：予測された正例のうち、実際に正例である割合。
•	再現率（Recall）：実際の正例のうち、正しく予測された割合。
•	F1スコア：精度と再現率の調和平均。

正解率（Accuracy）、精度（Precision）、再現率（Recall）、F1スコアの計算とその意味をわかりやすくするために、「混同行列（Confusion Matrix）」を用いた説明を行います。以下の表を基に、それぞれの指標について詳しく解説します。

### 混同行列（Confusion Matrix）

以下は、二値分類問題における混同行列の形式です：

|                | **予測：正例 (Positive)** | **予測：負例 (Negative)** |
|----------------|----------------------------|----------------------------|
| **実際：正例 (Positive)** | 真陽性 (TP)                      | 偽陰性 (FN)                      |
| **実際：負例 (Negative)** | 偽陽性 (FP)                      | 真陰性 (TN)                      |

- **TP（True Positive）**: 実際に正例であり、正例と予測されたデータ。
- **FP（False Positive）**: 実際には負例だが、正例と予測されたデータ。
- **FN（False Negative）**: 実際には正例だが、負例と予測されたデータ。
- **TN（True Negative）**: 実際に負例であり、負例と予測されたデータ。

---

### 各指標の計算式と説明

#### 1. **正解率（Accuracy）**

$$ \[
\text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{FP} + \text{FN} + \text{TN}}
\]
$$

- **意味**: 全体のデータのうち、正しく分類されたデータの割合。
- **適用例**: クラス分布が均等な場合に有効。ただし、不均衡データでは指標として適さない場合があります。

---

#### 2. **精度（Precision）**
$$
\[
\text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}}
\]
$$
- **意味**: モデルが正例と予測したデータのうち、実際に正例である割合。
- **適用例**: 偽陽性（FP）を避けたい場合に重要（例：スパムメール検出）。

---

#### 3. **再現率（Recall）**
$$
\[
\text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}}
\]
$$
- **意味**: 実際の正例データのうち、正しく正例と予測された割合。
- **適用例**: 偽陰性（FN）を避けたい場合に重要（例：病気の診断）。

---

#### 4. **F1スコア**
$$
\[
\text{F1 Score} = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}
\]
$$
- **意味**: 精度と再現率のバランスを取った指標。
- **適用例**: 精度と再現率のどちらも重視したい場合に有効。

---

### 数値例での解説

以下の例を用いて具体的に計算します：

|                | **予測：正例 (Positive)** | **予測：負例 (Negative)** |
|----------------|----------------------------|----------------------------|
| **実際：正例 (Positive)** | 50（TP）                          | 10（FN）                          |
| **実際：負例 (Negative)** | 5（FP）                           | 35（TN）                          |

1. **正解率（Accuracy）**
 $$  \[
   \text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{FP} + \text{FN} + \text{TN}} = \frac{50 + 35}{50 + 5 + 10 + 35} = 0.85
   \]　$$
   **正解率は85%** です。

2. **精度（Precision）**
$$   \[
   \text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} = \frac{50}{50 + 5} = 0.91
   \]　$$
   **精度は91%** です。

3. **再現率（Recall）**
$$   \[
   \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} = \frac{50}{50 + 10} = 0.83
   \] $$
   **再現率は83%** です。

4. **F1スコア**
$$   \[
   \text{F1 Score} = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} = 2 \cdot \frac{0.91 \cdot 0.83}{0.91 + 0.83} = 0.87
   \] $$
   **F1スコアは87%** です。

---

### まとめ表

| 指標         | 計算式                          | 値    | 説明                                                                                   |
|--------------|---------------------------------|-------|---------------------------------------------------------------------------------------|
| 正解率（Accuracy） | $$ \( \frac{\text{TP} + \text{TN}}{\text{TP} + \text{FP} + \text{FN} + \text{TN}} \)$$ | 85%   | 全体のうち正しく分類された割合                                                       |
| 精度（Precision）   |$$ \( \frac{\text{TP}}{\text{TP} + \text{FP}} \) $$                            | 91%   | 正例と予測されたデータの中で正しい割合                                               |
| 再現率（Recall）     |$$ \( \frac{\text{TP}}{\text{TP} + \text{FN}} \)  $$                           | 83%   | 実際の正例の中で正しく予測された割合                                                 |
| F1スコア        |$$ \( 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} \) $$ | 87%   | 精度と再現率のバランスを取った指標                                                   |

---

### 適用シナリオ
- **正解率**：全体のパフォーマンスをざっくり評価。
- **精度**：誤警報（FP）を減らしたい場合。
- **再現率**：見逃し（FN）を減らしたい場合。
- **F1スコア**：精度と再現率のバランスを重視したい場合。

## SVMの利点と欠点

### 利点

•	高い分類性能：特に高次元データや非線形データに対して強力な分類性能を発揮します。
•	過剰適合の抑制：最大マージンを持つ分離面により、汎化性能が高まります。
•	高次元データへの適用：高次元データでも効率的に分類が可能で、数少ない特徴量でも安定して動作します。

### 欠点
•	計算コストが高い：特にデータ量が多い場合、計算量が増えやすいです。
•	解釈が難しい：モデルの解釈が他の単純なモデルと比べて難しく、ブラックボックス化しがちです。
•	調整が必要：カーネルの選択やパラメータ ￼ の調整がモデル性能に大きく影響します。

## SVMの応用例
•	画像分類：画像の特徴量を用いた分類（例：顔認識、手書き数字認識など）。
•	テキスト分類：自然言語処理におけるスパムフィルタリングや感情分析など。
•	バイオインフォマティクス：遺伝子データを用いた病気の予測や分類。

## まとめ

SVMは、特に分類タスクで非常に高い性能を発揮するモデルで、線形および非線形データに対応可能です。最適な分離面とカーネルトリックを用いることで、高次元データや非線形データの分類を効率的に行います。適切なカーネル関数やパラメータを選択することで、精度を高めつつ過剰適合を防ぐことができ、幅広い分野で応用されています。