logo

サポート ベクター マシン (SVM) アルゴリズム

サポート ベクター マシン (SVM) は、線形または非線形の分類、回帰、さらには外れ値検出タスクに使用される強力な機械学習アルゴリズムです。 SVM は、テキスト分類、画像分類、スパム検出、手書き識別、遺伝子発現分析、顔検出、異常検出などのさまざまなタスクに使用できます。 SVM は高次元のデータと非線形関係を管理できるため、さまざまなアプリケーションに適応可能で効率的です。

SVM アルゴリズムは、ターゲット フィーチャで利用可能なさまざまなクラス間の最大分離超平面を見つけようとするため、非常に効果的です。

第 3 正規形

サポートベクターマシン

サポート ベクター マシン (SVM) は、 教師あり機械学習 分類と回帰の両方に使用されるアルゴリズム。回帰問題とも言いますが、分類に最適です。 SVM アルゴリズムの主な目的は、特徴空間内の異なるクラスのデータ ポイントを分離できる、N 次元空間内の最適な超平面を見つけることです。超平面は、異なるクラスの最も近い点間のマージンが可能な限り最大になるように試みます。超平面の次元は、フィーチャの数によって異なります。入力フィーチャの数が 2 つの場合、超平面は単なる線になります。入力フィーチャの数が 3 つの場合、超平面は 2D 平面になります。特徴量が 3 つを超えると、想像するのが難しくなります。



2 つの独立変数 x を考えてみましょう1、 バツ2、もう 1 つの従属変数は青丸または赤丸のいずれかです。

線形分離可能なデータポイント

上の図から、複数の線があることが非常に明らかです (ここでの超平面は 2 つの入力フィーチャ x のみを考慮しているため、線です)1、 バツ2) データポイントを分離するか、赤と青の円の間で分類を行います。では、データ ポイントを分離する最適な線、または一般に最適な超平面を選択するにはどうすればよいでしょうか?

SVMはどのように機能しますか?

最適な超平面としての合理的な選択の 1 つは、2 つのクラス間の最大の分離またはマージンを表す超平面です。

2 つのクラスからデータを分離する複数の超平面

複数の超平面により 2 つのクラスからデータが分離される

したがって、各側の最も近いデータ点までの距離が最大になる超平面を選択します。このような超平面が存在する場合、それは次のように知られています。 最大マージン超平面/ハード マージン 。したがって、上の図から L2 を選択します。以下に示すようなシナリオを考えてみましょう

外れ値のあるデータの超平面の選択

外れ値のあるデータの超平面の選択

ここでは、赤いボールの境界に青いボールが 1 つあります。では、SVM はどのようにデータを分類するのでしょうか?それは簡単です!赤いボールの境界にある青いボールは、青いボールの外れ値です。 SVM アルゴリズムには、外れ値を無視し、マージンを最大化する最適な超平面を見つける特性があります。 SVM は外れ値に対して堅牢です。

最も最適化された超平面

最も最適化された超平面

したがって、このタイプのデータ ポイントでは、SVM が行うことは、以前のデータ セットで行ったように最大マージンを見つけ、ポイントがマージンを横切るたびにペナルティを追加することです。したがって、このようなタイプの場合のマージンは次のように呼ばれます。 ソフトマージン 。データ セットにソフト マージンがある場合、SVM は最小化を試みます。 (1/マージン+∧(∑ペナルティ)) 。ヒンジの損失は一般的に使用されるペナルティです。違反がない場合、ヒンジの損失はありません。違反がある場合、ヒンジの損失は違反の距離に比例します。

これまでは、線形分離可能なデータ (青いボールと赤いボールのグループが直線/直線で分離できる) について説明してきました。データが線形分離できない場合はどうすればよいでしょうか?

分類用の元の 1D データセット

分類用の元の 1D データセット

たとえば、データが上の図に示されているとします。 SVM は、 カーネル 。点をxと呼びます行に新しい変数 y を作成します原点 o からの距離の関数としてこれをプロットすると、次のような結果が得られます。

1D データを 2D にマッピングして 2 つのクラスを分離できるようにする

1D データを 2D にマッピングして 2 つのクラスを分離できるようにする

この場合、新しい変数 y は原点からの距離の関数として作成されます。新しい変数を作成する非線形関数は、カーネルと呼ばれます。

