科学の箱

科学・IT・登山の話題

機械学習

SVMでグリッドサーチ

投稿日:

IrisデータについてSVMで分類をしてみた。さて、今回はSVMモデルのパラメータをいじってみてより精度が高いモデルを作ってみる。

すべての学習モデルはハイパーパラメータと呼ばれる学習モデルに影響を与えるパラメータがある。このパラメータを適切に選ぶことで精度に大きな影響が出る。SVMが使いやすい理由の一つとしてはこのパラメータが少ないからである。あまりにハイパーパラメータが多い場合には、どのパラメータをいじればよいかわからずに、時間ばかりかかってしまう。

ハイパーパラメータをチューニングするステップは以下のようになる。

  1. モデルの選択
  2. 主なハイパーパラメータの理解
  3. チューニングするハイパーパラメータの選択
  4. チューニング
  5. 検証

ここでは以下について取り扱う。

  • ハイパーパラメータの選択
  • グリッドサーチ
  • 検証

ハイパーパラメータの選択

モデルが決定したら、まずそのモデルで利用できるハイパーパラメータを明らかにする。

今回モデルはLinearSVCを使う。

上記のドキュメントからsklearn.svm.SVCで使えるハイパーパラメータの一覧がわかる。

また下記から主なパラメータとしてCとgammaがあることがわかる。

RBF SVM parameters

よって今回はCとgammaについてチューニングをしてみる。

Cは正則化パラメータである。Cが小さいと誤分類を許容する、大きいと誤分類を許容しなくなる。これについては0.1~1000について10のオーダーで検証する。

gammaは決定境界の複雑さの度合いを決める。gammaが大きければ境界は複雑となる。0.0001~1について10のオーダーで検証する。

kernelについてはrbf(Radial Basis function Kernel)とする。

 

 

グリッドサーチ

まず学習データと検証データを用意する。

import seaborn as sns
iris = sns.load_dataset('iris')
X_iris = iris.drop('species', axis=1)
y_iris = iris['species']
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_iris, y_iris,random_state=1)

 

Gridsearchを実装する。

 

from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.1, 1, 10, 100, 1000],  
              'gamma': [1, 0.1, 0.01, 0.001, 0.0001], 
              'kernel': ['rbf']}
grid = GridSearchCV(SVC(), param_grid, refit = True, verbose = 3)
grid.fit(X_train, y_train)

 

まずはGridSearchCV用のパラメータを生成する。

param_grid = {‘C’: [0.1, 1, 10, 100, 1000], ‘gamma’: [1, 0.1, 0.01, 0.001, 0.0001], ‘kernel’: [‘rbf’]}

GridSearchを実行する。

grid = GridSearchCV(SVC(), param_grid, refit = True, verbose = 3)
grid.fit(X_train, y_train)

#

Fitting 3 folds for each of 25 candidates, totalling 75 fits
[CV] C=0.1, gamma=1, kernel=rbf ......................................
[CV]  C=0.1, gamma=1, kernel=rbf, score=0.9743589743589743, total=   0.0s
[CV] C=0.1, gamma=1, kernel=rbf ......................................
[CV]  C=0.1, gamma=1, kernel=rbf, score=0.9459459459459459, total=   0.0s

検証

GridSearchの検証方法としてはまず最も評価が高かったパラメータを明らかにする。

これはbest_params_から取得できる。

print(grid.best_params_) 
# {'C': 1, 'gamma': 0.1, 'kernel': 'rbf'}

 

次にそのスコアを明らかにする。

print(grid.best_score_)
# 0.9732142857142857

 

最も成績が良かった学習器はbest_estimator_で取得できる。

best = grid.best_estimator_
print(best)
# SVC(C=1, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma=0.1, kernel='rbf',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)

 

 

メタ情報

inarticle



メタ情報

inarticle



-機械学習
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

dataanalysis-002-week5

ANOVA – quantitative 分散分析、数学的に分散分析と重回帰分析は同じ 分散分析では3群以上の平均の差異を検定する ただし非線形では異なる http://oshiete.g …

no image

Core Concept in Data Analysis – Week 1

パート Data Mining Core Analysis Visualization Illustrate Data Mining data mining = patterns in data + …

no image

ジニ係数(再掲)

ジニ係数について修正した。とりあえずコード。 revenue<-read.csv(file=”data.csv”, head=TRUE) revenue$TotalRevenues_n < …

no image

仕事で始める機械学習 – 2.機械学習で何ができるか – 分類 – SVM

SVMの決定境界 SVMの決定境界はSVMで利用するカーネルにより異なる。 線形カーネル→線形 RBFカーネル→非線形 損失関数 損失関数としてはヒンジ関数を利用するが、パーセプトロンとは異なり、横軸 …

no image

前向き研究と後ろ向き研究

前向き研究と後ろ向き研究は疫学における用語である。 前向き研究で使われる研究手法にはコホートや無作為比較対照研究、ロジスティック分析がある。これらの研究ではサンプルをリスクファクター(危険要因)のある …

2019年10月
« 9月   11月 »
 123456
78910111213
14151617181920
21222324252627
28293031  

side bar top



アーカイブ

カテゴリー