科学の箱

科学・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

irisデータを読み込んでseabornでいろいろ表示をしてみる。

data可視化ライブラリのseabornではすぐに機械学習を始められるように質が良いデータが用意されている。その中でも最も有名であるirisについてpairplotを使って可視化してみる。 ここでは以 …

no image

売り上げデータの分析

利益 = 売り上げ – コスト 売り上げ = 客数 x 客単価 コスト ≒ 人件費 + 廃棄コスト 客数 客単価 = Σ 品物i x 購入数 客数を増やす方法 来てもらう方法 安売りキャン …

no image

Statistical Reasoning for Public Health

Module up to 3 SES – 社会経済的地位 Cognitive function – 認知機能 The authors used the graphic alon …

no image

判別式

判別式の手順 散布図をプロットしてみてグループに分けることができるかを検討する 判別式のモデル(線形判別、マハラノビスなど)を検討する データを読み込み判別式テンプレートを作成する 判別式を作成する …

no image

線形回帰と最急降下法

線形回帰 世の中の様々な出来事(y)はある事象(x)に対して比例することが多い。もちろん厳密に比例するわけではなくずれは生じる。しかしこのxとyが比例すると仮定した場合、中学校で習った一次式でこの関係 …

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

side bar top



アーカイブ

カテゴリー