サポートベクターマシン (SVM) | これだけは知っておきたい3つのこと - MATLAB & Simulink

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

サポート ベクター マシン (SVM) は、あるクラスのデータポイントと別のクラスのデータポイントを最も効果的に分離する超平面を見つけ出す教師あり機械学習アルゴリズムです。

サポート ベクター マシンの仕組み

サポート ベクター マシンは、信号処理、自然言語処理 (NLP)、音声認識、画像認識などのアプリケーションで、分類や回帰の問題によく利用される教師あり機械学習アルゴリズムです。SVM アルゴリズムの目的は、あるクラスのデータポイントと別のクラスのデータポイントを最も効果的に分離する超平面を見つけ出すことです。この超平面は、2 次元空間では線で、n 次元空間では平面となります。n はデータセットにおける各観測の特徴量数です。データ内のクラスを分離する超平面は複数存在する可能性があります。SVM アルゴリズムによって導出された最適な超平面は、2 つのクラス間のマージンを最大化するものです。

マージンとは、内部にデータポイントがない超平面に平行なスラブの最大幅のことです。この平行スラブの境界をマークし、分離超平面に最も近いデータポイントがサポートベクターです。サポートベクターは、学習用観測データの一部で、それを用いて分離超平面の位置を一意に定めることができるものを指します。

サポート ベクター マシンによって特定された超平面の図。サポートベクター、マージン、2 つのクラスに分離されたデータポイントを示しています。

超平面で分離され、プラスとマイナスで表示された 2 つのクラス間のマージン幅を最大化するために、SVM アルゴリズムが使用されています。

SVM モデリングのワークフロー

サポート ベクター マシン モデルを構築する一般的なワークフローには、次のような手順が含まれます。

データの前処理

生データを用いて SVM モデルの学習を行うと、欠損値や外れ値、情報の冗長性などにより、しばしば十分な結果が得られないことがあります。欠損値や外れ値の処理にはデータクリーニングを実施し、特徴抽出でデータから適切な特徴量のセットを選択できるようにします。

特徴抽出は、生データを数値的な特徴量に変換し、元のデータセットの情報を保持したまま処理できるようにします。主成分分析 (PCA) のような次元削減手法は、最も重要な情報を保持しつつ特徴量数を削減します。こうしたアプローチにより、サポート ベクター マシン モデルは堅牢になり、複雑なデータセットを処理できるようになります。

データの前処理が完了したら、データを学習用とテスト用に分割します。データの最適な分割には交差検証を用います。学習用データで SVM モデルの学習を行い、テスト用データは未知のデータに対するモデルの性能を評価するために使用します。

カーネルの選択

データ分布に基づいて、適切なカーネル関数 (線形、多項式、RBF など) を選択します。線形分離できない場合は、カーネル関数がデータを高次元空間に変換し、クラスを分離しやすくします。

SVM に適したカーネルの選択
SVM の種類 マーサーカーネル 説明
ガウス基底関数または放射基底関数 (RBF) K(x1,x2)=exp(x1x222σ2) 1 クラス学習。σ はカーネルの幅です。
線形 K(x1,x2)=x1Tx2 2 クラス学習。
多項式 K(x1,x2)=(x1Tx2+1)ρ ρ は多項式の次数です。
シグモイド K(x1,x2)=tanh(β0x1Tx2+β1) 特定の β0 値と β1 値のみに対するマーサーカーネルです。

SVM モデルの学習

学習用データを使用して SVM モデルを構築して学習を行います。サポートベクターマシンの学習は、クラス間のマージンを最大化できるよう超平面を調整するために、二次最適化問題を解くことに相当します。サポート ベクター マシン アルゴリズムは、サポートベクターを特定して最適な超平面を決定します。この学習済みモデルを使用して、最適な超平面を基準に新しい未知のデータポイントを分類します。

SVM モデルの評価

テスト用データを使用してモデルをテストします。精度、混同行列、適合率、F1 スコア、再現率などのメトリクスを使用してモデルの性能を評価します。

ハイパーパラメーターの調整

モデルの性能を向上させるために、ハイパーパラメーターを調整します。確率モデルを使用するベイズ最適化などの探索手法を用いて、最適なハイパーパラメーターを特定します。

SVM 分類器の種類

線形サポート ベクター マシン

線形 SVM は、ちょうど 2 つのクラスを持つ線形分離可能なデータに使用されます。この種のサポート ベクター マシン アルゴリズムは、2 つのクラスのすべてのデータポイントを分離するために線形の決定境界を使用します。

この SVM アルゴリズムでは、線形分離可能な問題に限り、条件を満たす超平面を見つけ出すことができます。データの分離が不可能な最も複雑なタスクの場合、サポート ベクター マシンではソフトマージンを使用することができます。つまり、多くのデータポイントを分類できても、すべてには対応していない超平面となります。このアルゴリズムは、少数の誤分類を許容しながらソフトマージンを最大化します

