【Scikit-learn】サポートベクタマシン(SVM)で教師あり学習(分類器作成)

この記事では、Pythonと機械学習ライブラリ「scikit-learn」を用いて、サポートベクタマシン(SVM)による教師あり学習を行う方法について紹介します。

サポートベクターマシンとは

サポートベクターマシン(略称:SVM)は、教師あり学習モデルの1つです。
2クラスのパターン識別器としては非常に強力なモデルで、データの分類や回帰などで大きな効果を発揮しています。

関連記事
SVMの原理詳細 サポートベクターマシンの原理・計算式

ソースコード

サンプルプログラムのソースコードです。

from sklearn import datasets # データ・セット
from sklearn import svm

def main():
    # データ・セットを呼び出す
    digits = datasets.load_digits()

    # 教師データ
    target = digits.target[:-1]

    # サポートベクターマシンで教師あり学習
    clf = svm.SVC(gamma=0.001, C=100.)
    clf.fit(digits.data[:-1], digits.target[:-1])  

    # 学習結果の表示
    print(clf)


if __name__ == "__main__":
    main()

プログラムの説明

Scikit-learnのライブラリには、あらかじめテスト用のデータ(digitsデータ)があります。
その中身は、64ピクセル(8×8)のグレイスケールの手書き数字の画像データ1797個分です。(行列形式で格納されている)
今回はこれをSVMを使って多クラス分類しています。

svm.SVCの説明

svm.SVC()では、gammaとC、2つのパラメータを指定しています。
γはRBFカーネル(ガウシアンカーネル)のパラメータです。(値が大きいほど境界が複雑になる)
Cはどれだけ誤分類を許容するかのパラメータです。(値が小さいほど誤分類を許容)
digits.targetには、各画像の正解データ(数字)が格納されています。

実行結果

サンプルプログラムの実行結果です。

SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3, gamma=0.001, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)

学習(トレーニング)した結果(SVMで完成した分類器のパラメータ)となります。

完成した分類器を使って、データを分類をする方法は下記事で解説しています。
【Scikit-learn】サポートベクタマシン(SVM)で多クラス分類

おすすめ記事

Scikit-learnをインストールする方法
Scikit-learn入門・使い方
機械学習のアルゴリズム入門

シェア&フォローお願いします!