科学の箱

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

判別式

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

no image

Pythonではじめる機械学習 – Chap02

2.1 Classification and Regression 分類問題の目的 クラスがどのようなラベルであるかを予測 分類問題 2つのクラスに分類するバイナリクラシフィケーション 例)Yes/N …

no image

ポワソン分布の利用

一時間に平均7通のメールが来るとき100回試行した時のメール受信件数を調べる > rpois(100,7)  [1]  7 10  2  8  5  4  4  9  2  3  9  6  9 …

no image

SIGNATE お弁当の需要予測-1

SIGNATEのコンペであるお弁当の需要予測をpythonで分析 データは下記から取得できる https://signate.jp/competitions/24 ライブラリ読み込み importnu …

no image

Pythonではじめる機械学習 – Chap03

3.1 Types of Unsupervised Learning 教師なし学習の例 次元削減: 重要な特徴量のみを使って元のデータを表現する トピック抽出: データを構成する部品を見つける クラス …

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

side bar top



アーカイブ

カテゴリー