サポート ベクター マシンの用語

    超平面: 超平面は、特徴空間内のさまざまなクラスのデータ ポイントを分離するために使用される決定境界です。線形分類の場合、線形方程式、つまり wx+b = 0 になります。サポート ベクトル: サポート ベクトルは超平面に最も近いデータ ポイントであり、超平面とマージンを決定する際に重要な役割を果たします。マージン : マージンはサポート ベクターと超平面の間の距離です。サポート ベクター マシン アルゴリズムの主な目的は、マージンを最大化することです。マージンが広いほど、分類パフォーマンスが優れていることを示します。カーネル: カーネルは、元の入力データ ポイントを高次元の特徴空間にマッピングするために SVM で使用される数学関数です。これにより、データ ポイントが異なる場合でも超平面を簡単に見つけることができます。元の入力空間では線形分離できません。一般的なカーネル関数には、線形、多項式、動径基底関数 (RBF)、およびシグモイドなどがあります。 ハード マージン: 最大マージン超平面またはハード マージン超平面は、誤分類なしでさまざまなカテゴリのデータ ポイントを適切に分離する超平面です。ソフト マージン: データが完全に分離できない場合、または外れ値が含まれている場合、SVM ではソフト マージン技術を使用できます。各データ ポイントには、ソフト マージン SVM 定式化によって導入されたスラック変数があり、これにより厳格なマージン要件が緩和され、特定の誤分類や違反が許容されます。マージンの増加と違反の削減の間の妥協点が見つかります。C: マージンの最大化と誤分類の罰金は、SVM の正則化パラメーター C によってバランスがとれます。マージンを超えたり、データ項目を誤って分類した場合のペナルティは、それによって決定されます。 C の値が大きいほど、より厳しいペナルティが課せられます。その結果、マージンが小さくなり、おそらく誤分類が少なくなります。ヒンジ損失: SVM の典型的な損失関数はヒンジ損失です。誤った分類やマージン違反は罰せられます。 SVM の目的関数は、正則化項と組み合わせて作成されることがよくあります。双対問題: サポート ベクトルに関連するラグランジュ乗数を見つける必要がある最適化問題の双対問題は、SVM を解くために使用できます。二重定式化により、カーネル トリックの使用とより効率的なコンピューティングが可能になります。

サポートベクターマシンの数学的直観

+1 と -1 というラベルが付けられた 2 つのクラスによる二項分類問題を考えてみましょう。入力特徴ベクトル X とそれに対応するクラス ラベル Y で構成されるトレーニング データセットがあります。

線形超平面の方程式は次のように記述できます。

w^Tx+b = 0

ベクトル W は超平面の法線ベクトルを表します。つまり、超平面に垂直な方向です。パラメータ b 方程式中の は、法線ベクトルに沿った原点からの超平面のオフセットまたは距離を表します。

機械学習の種類

データ点 x_i と決定境界の間の距離は、次のように計算できます。

d_i = frac{w^T x_i + b}

ここで ||w||は重みベクトル w のユークリッド ノルムを表します。ユークリッドノルム法線ベクトル W の

線形 SVM 分類器の場合:

最適化:

    ハード マージン線形 SVM 分類器の場合:

underset{w,b}{	ext{minimize}}frac{1}{2}w^Tw =underset{W,b}{	ext{minimize}}frac{1}{2}left | w 
ight|^{2}  	ext{対象}; y_i(w^Tx_i + b) geq 1 ;for; i = 1, 2,3, cdots,m

i のターゲット変数またはラベル番目トレーニング インスタンスは記号 t で示されます。この声明では。そして、=-1 負の出現 (y の場合)= 0) および t=1 正のインスタンス (y の場合)= 1) それぞれ。制約を満たす決定境界が必要なため、次のようになります。 underset{w,b}{	ext{最小化 }}frac{1}{2}w^Tw+ C sum_{i=1}^m zeta_{i}  	ext{対象 } y_i( w^Tx_i + b)ge 1-zeta_{i};;そして ; zeta_{i} ge 0;;のために ; i = 1, 2,3, cdots,m

    ソフトマージン線形 SVM 分類器の場合:

underset{alpha}{	ext{maximize}}: frac{1}{2}underset{i	o m;}{sum};underset{j	o m}{sum} alpha_ialpha_j t_i t_j K(x_i, x_j) -underset{i	o m}{sum}alpha_i

    双対問題: サポート ベクトルに関連するラグランジュ乗数を見つける必要がある最適化問題の双対問題は、SVM を解くために使用できます。次の二重目的関数を最大化する最適なラグランジュ乗数 α(i)

w= underset{i	o m}{sum}alpha_i t_i K(x_i, x) + b  t_i(w^Tx_i-b) = 1 Longleftrightarrow b= w^Tx_i-t_i

