グリッドサーチ
from sklearn.svm import SVC from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=0) print("Size of training set: {} size of test set: {}".format(X_train.shape[0], X_test.shape[0])) best_score = 0 for gamma in [0.001, 0.01, 0.1, 1, 10, 100]: for C in [0.001, 0.01, 0.1, 1, 10, 100]: svm = SVC(gamma=gamma, C=C) svm.fit(X_train, y_train) score = svm.score(X_test, y_test) if score > best_score: best_score = score best_parameters = {'C': C, 'gamma': gamma} print("Best score: {:.2f}".format(best_score)) print("Best parameters: {}".format(best_parameters))
パラメータの過剰適合の危険性と検証セット
- 過剰適合を防ぐために,データを以下のように分ける.
- 訓練セット(train): モデルを構築するために用いる
- 検証セット(valid): モデルのパラメータを選択するために用いる
- テストセット(test): 選択したパラメータの性能を評価するために用いる
交差検証を用いたグリッドサーチ
from sklearn.model_selection import cross_val_score import numpy as np for gamma in [0.001, 0.01, 0.1, 1, 10, 100]: for C in [0.001, 0.01, 0.1, 1, 10, 100]: svm = SVC(gamma=gamma, C=C) scores = cross_val_score(svm, X_trainval, y_trainval, cv=5) score = np.mean(scores) if score > best_score: best_score = score best_parameters = {'C': C, 'gamma': gamma} svm = SVC(**best_parameters) svm.fit(X_trainval, y_trainval)