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

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()

コメントを投稿

0 コメント