Support Vector Machines (SVM) は強力な機械学習アルゴリズムの1つで、分類や回帰に使用されます。以下にSVMの主要な特徴と概念をまとめます:
SVMの基本概念
- 目的:
SVMの主な目的は、異なるクラスのデータポイントを最大マージンで分離する超平面を見つけることです。 - 超平面:
wTx+b=0wTx+b=0
ここで、wは重みベクトル、xは入力ベクトル、bはバイアス項です。 - マージン:
クラスを分離する超平面と、それに最も近いデータポイント(サポートベクトル)との距離。 - サポートベクトル:
決定境界に最も近いデータポイントで、分類に最も重要な役割を果たします。
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の利点
- 高次元空間でも効果的に機能する
- メモリ効率が良い(サポートベクトルのみを使用)
- さまざまなカーネル関数を使用して柔軟性が高い
SVMの欠点
- 大規模データセットに対しては計算コストが高い
- ノイズの多いデータセットでは性能が低下する可能性がある
- 確率推定を直接提供しない
実装例 (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表記を使用できます:
- 最適化問題の表現:
tex
$$ \min_{w,b} \frac{1}{2} ||w||^2 $$
- 制約条件:
tex
$$ y_i(w^T x_i + b) \geq 1, \quad \forall i $$
- ソフトマージンSVMの目的関数:
tex
$$ \min_{w,b,\xi} \frac{1}{2} ||w||^2 + C \sum_{i=1}^n \xi_i $$
- ソフトマージンSVMの制約条件:
tex
$$ y_i(w^T x_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0, \quad \forall i $$
- カーネル関数(例:RBFカーネル):
tex
$$ K(x_i, x_j) = \exp(-\gamma ||x_i - x_j||^2) $$
- 双対問題の目的関数:
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) $$
- 双対問題の制約条件:
tex
$$ 0 \leq \alpha_i \leq C, \quad \sum_{i=1}^n y_i \alpha_i = 0 $$
これらの数式をObsidianのMarkdownファイル内に直接貼り付けることで、数学的表現を美しく表示することができます。Obsidianでは、二重ドル記号($$)で囲まれた部分がLaTeX数式として解釈され、適切にレンダリングされます。