質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Q&A

解決済

1回答

466閲覧

hyperopt用コードでNameError: name 'hyperopt_search' is not definedのエラー発生

kouji_39

総合スコア164

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

0クリップ

投稿2022/06/11 10:58

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/06/11 13:55

参照している Jupyter Notebook に hyperopt_search が定義されていますので、それをコピーする必要があります。
kouji_39

2022/06/11 20:05

melianさん、ご助言ありがとうございました。github投稿者さんは、おそらく、一度はコードを実行した後に、追加コードを入れたりしたものを、githubにアップしたかもしれませんね。 hyperopt_searchが、後の方で出ていることに気づきませんでした。今後ともよろしくお願いいたします。
guest

回答1

0

自己解決

下記コードを、エラー発生箇所以前に追加することで、エラーが無くなりました。

python3

1def hyperopt_search(max_evals): 2 trials = Trials() 3 best = fmin(objective, hyperopt_parameters, algo=tpe.suggest, max_evals=max_evals, trials=trials) 4 return -1*trials.best_trial['result']['loss']

投稿2022/06/11 19:59

kouji_39

総合スコア164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問