Kernel SVC(クラス分類)(SVM Classification)【Pythonとscikit-learnで機械学習:第5回】 

クラス分類問題において、非線形な識別を可能にするカーネルSVMを用いた手法について、実装・解説します。

本シリーズでは、Pythonを使用して機械学習を実装する方法を解説します。

また各アルゴリズムの数式だけでなく、その心、意図を解説していきたいと考えています。

Kernel SVCは、以下のscikit-learnマップの黒矢印に対応します。

[scikit-learnのマップ]

START→データが50以上→カテゴリーデータ→ラベルありデータ→データ数10万以下→Linear SVC失敗→K近傍法失敗→Kernel SVC

Kernel SVCは、カーネルを使用するSVM(サポートベクトル・マシン)に基づくクラス分類手法です。

実装例

まずはじめに実装例を紹介します。

使用するデータは第2, 4回と同じくXORの分類データです。

これに対してKernel SVCを行うと、以下のような結果となります。

コードは以下の通りです。

コードに関してはカーネル近似やK近傍法のときとほぼ同じです。

解説5の部分だけ異なります。

#解説 5:機械学習で分類する—————————————————
clf_result=svm.SVC(kernel=’rbf’, gamma=1/2 , C=1.0,class_weight=’balanced’, random_state=0)

このコードは、識別器としてSVCを使用します。

カーネルの種類としてはrbfカーネル(ガウスカーネル)を使用します。

ガウスカーネルの係数gammaはdefaultでは1/次元数であり、今回は1/2としています。

分類ミスに対して損失の大きさは自動的にhinge関数になります。

損失の大きさをどれくらい考慮するかを決めるパラメータCは1.0とします。

またクラスごとのデータ数の違いを補正します(weight=’balanced’)。

乱数のシードは0に固定しておきます。

という命令になっています。

ちなみにカーネルを使わない(Linear Kernel)の場合は以下のような結果となりうまく識別できません。

それでは「結局、Kernel SVCって何をやっていたの?」を説明します。

Kernel SVCの心

正確な情報は以下をご覧ください。

scikit-learnのSVMの解説ページ

scikit-learnのKernel SVCの解説ページ

Kernel SVCはカーネルトリックを使用したSVMに基づく分類手法です。

カーネルトリックは以下で説明しています。

カーネル近似(クラス分類)【Pythonとscikit-learnで機械学習:第2回】
本シリーズでは、Pythonを使用して機械学習を実装する方法を解説します。また各アルゴリズムの数式だ...

SVMは以下で説明しています。

Linear SVC(クラス分類 )(SVM Classification)【Pythonとscikit-learnで機械学習:第3回】
クラス分類問題において、データ数がそれほど多くない場合にまず使用するLinear SVC(SVM Class...

これらを参照してください。

以上、Pythonとscikit-learnで学ぶ機械学習入門|第5回:クラス分類 -Kernel SVC-でした。

次回は、Ensemble classificationのランダムフォレストについて解説します。

【目次】Python scikit-learnの機械学習アルゴリズムチートシートを全実装・解説
scikit-learnのアルゴリズムチートマップで紹介されている手法を、全て実装・解説してみました。 ...