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

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

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

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

コマンド

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

解決済

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

kouji_39
kouji_39

総合スコア115

Python 3.x

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

コマンド

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

1回答

0評価

0クリップ

154閲覧

投稿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

# coding: utf-8 """ Hyperoptでパラメータチューニングするためのサンプル """ from collections import Counter import numpy as np from sklearn.datasets import load_digits from sklearn.svm import SVC from sklearn.metrics import f1_score from hyperopt import hp, tpe, Trials, fmin import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline num_x = 1200 digits = load_digits(n_class=10) data = digits['data'] data /= np.max(digits['data']) target = digits['target'] x_train, x_test = data[:num_x], data[num_x:] y_train, y_test = target[:num_x], target[num_x:] print ('学習用データ', sorted([(key, value) for key, value in Counter(y_train).items()], key=lambda x:x[0])) print ('チューニング用データ', sorted([(key, value) for key, value in Counter(y_test).items()], key=lambda x:x[0])) hyperopt_parameters = { 'C': hp.loguniform('C', -8, 2), 'gamma': hp.loguniform('gamma', -8, 2), 'kernel': hp.choice('kernel', ['rbf', 'poly', 'sigmoid']) } def objective(args): classifier = SVC(**args) classifier.fit(x_train, y_train) predicts = classifier.predict(x_test) f1 = f1_score(y_test, predicts, average='micro') return -1*f1 max_evals = 200 trials = Trials() best = fmin( objective, hyperopt_parameters, algo=tpe.suggest, max_evals=max_evals, trials=trials, verbose=1 ) print ('ベストスコア') print ('---------------------') print ('micro_f1: ', -1*trials.best_trial['result']['loss']) print ('C: ', best['C']) print ('gamma: ', best['gamma']) print ('kernel: ', ['rbf', 'poly', 'sigmoid'][best['kernel']]) print ('---------------------') plt.plot(range(1, max_evals+1), np.log10(trials.vals['C']), 'o') plt.xlabel('iteration') plt.ylabel('log10') plt.title('parameter: C') plt.show() plt.plot(range(1, max_evals+1), np.log10(trials.vals['gamma']), 'o') plt.xlabel('iteration') plt.ylabel('log10') plt.title('parameter: gamma') plt.show() plt.plot(range(1, max_evals+1), trials.vals['kernel'], 'o') plt.xlabel('iteration') plt.ylabel('value') plt.title('parameter: kernel') plt.show() plt.plot(range(1, max_evals+1), -1*np.array(trials.losses()), 'o') plt.xlabel('iteration') plt.ylabel('value') plt.title('micro_f1') plt.show() print ('ベストスコア') print ('---------------------') print ('micro_f1: ', -1*trials.best_trial['result']['loss']) print ('C: ', best['C']) print ('gamma: ', best['gamma']) print ('kernel: ', ['rbf', 'poly', 'sigmoid'][best['kernel']]) print ('---------------------') plt.plot(range(1, max_evals+1), np.log10(trials.vals['C']), 'o') plt.xlabel('iteration') plt.ylabel('log10') plt.title('parameter: C') plt.show() plt.plot(range(1, max_evals+1), np.log10(trials.vals['gamma']), 'o') plt.xlabel('iteration') plt.ylabel('log10') plt.title('parameter: gamma') plt.show() plt.plot(range(1, max_evals+1), trials.vals['kernel'], 'o') plt.xlabel('iteration') plt.ylabel('value') plt.title('parameter: kernel') plt.show() plt.plot(range(1, max_evals+1), -1*np.array(trials.losses()), 'o') plt.xlabel('iteration') plt.ylabel('value') plt.title('micro_f1') plt.show() num_epoch = 100 num_iter = 50 f1s_l = [] f1s_u = [] for epoch in range(1, num_epoch+1): hyperopt_parameters = { 'C': hp.loguniform('C', -8, 2), 'gamma': hp.loguniform('gamma', -8, 2), 'kernel': hp.choice('kernel', ['rbf', 'poly', 'sigmoid']) } f1_l = hyperopt_search(num_iter) f1s_l.append(f1_l) for epoch in range(1, num_epoch+1): hyperopt_parameters = { 'C': hp.uniform('C', 0, 10), 'gamma': hp.uniform('gamma', 0, 10), 'kernel': hp.choice('kernel', ['rbf', 'poly', 'sigmoid']) } f1_u = hyperopt_search(num_iter) f1s_u.append(f1_u) plt.hist(f1s_l, bins=15, range=(0.95, 0.975), alpha=0.4, label='LogUniform') plt.hist(f1s_u, bins=15, range=(0.95, 0.975), alpha=0.4, label='Uniform') plt.xlabel('micro f1') plt.legend() plt.show()

コード
4.自分で調べたことや試したこと
Google検索では、有用な情報なし。

5.使っているツールのバージョンなど補足情報
開発環境:Google Colaboratory
プログラム言語:python3
OS:windows10 Home
CPU:Intel(R) Core(TM) i7-7500U CPU@2.70GHz 2.90GHz

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

melian

2022/06/11 13:55

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

2022/06/11 20:05

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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

コマンド

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