Menu
CoddyTech

サポートベクターマシン(SVM)

Coddyの「機械学習入門」コースのレッスン 18/19。

サポートベクターマシン(SVM)は、分類と回帰の両方のタスクに使用される、強力で汎用性の高い教師あり機械学習アルゴリズムです。しかし、一般的には分類問題でより多く使用されます。SVMは高い精度を提供し、高次元の特徴空間でも優れたパフォーマンスを発揮するため、画像認識からバイオインフォマティクスまで幅広い用途に適しています。

出典: wikipedia

SVMアルゴリズムの主な目的は、特徴空間内のクラスを最もよく分離する最適な超平面(2次元空間では直線)を見つけることです。SVMモデルは、データを空間内の点として表現し、異なるカテゴリのデータが、できるだけ広い明確なギャップによって分割されるようにマッピングします。

 

  • 超平面(Hyperplane): これは基本的にクラスを分離する決定境界です。2次元では、この超平面は直線ですが、より高次元ではより複雑になる可能性があります。
  • サポートベクター(Support Vectors): これらは超平面に最も近いデータポイントであり、超平面の位置を定義する上で極めて重要です。SVM分類器はこれらのポイントに大きく影響されるため、Support Vector Machine(サポートベクターマシン)という名前が付けられています。
  • マージン(Margin): 異なるクラスの最も近いデータポイントを通る2本の線の間のギャップです。これはクラス間の分離の尺度と考えることができます。マージンをできるだけ広く確保することは、SVMのトレーニングにおける主要な目的です。

SVMの種類:

  • 線形SVM(Linear SVM): データが線形分離可能な場合、1本の直線を使用してクラスを分離できます。このシナリオでは線形SVMを使用します。
  • 非線形SVM(Non-linear SVM): データが線形分離可能でない場合、SVMはカーネルトリックと呼ばれる手法を使用して、入力空間を超平面で分離できる高次元空間に変換します。カーネルトリックは、データをクラス間に明確なマージンがある別の次元に変換することを含みます。これにより、SVMは非線形問題を解決できるようになります。一般的なカーネルには以下が含まれます。
    • 線形カーネル(Linear Kernel): データが線形分離可能な場合に使用されます。
    • 多項式カーネル(Polynomial Kernel): 元の特徴空間を指定された次数の多項式特徴空間に変換します。
    • ガウスカーネル(Gaussian Kernel): グループにクラスター化される非線形データに役立ちます。特徴空間を高次元にマッピングします。
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

challenge icon

チャレンジ

簡単

サポートベクターマシン(SVM)は、カーネル関数を利用してデータを高次元空間に変換し、分類を容易にします。このプロセスは「カーネルトリック」として知られています。これにより、SVMは非線形な分類や回帰問題を効率的に解決することができます。

ここでは、データ内の曲線的な境界を可能にする多項式カーネルについて探求します。これはデータを指定された次数 d に引き上げます。このカーネルは、クラスラベルと属性の間の関係が多項式的である場合に特に有用です。
File:Svm 8 polinomial.JPG

出典: wikipedia

2つのリスト(x, y)、次数(d)、および係数(c)を受け取り、多項式カーネルを返す polynomial_kernel という名前の関数を作成してください。

{\displaystyle K(x,y)=(x^{\mathsf {T}}y+c)^{d}} → (x の転置と y のドット積に c を加えたもの) の d 乗です。

自分で試してみよう

import numpy as np
def polynomial_kernel(x, y, d, c):
    x_arr = np.array(x)
    y_arr = np.array(y)
    # ここにコードを記述してください

機械学習入門のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