1 つの誤分類を許容してクラスを分離するソフトマージンを使用したサポートベクターマシンを示すMATLABプロット。

クラス -1 (青) から 1 つのデータポイントの誤分類を許容するソフトマージンの SVM。(MATLAB ドキュメンテーションを参照)

非線形サポート ベクター マシン

SVM は非線形分類や回帰タスクにも使用されます。非線形に分離可能なデータの場合、非線形サポート ベクター マシンではカーネル関数を使用して特徴量を変換します。変換される特徴量の数は、サポートベクターの数によって決まります。

カーネル関数は、データを異なる空間、多くは高次元の空間にマッピングします。この変換によって、複雑な非線形の決定境界を、マッピングされた高次元の特徴空間で線形の境界に簡略化することで、クラスを分離しやすくすることができます。このプロセスは一般にカーネルトリックとして知られており、データを明示的に変換する必要がないため、計算コストを抑えることができます。非線形データのカーネル関数には、多項式、放射基底関数 (ガウス)、多層パーセプトロン、シグモイド (ニューラル ネットワーク) などがあります。

データポイントを 2 つのクラスに分離する超平面を持つサポート ベクター マシンを示す MATLAB 散布図。

ガウスカーネル関数を使用して MATLAB で学習を行った非線形 SVM 分類器。(コードを参照)

サポートベクター回帰

SVM は主に分類タスクに使用されますが、回帰タスクにも使用できます。SVM 回帰はカーネル関数に依存するため、ノンパラメトリック手法とみなされます。線形回帰は応答 (出力) 変数と予測子 (入力) 変数の関係が既知であるのに対し、サポートベクター回帰 (SVR) はこの関係を見つけ出すことを目的としています。SVR は、指定された許容範囲 (マージン) 内でデータに最適な超平面を特定すると同時に予測誤差を最小限に抑えることで、これを実現します。

SVR の動作原理はサポート ベクター マシン分類器と同じですが、SVR は離散クラスではなく連続値の予測を目的としています。SVR は、異なるカーネルタイプを使用することで、線形データと非線形データの両方を処理できます。カーネルトリックを使用すると、データを高次元空間にマッピングして非線形回帰を実行できます。

サポート ベクター マシンが重要な理由

SVM の利点

SVM は、機械学習人工知能 (AI) で最も利用されている教師あり学習アルゴリズムの 1 つで、主に高次元のデータや複雑な決定境界を効果的に処理できます。サポート ベクター マシンの主な利点には、次のようなものがあります。

  • データの汎用性。SVM は、高次元の非構造化データセットを扱う場合に特に効果的です。線形データと非線形データの両方に使用できるため、さまざまな用途で利用されています。
  • 堅牢性。SVM は、特に高次元空間で過学習を起こしにくくなっています。これは正則化パラメーターが学習データのエラーを削減して重みノルムを最小化するバランスをトレードオフするためです。
  • 解釈可能性。 線形 SVM 分類器によって作成される決定境界は明確で解釈しやすいため、モデルの予測を理解し、情報に基づいた意思決定を行う際に役立ちます。
  • 精度。SVM は小規模なデータセットに対して非常に高い精度と効果を発揮し、特に次元数がサンプル数を超える場合に有効です。

SVM の用途

前述の利点により、サポート ベクター マシンは、次のような幅広い分野においてデータをモデル化する際に魅力的な選択肢となります。

  • 自然言語処理。SVM は、テキストをカテゴリに分類するスパム検出や感情分析などの NLP タスクで広く利用されています。
  • コンピューター ビジョン。 SVM は、手書き文字認識や顔・物体検出などの画像分類タスクのほかに、医療診断ツールとして腫瘍の有無を示す MRI 画像の分類に利用されています。
  • 信号処理。SVM は、異常検知、音声認識、生体信号解析などのタスクの信号データにも利用されています。
  • 異常検知。 SVM では、正常データと異常データを分離する超平面を見つけ出すための学習を行うことができます。
  • バイオインフォマティクス。SVM は、タンパク質分類や遺伝子発現プロファイル解析などの分野で、生物学データの分類に応用されています。
グラウンド トゥルース マップと SVM 分類マップと共に表示されたハイパースペクトル RGB 画像。

SVM 分類器を使用して分類されたハイパースペクトル画像。(MATLAB コードを参照)

SVM の欠点

