サポートベクターマシン【SupportVectorMachine】
〇教師あり学習を用いるパターン認識モデルの1つ
-分類や回帰のためのアルゴリズム
-SVMと頻繁に呼ばれる
-クラスを明確に分ける境界線を引くための手法
-マージン最大化と呼ばれる方法で境界線を推定
〇4つの工程
from sklearn.svm import SVM
clf = LinerSVC( )
clf.fit(X,y)
clf.predict(X')
〇サポートベクターマシーンの使用方法
【scikit-learnに実装されているSVM】
・分類問題に使用する SVM (Support Vector Classification)
・SVC (C-Support Vector Classification)
・標準的なソフトマージン(エラーを許容する)SVM
・LinearSVC (Linear Support Vector Classification)
・カーネルが線形カーネルの場合に特化したSVM
・NuSVC (Nu-Support Vector Classification)
・エラーを許容する表現が異なるSVM
・回帰問題に使用する SVM (Support Vector Regression)参考
・SVR
・LinearSVR
・NuSVR
・異常検知に使用する SVM
・OneClassSVM
【SVC()の引数】
・引数C:正則化のパラメータ
・引数kernel:アルゴリズムで使用するカーネルタイプ('linear'、 'poly'、 'rbf'、 'sigmoid'、 'precomputed')
・引数degree: 多項式カーネル関数の次数(kernel='poly'の時のみ有効)
・引数gamma: カーネルがrbf、poly、sigmoidの時のカーネル係数。
・引数random_state: 乱数
・引数verbose: モデル構築の過程のメッセージを出すかどうか(デフォルトは0)
In [1]: # ライブラリのインポート
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# データのロード
breast = load_breast_cancer()
df_breast = pd.DataFrame(data=breast.data,columns=breast.feature_names)
df_breast['target'] = breast.target
# インスタンス作成
clf = SVC(random_state=0)
# 説明変数
X = df_breast[breast.feature_names].values
# 目的変数target
Y = df_breast['target'].values
# データの分割
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2,random_state=0)
# 予測モデルを作成
clf.fit(X_train, y_train)
# 精度
print(accuracy_score(y_test,clf.predict(X_test)))
Out[1]: 0.9298245614035088
〇サポートベクターマシンを使った分類【GridSearchCV】
・パラメーターチューニングを含めたモデル学習
【パラメータチューニングとは】
→モデル学習で様々なパラメータを行い、精度が高くなるパラメータを探索すること。
→『sklearn.model_selection.GridSearchCV』を用いる
<手順①>パラメータの形式指定
チューニングしたいパラメータと探索したいパラメータの範囲を辞書形式で指定。
params = {
"C":np.arange(0.1,1,0.05),
"kernel":["rbf"],
"gamma":np.arange(0.1,1,0.5)
}
・ライブラリnumpyの関数np.arange()を使用して範囲指定
・上記のパラメータだと
・パラメータC:0.1から1.0までの間を0.05刻み。
・パラメータkernel:rbf
・パラメータgamma:0.1から1.0までの間を0.5刻みで探索。
・刻みの数を細かくすると探索する時間が長くなり、逆に刻みを荒くすると探索する時間は短くなる。
<手順②>sklearn.model_selection.GridSearchCVを使用。
In [1]: clf = GridSearchCV(clf, params,scoring="accuracy", cv=3)
# パラメータチューニング
clf.fit(X_train, y_train)
Out[1]: GridSearchCV(cv=3, error_score=nan,
estimator=SVC(C=1.0, break_ties=False, cache_size=200,
class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3,
gamma='scale', kernel='rbf', max_iter=-1,
probability=False, random_state=0, shrinking=True,
tol=0.001, verbose=False),
iid='deprecated', n_jobs=None,
param_grid={'C': array([0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 , 0.45, 0.5 , 0.55, 0.6 ,
0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95]),
'gamma': array([0.1, 0.6]), 'kernel': ['rbf']},
pre_dispatch='2*n_jobs', refit=True, return_train_score=False,
scoring='accuracy', verbose=0)
最も最適なパラメータはbest_params_にて確認することができます。
In [2]: print(clf.best_params_)
Out[2]: {'C': 0.1, 'gamma': 0.1, 'kernel': 'rbf'}