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

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

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

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

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

書式

svm.SVC(gamma, C)
パラメータ 説明
gamma RBFカーネル(ガウシアンカーネル)のパラメータです。(値が大きいほど境界が複雑になる)
C どれだけ誤分類を許容するかのパラメータです。(値が小さいほど誤分類を許容)

ソースコード

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

# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
from sklearn import svm
from sklearn.externals import joblib

def main():
    # 学習用のデータを読み込み
    data = pd.read_csv("train.csv", sep=",")

    # 説明変数:x1, x2
    X = data.loc[:, ['x1', 'x2']].as_matrix()

    # 目的変数:x3
    y = data['x3'].as_matrix()

    # 学習(SVM)
    clf = svm.SVC(gamma=0.001, C=100.)
    clf.fit(X, y)

    # テスト用データの読み込み
    data = pd.read_csv("test.csv", sep=",")

    # 学習結果の検証(テスト用データx1, x2を入力)
    X_test = data.loc[:, ['x1', 'x2']].as_matrix()
    y_predict = clf.predict(X_test)

    # 検証結果の表示
    print("検証結果:", y_predict)

    # 学習結果を出力
    joblib.dump(clf, 'train.learn') 

if __name__ == "__main__":
    main()

学習用データ

train.csv

"x1","x2","x3"
3,2,0
1,2,0
5,6,1
6,7,1
5,5,1
4,5,0
3,6,0
8,0,0
9,6,1
6,2,0
7,8,1

x1とx2の和が1以上・・・x3は1
x1とx2の和が1未満・・・x3は0

テスト用データ

"x1","x2"
4,2
6,7
8,5
3,3

実行結果

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

検証結果: [0 1 1 0]

検証結果をみると、「x1とx2の和が1以上・・・x3は1、x1とx2の和が1未満・・・x3は0」と判別していることがわかります。

多クラス分類への応用法は下記事で解説しています。
【詳細】【Scikit-learn】サポートベクタマシン(SVM)で多クラス分類

関連記事
1 Scikit-learn入門・使い方
2 Scikit-learnをインストールする方法
3 Python入門 サンプル集
関連記事