Support Vector Machines (SVM) は強力な機械学習アルゴリズムの1つで、分類や回帰に使用されます。以下にSVMの主要な特徴と概念をまとめます:

SVMの基本概念

  1. 目的:
    SVMの主な目的は、異なるクラスのデータポイントを最大マージンで分離する超平面を見つけることです。
  2. 超平面:
    wTx+b=0wTx+b=0
    ここで、wは重みベクトル、xは入力ベクトル、bはバイアス項です。
  3. マージン:
    クラスを分離する超平面と、それに最も近いデータポイント(サポートベクトル)との距離。
  4. サポートベクトル:
    決定境界に最も近いデータポイントで、分類に最も重要な役割を果たします。

SVMの数学的表現

最適化問題として表現すると:

$$ \min_{w,b} \frac{1}{2} ||w||^2 $$

制約条件:

$$ y_i(w^T x_i + b) \geq 1, \quad \forall i $$

ここで、$y_i$はクラスラベル(±1)、$x_i$は入力ベクトルです。

カーネルトリック

非線形の決定境界を扱うために、SVMはカーネル関数を使用して高次元空間にデータを射影します。一般的なカーネル関数には:

  • 線形カーネル: $K(x_i, x_j) = x_i^T x_j$
  • 多項式カーネル: $K(x_i, x_j) = (x_i^T x_j + r)^d$
  • RBF (ガウシアン) カーネル: $K(x_i, x_j) = \exp(-\gamma ||x_i - x_j||^2)$

SVMの利点

  1. 高次元空間でも効果的に機能する
  2. メモリ効率が良い(サポートベクトルのみを使用)
  3. さまざまなカーネル関数を使用して柔軟性が高い

SVMの欠点

  1. 大規模データセットに対しては計算コストが高い
  2. ノイズの多いデータセットでは性能が低下する可能性がある
  3. 確率推定を直接提供しない

実装例 (Python/scikit-learn)

python

from sklearn import svm
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# データの準備
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# SVMモデルの作成と学習
svm_model = svm.SVC(kernel='rbf', C=1.0)
svm_model.fit(X_train, y_train)

# 予測
y_pred = svm_model.predict(X_test)

# 精度の評価
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

SVMは、その理論的な基盤と実践的な性能の両方で、機械学習の重要なアルゴリズムの1つとなっています。

SVMの数学的表現をObsidianで記述する場合、以下のようなLaTeX表記を使用できます:

  1. 最適化問題の表現:

tex

$$ \min_{w,b} \frac{1}{2} ||w||^2 $$

  1. 制約条件:

tex

$$ y_i(w^T x_i + b) \geq 1, \quad \forall i $$

  1. ソフトマージンSVMの目的関数:

tex

$$ \min_{w,b,\xi} \frac{1}{2} ||w||^2 + C \sum_{i=1}^n \xi_i $$

  1. ソフトマージンSVMの制約条件:

tex

$$ y_i(w^T x_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0, \quad \forall i $$

  1. カーネル関数(例:RBFカーネル):

tex

$$ K(x_i, x_j) = \exp(-\gamma ||x_i - x_j||^2) $$

  1. 双対問題の目的関数:

tex

$$ \max_{\alpha} \sum_{i=1}^n \alpha_i - \frac{1}{2} \sum_{i,j=1}^n y_i y_j \alpha_i \alpha_j K(x_i, x_j) $$

  1. 双対問題の制約条件:

tex

$$ 0 \leq \alpha_i \leq C, \quad \sum_{i=1}^n y_i \alpha_i = 0 $$

これらの数式をObsidianのMarkdownファイル内に直接貼り付けることで、数学的表現を美しく表示することができます。Obsidianでは、二重ドル記号($$)で囲まれた部分がLaTeX数式として解釈され、適切にレンダリングされます。