すべての機械学習モデルと同様に、サポート ベクター マシンにも次のような制約があります。

  • 大規模データセット。SVM は計算コストが高く、メモリ使用量も多いため、大規模データセットの処理には適していません。カーネルトリックを用いると、サポート ベクター マシンでも非線形データを処理できますが、計算コストがかかります。SVM では二次最適化問題を解く必要があります。大規模データセットの場合、カーネル行列が大きくなり、メモリ使用量も増加します。
  • ノイズが多いデータ。SVM はクラス間のマージンの最大化を目的としているため、ノイズが多いデータには適していません。
  • 解釈可能性。線形 SVM は容易に解釈できますが、非線形 SVM はそうはいきません。非線形 SVM では複雑な変換が必要になるため、決定境界の解釈が難しくなります。
X 軸に解釈可能性、Y 軸に予測性能をプロットした機械学習アルゴリズムを示すグラフ。SVM は解釈可能性は低いが予測性能は高くなっています。

よく利用される機械学習アルゴリズムの予測性能と解釈可能性の比較。

MATLAB を使用したサポート ベクター マシン

MATLAB®Statistics and Machine Learning Toolbox™ を使用することで、分類や回帰用に SVM モデルに学習させ、評価と予測を行うことができます。特徴選択やハイパーパラメーターの調整から交差検証やパフォーマンス指標に至るまで、MATLAB には効率的なサポート ベクター マシン モデルを構築するために必要なツールが用意されています。MATLAB のローコード機械学習アプリを使用すると、コードを記述することなく対話的に SVM の学習や評価を行い、C/C++ コードを生成して、CPU やマイクロコントローラーに展開することができます。

データの前処理

正確な結果を得るためには、データは外れ値のないモデル学習に適した状態である必要があります。MATLAB を使用すると、欠損値や外れ値の処理、データの正規化や平滑化などのクリーニングタスクを実行できます。データの前処理は、ライブ エディター タスクかデータ クリーナー アプリを使用して対話形式の実行が可能です。これらのアプリではコードも生成できます。

MATLAB は、時系列データ、テキスト、画像、音声など、さまざまな種類のデータをサポートしています。Audio Toolbox™Signal Processing Toolbox™ などの専用ツールボックスには特徴抽出機能が用意されており、異なるドメインの顕著な特徴量を測定し、中間的な計算を再利用することができます。

SVM モデルの学習

fitcsvm 関数と fitrsvm 関数を使用して、バイナリまたはマルチクラス分類用や、回帰タスク向けの SVM モデルの学習を行うことができます。非線形サポート ベクター マシンでは、複数のカーネル関数 (線形、多項式、RBF など) がサポートされており、独自のカーネル関数 (シグモイドなど) を作成して指定することもできます。

また、分類学習器アプリ回帰学習器アプリを使用して、対話的に SVM モデルの学習を行うこともできます。これらのアプリでは、コードを記述することなく、学習から調整まで SVM モデルの完全なワークフローを実行できます。こうしたアプリを使用することで、データの探索、特徴量の選択、自動学習の実行、ハイパーパラメーターの最適化、結果の評価などが可能になります。

線形 SVM モデルでモデル化された電離層データの検証用混同行列と、複数の SVM モデルの検証精度を示すスクリーンショット。

分類学習器アプリを使用して作成された検証用混同行列。(MATLAB コードを参照)

これらのアプリは C/C++ コードを生成して、SVM モデルをエクスポートできるため、簡単に結果を共有して、アプリ外で詳しく調査することができます。たとえば、分類学習器アプリや回帰学習器アプリからサポート ベクター マシン モデルをエクスポートし、 実験マネージャーアプリにインポートすることで、学習データの変更、ハイパーパラメーターの検索範囲の調整、独自の学習実験の実施など、追加タスクの実行が可能になります。

予測を立てる

SVM モデルの学習後、predict 関数を使用してラベルを予測します。Simulink で ClassificationSVM Predic ブロックまたは RegressionSVM Predict ブロックを使用して、学習済みの SVM モデルをシミュレーションできます。

結果の評価

SVM モデルの性能は、confusionchartrocmetrics などの関数を使用したプログラムによる評価が可能ですが、対話的に評価することもできます。機械学習アプリを使用すると、さまざまなモデルの性能を比較して、データに最適なモデルを見つけ出すことができます。

分類学習器アプリで分類器の学習を行った後は、精度に基づくモデルの比較、クラス予測のプロットによる分類器の結果の可視化、混同行列、ROC 曲線、または Precision-Recall 曲線を使用した性能の確認を行うことができます。

同様に、回帰学習器アプリでは、モデルメトリクスに基づくモデルの比較、応答プロットまたは実際の応答と予測応答のプロットによる回帰結果の可視化、残差プロットを使用したモデルの評価を行うことができます。

サポート ベクター マシンの予測応答を線として示し、その周りに実際の応答点が分散するプロット。

回帰学習器アプリで学習を行った回帰モデルの予測応答と実際の応答のプロット。点が線に近いほど、予測精度が高いことを示します。(MATLAB コードを参照)