どこ、

  • あるは、i 番目のトレーニング サンプルに関連付けられたラグランジュ乗数です。
  • K(x、 バツj) は、2 つのサンプル間の類似性を計算するカーネル関数です xそして×j。これにより、SVM はサンプルを高次元の特徴空間に暗黙的にマッピングすることで、非線形分類問題を処理できるようになります。
  • 用語∑αすべてのラグランジュ乗数の合計を表します。

二重の問題が解決され、最適なラグランジュ乗数が発見されたら、SVM 決定境界は、これらの最適なラグランジュ乗数とサポート ベクトルに関して説明できます。 i> 0 のトレーニング サンプルはサポート ベクトルですが、決定境界は次によって提供されます。

egin{aligned} 	ext{線形 : } K(w,b) &= w^Tx+b  	ext{多項式 : } K(w,x) &= (gamma w^Tx+b)^ N  	ext{ガウス RBF: } K(w,x) &= exp(-gamma|| x_i-x_j||^n  	ext{シグモイド :} K(x_i, x_j) &=  Tanh(alpha x_i^Tx_j + b) end{aligned}

サポートベクターマシンの種類

決定境界の性質に基づいて、サポート ベクター マシン (SVM) は 2 つの主要部分に分割できます。

    線形 SVM: 線形 SVM は、線形決定境界を使用して、異なるクラスのデータ ポイントを分離します。データを正確に線形に分離できる場合、線形 SVM は非常に適しています。これは、単一の直線 (2D の場合) または超平面 (高次元の場合) でデータ ポイントをそれぞれのクラスに完全に分割できることを意味します。クラス間のマージンを最大化する超平面が決定境界です。非線形 SVM: 非線形 SVM は、直線で 2 つのクラスに分離できない場合 (2D の場合)、データを分類するために使用できます。カーネル関数を使用することにより、非線形 SVM は非線形分離可能なデータを処理できます。元の入力データは、これらのカーネル関数によって高次元の特徴空間に変換され、データ ポイントは線形に分離されます。線形 SVM は、この変更された空間内で非線形の決定境界を特定するために使用されます。

SVM で一般的なカーネル関数

SVM カーネルは、低次元の入力空間を取得し、それを高次元の空間に変換する関数です。つまり、分離不可能な問題を分離可能な問題に変換します。これは主に非線形分離問題で役立ちます。簡単に言えば、カーネルは非常に複雑なデータ変換を実行し、定義されたラベルまたは出力に基づいてデータを分離するプロセスを見つけます。

SVM RBF カーネルによる乳がんの分類 - Geeksforgeeks

SVMの利点

  • 高次元の場合に効果を発揮します。
  • サポート ベクターと呼ばれる決定関数内のトレーニング ポイントのサブセットを使用するため、そのメモリは効率的です。
  • 決定関数にはさまざまなカーネル関数を指定でき、カスタム カーネルを指定することも可能です。

Python での SVM 実装

がんが良性か悪性かを予測します。がんと診断された患者に関する過去のデータを使用することで、医師が悪性の場合を区別し、良性の場合には独立した属性を与えることができます。

ステップ

  • sklearn.datasets から乳がんデータセットをロードします。
  • 入力フィーチャとターゲット変数を分離します。
  • RBF カーネルを使用して SVM 分類器を構築およびトレーニングします。
  • 入力フィーチャの散布図をプロットします。
  • 決定境界をプロットします。
  • 決定境界をプロットする

Python3

# Load the important packages> from> sklearn.datasets>import> load_breast_cancer> import> matplotlib.pyplot as plt> from> sklearn.inspection>import> DecisionBoundaryDisplay> from> sklearn.svm>import> SVC> # Load the datasets> cancer>=> load_breast_cancer()> X>=> cancer.data[:, :>2>]> y>=> cancer.target> #Build the model> svm>=> SVC(kernel>=>'rbf'>, gamma>=>0.5>, C>=>1.0>)> # Trained the model> svm.fit(X, y)> # Plot Decision Boundary> DecisionBoundaryDisplay.from_estimator(> >svm,> >X,> >response_method>=>'predict'>,> >cmap>=>plt.cm.Spectral,> >alpha>=>0.8>,> >xlabel>=>cancer.feature_names[>0>],> >ylabel>=>cancer.feature_names[>1>],> >)> # Scatter plot> plt.scatter(X[:,>0>], X[:,>1>],> >c>=>y,> >s>=>20>, edgecolors>=>'k'>)> plt.show()>
>
>

出力 :

SVM RBF カーネルによる乳がんの分類

ユーザー名