1.前提・実現したいこと
hyperoptって何してんの?というブログのgithubコードを理解しようとしています。
参考ブログ(下記※)は以下です。
※https://qiita.com/kenchin110100/items/ac3edb480d789481f134
検証に利用したコードは
https://github.com/kenchin110100/machine_learning/blob/master/sampleHyperOpt.ipynb
にあります。
上記のコードを、利用させてもらいましたが、エラーが発生します。対処方法をお願いします。
2.発生している問題・エラーメッセージ
3.のソースコード実行で下記のエラーメッセージが発生
NameError: name 'hyperopt_search' is not defined
発生場所は、f1_l = hyperopt_search(num_iter)の行。
NameError Traceback (most recent call last)
<ipython-input-27-7498ad6c1064> in <module>()
11 'kernel': hp.choice('kernel', ['rbf', 'poly', 'sigmoid'])
12 }
---> 13 f1_l = hyperopt_search(num_iter)
14 f1s_l.append(f1_l)
3.該当のソースコード
python3
1# coding: utf-8 2""" 3Hyperoptでパラメータチューニングするためのサンプル 4""" 5from collections import Counter 6 7import numpy as np 8 9from sklearn.datasets import load_digits 10from sklearn.svm import SVC 11from sklearn.metrics import f1_score 12 13from hyperopt import hp, tpe, Trials, fmin 14 15import matplotlib.pyplot as plt 16import seaborn as sns 17 18%matplotlib inline 19 20num_x = 1200 21 22digits = load_digits(n_class=10) 23 24data = digits['data'] 25data /= np.max(digits['data']) 26target = digits['target'] 27 28x_train, x_test = data[:num_x], data[num_x:] 29y_train, y_test = target[:num_x], target[num_x:] 30 31print ('学習用データ', sorted([(key, value) for key, value in Counter(y_train).items()], key=lambda x:x[0])) 32print ('チューニング用データ', sorted([(key, value) for key, value in Counter(y_test).items()], key=lambda x:x[0])) 33 34hyperopt_parameters = { 35 'C': hp.loguniform('C', -8, 2), 36 'gamma': hp.loguniform('gamma', -8, 2), 37 'kernel': hp.choice('kernel', ['rbf', 'poly', 'sigmoid']) 38} 39 40def objective(args): 41 classifier = SVC(**args) 42 classifier.fit(x_train, y_train) 43 predicts = classifier.predict(x_test) 44 f1 = f1_score(y_test, predicts, average='micro') 45 return -1*f1 46 47max_evals = 200 48trials = Trials() 49 50best = fmin( 51 objective, 52 hyperopt_parameters, 53 algo=tpe.suggest, 54 max_evals=max_evals, 55 trials=trials, 56 verbose=1 57) 58 59print ('ベストスコア') 60print ('---------------------') 61print ('micro_f1: ', -1*trials.best_trial['result']['loss']) 62print ('C: ', best['C']) 63print ('gamma: ', best['gamma']) 64print ('kernel: ', ['rbf', 'poly', 'sigmoid'][best['kernel']]) 65print ('---------------------') 66 67plt.plot(range(1, max_evals+1), np.log10(trials.vals['C']), 'o') 68plt.xlabel('iteration') 69plt.ylabel('log10') 70plt.title('parameter: C') 71plt.show() 72 73plt.plot(range(1, max_evals+1), np.log10(trials.vals['gamma']), 'o') 74plt.xlabel('iteration') 75plt.ylabel('log10') 76plt.title('parameter: gamma') 77plt.show() 78 79plt.plot(range(1, max_evals+1), trials.vals['kernel'], 'o') 80plt.xlabel('iteration') 81plt.ylabel('value') 82plt.title('parameter: kernel') 83plt.show() 84 85plt.plot(range(1, max_evals+1), -1*np.array(trials.losses()), 'o') 86plt.xlabel('iteration') 87plt.ylabel('value') 88plt.title('micro_f1') 89plt.show() 90 91print ('ベストスコア') 92print ('---------------------') 93print ('micro_f1: ', -1*trials.best_trial['result']['loss']) 94print ('C: ', best['C']) 95print ('gamma: ', best['gamma']) 96print ('kernel: ', ['rbf', 'poly', 'sigmoid'][best['kernel']]) 97print ('---------------------') 98 99plt.plot(range(1, max_evals+1), np.log10(trials.vals['C']), 'o') 100plt.xlabel('iteration') 101plt.ylabel('log10') 102plt.title('parameter: C') 103plt.show() 104 105plt.plot(range(1, max_evals+1), np.log10(trials.vals['gamma']), 'o') 106plt.xlabel('iteration') 107plt.ylabel('log10') 108plt.title('parameter: gamma') 109plt.show() 110 111plt.plot(range(1, max_evals+1), trials.vals['kernel'], 'o') 112plt.xlabel('iteration') 113plt.ylabel('value') 114plt.title('parameter: kernel') 115plt.show() 116 117plt.plot(range(1, max_evals+1), -1*np.array(trials.losses()), 'o') 118plt.xlabel('iteration') 119plt.ylabel('value') 120plt.title('micro_f1') 121plt.show() 122 123num_epoch = 100 124num_iter = 50 125 126f1s_l = [] 127f1s_u = [] 128 129for epoch in range(1, num_epoch+1): 130 hyperopt_parameters = { 131 'C': hp.loguniform('C', -8, 2), 132 'gamma': hp.loguniform('gamma', -8, 2), 133 'kernel': hp.choice('kernel', ['rbf', 'poly', 'sigmoid']) 134 } 135 f1_l = hyperopt_search(num_iter) 136 f1s_l.append(f1_l) 137 138for epoch in range(1, num_epoch+1): 139 hyperopt_parameters = { 140 'C': hp.uniform('C', 0, 10), 141 'gamma': hp.uniform('gamma', 0, 10), 142 'kernel': hp.choice('kernel', ['rbf', 'poly', 'sigmoid']) 143 } 144 f1_u = hyperopt_search(num_iter) 145 f1s_u.append(f1_u) 146 147plt.hist(f1s_l, bins=15, range=(0.95, 0.975), alpha=0.4, label='LogUniform') 148plt.hist(f1s_u, bins=15, range=(0.95, 0.975), alpha=0.4, label='Uniform') 149plt.xlabel('micro f1') 150plt.legend() 151plt.show()
コード
4.自分で調べたことや試したこと
Google検索では、有用な情報なし。
5.使っているツールのバージョンなど補足情報
開発環境:Google Colaboratory
プログラム言語:python3
OS:windows10 Home
CPU:Intel(R) Core(TM) i7-7500U CPU@2.70GHz 2.90GHz
回答1件
あなたの回答
tips
プレビュー