機械学習でよく用いられるサポートベクターマシン(SVM)について,実践例を用いて解説します.
実践例で使用している統計解析アプリStaatAppはこちらのページから無料でダウンロードできます.
サポートベクターマシンとは
サポートベクターマシンとは,機械学習の1つでデータを分類数ために最適な線や境界を見つける手法になります.
以下がサポートベクターマシンの考え方を示した図になります.
例えば,黄色の点(クラスA)と緑の点(クラスB)があるデータを考えます.このデータを2つのグループに分けるために,引く線が決定境界と呼ばれます.
境界となる線の分類精度が上がるように,黄色と緑を確実に分けられているかつ,2つのクラスから離れている線を考えます.
決定境界に最も近い各クラスの点(データ)をサポートベクターと呼び,サポートベクターと決定境界との距離(マージン)が最大になるような線を見つける手法がサポートベクターマシンです.
サポートベクターマシンの分析手順
サポートベクターマシンを用いた分析・予測は基本的には以下の手順で行います.
サポートベクターマシンを用いた分析でははじめにデータの前処理を行います.欠測値がある場合は補完や補正を行い,カテゴリーデータがある場合は置換するなどエンコーディングを行います.テストデータは学習したモデルを評価するために作成します.機械学習ではデータを分割することで作成することが多いです.
分析者が設定できるモデルのパラメータ(設定値)をハイパーパラメータと言い,実際に機械学習を行うためにパラメータの設定を行います.(StaatAppでははじめはデフォルト設定で問題ありません.)
モデルの作成(学習)では主に分類問題と回帰問題の2パターンがあります.分類問題はターゲット変数(SVMで予測したい変数)がカテゴリーデータの場合に行い,回帰問題はターゲット変数が数値データの場合に行います.
モデルを作成したらテストデータを用いてモデルの評価を行います.分類問題では混合行列を作成して,正解率や再現率で評価します.回帰問題ではRMSE(二乗平均平方根誤差)やR²(決定係数)でモデルの精度を評価します.
再度ハイパーパラメータの調整(パラメータチューニング)を行い精度が十分と判断した場合,作成したモデルを用いてターゲット変数の予測を行います.
StaatAppを用いたサポートベクターマシン
統計解析アプリStaatAppを用いて,実際にSVMを用いた学習・予測を行います.データサイエンス・機械学習の競技プラットフォームであるKaggleで使用されるタイタニック号のデータセットを用いて解説します.
予測対象は生存状況の有無として,SVMを用いた分類問題を行います.
① 前処理
欠測値の処理やラベルエンコーディング(置換)の方法は以下のページをお読みください.
ここではテストデータの作成を行います.データ操作画面(初期画面)のメニューバーの「データ操作」からテストデータ作成機能を用いて,学習データとテストデータに分割します.
デフォルト設定のまま「実行」を行うと,全データの下から25%のデータがテストデータとして分割され「データ2」に保存されます.ホールド・アウト検証を行う場合に適しています.
ランダムでデータを分割したい場合は,「シャッフルして分割」をオンにします.
② ターゲット変数・特徴量の選択
サポートベクターマシン機能を選択してSVM用のウィンドウを表示します.
ターゲット変数(目的変数)には分類を行いたい変数を,特徴量(説明変数)には分類するための基準とする変数を選択します.
③ ハイパーパラメータの設定
ハイパーパラメータを調整することで過学習や未学習を避け,モデルの予測精度を向上させることができます.各設定項目については補足①をお読みください.
例ではデフォルト設定から変更を行いません.
④ 学習の実行
ツールバーの「モデル作成」ボタンでモデルの作成を実行します.
画面右側の解析結果にはサンプルごとの分類結,果と特徴量ごとの重要度(影響度)が表示されます.
⑤ モデルの精度評価
作成したモデルに対して,テストデータを用いてモデルの精度評価を行います.
評価タブを表示してテストデータに「データ2」を選択します.「算出」ボタンをクリックすると以下のように4つの評価指標と混合行列が表示されます.
評価指標はそれぞれ値が大きいほどモデルの予測精度が高いことを意味します.混合行列はテストデータ(実測値)と予測値を比較した行列で,生存有無が”yes”の場合はほとんど予測が的中していることがわかります.
予測精度が十分でない場合は,ハイパーパラメータを調整して再度学習を実行します.
分類問題において,分類項目が2種類(ターゲット変数が2種類)の場合は,以下のようにROC曲線とAUCが算出されます.
⑥ 予測値の算出
作成したモデルに対して予測用データを読み込ませて,ターゲット変数の予測を行います.
予測タブを表示し予測用データの選択,「算出」ボタンをクリックすると予測結果が表示されます.
ここまでがStaatAppを用いた基本的なSVMを用いた分析の手順になります.
補足① ハイパーパラメータ
SVMにおけるハイパーパラメータの説明とチューニング方法は以下になります.
種別 | 説明・チューニング方法 |
正則化パラメータ C | 正則化の強さが,Cに反比例します. |
カーネル | アルゴリズムで使用するカーネルのタイプ. |
次数 | カーネルで”Poly”を選択した際の多項式カーネル関数の次数. |
許容範囲 | 学習の停止基準の許容範囲. |
イプシロン | 回帰モデルにおけるイプシロン. |
補足② 回帰問題
回帰問題を行う場合はターゲット変数に数値データを選択して,分析の種類に回帰を選択します.回帰問題では予測値が連続データとして算出されます.
また,モデルの評価指標が分類問題とは異なりRMSE(平均平方二乗誤差)やMAE(平均絶対誤差)で評価します.これらの値は予測結果と実測値との誤差を示し,値が小さいほどモデルの予測精度が高いと言えます.
R²(決定係数)は0~1の間で算出され,1に近いほど当てはまりがよいとされます.
以下のような実測値と予測値を比較した散布図も表示されるので,予測結果の傾向を確認することができます.
補足③ その他の機械学習
SVMは機械学習の1つであり,機械学習はSVM以外にも様々な手法があります.以下のページでは,機械学習の考え方やその他の分析手法について紹介しています.
補足④ SVMのアルゴリズム
StaatAppではSVMのアルゴリズムとして,Pythonで最も有名な機械学習用ライブラリのscikit-learnを使用しています.公式ドキュメントは以下になります.ドキュメント内にアルゴリズムの引用論文なども記載されているため,学術研究で記載する際は参考にしてください.
・分類問題(sklearn.svm.SVC)
・回帰問題(sklearn.svm.SVR)