首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hyperopt:随运行时间变化的最优参数

Hyperopt:随运行时间变化的最优参数
EN

Stack Overflow用户
提问于 2018-12-15 14:33:07
回答 1查看 3.8K关注 0票数 5

我试图使用贝叶斯优化(Hyperopt)来获得支持向量机算法的最优参数。但是,我发现最优参数随每次运行而变化。

下面是一个简单的可复制的案例。你能给这个放点光吗?

代码语言:javascript
复制
import numpy as np 
from hyperopt import fmin, tpe, hp, STATUS_OK, Trials

from sklearn.svm import SVC
from sklearn import svm, datasets
from sklearn.metrics import accuracy_score
from sklearn.model_selection import GridSearchCV, cross_val_score
from sklearn.model_selection import StratifiedShuffleSplit

iris = datasets.load_iris()
X = iris.data[:, :2] 
y = iris.target

def hyperopt_train_test(params):
    clf = svm.SVC(**params)
    return cross_val_score(clf, X, y).mean()

space4svm = {
    'C': hp.loguniform('C', -3, 3),
    'gamma': hp.loguniform('gamma', -3, 3),
}

def f(params):
    acc = hyperopt_train_test(params)
    return {'loss': -acc, 'status': STATUS_OK}

trials = Trials()

best = fmin(f, space4svm, algo=tpe.suggest, max_evals=1000, trials=trials)

print ('best:')
print (best)

以下是一些最优值。

最佳:{'C':0.08776548401545513,‘伽马’:1.447360198193232}

最佳:{'C':0.23621788050791617,‘伽马’:1.2467882092108042}

最佳:{'C':0.3134163250819116,‘伽马’:1.0984778155489887}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-18 11:04:07

这是因为在fmin执行期间,hyperopt会在每次程序运行期间随机从定义的搜索空间space4cvm中提取'C''gamma'的不同值。

要修复这个问题并产生确定性结果,您需要使用fmin

rstate: numpy.RandomState、默认的numpy.random或$HYPEROPT\_FMIN\_SEED每个对algo的调用都需要一个种子值,这个值在每个调用上应该是不同的。该对象用于通过randint绘制这些种子。如果'HYPEROPT_FMIN_SEED‘环境变量设置为非空字符串,则默认的rstate为HYPEROPT_FMIN_SEED,否则将在任何状态下使用np.random。

因此,如果没有显式设置,默认情况下它将检查是否设置了环境变量'HYPEROPT_FMIN_SEED'。如果没有,那么每次都会使用一个随机数。

您可以通过以下方式使用此方法:

代码语言:javascript
复制
rstate = np.random.RandomState(42)   #<== Use any number here but fixed

best = fmin(f, space4svm, algo=tpe.suggest, max_evals=100, trials=trials, rstate=rstate)
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53794176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档