我正在尝试使用贝叶斯优化(Hyperopt)来获得 SVM 算法的最佳参数。但是,我发现每次运行时最佳参数都在变化。
下面提供的是一个简单的可重现案例。你能对此有所了解吗?
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 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Ray Tune包对使用纯 Tensorflow 实现的 LSTM 进行超参数调整。我用的超频调度和HyperOptSearch算法这一点,我也使用可训练类的方法。当我尝试运行它时,出现以下错误:
类型错误:ap_uniform_sampler() 缺少 1 个必需的位置参数:“高”
下面显示的是堆栈跟踪:
FutureWarning:不推荐将 issubdtype 的第二个参数从floatto转换np.floating。将来,它将被视为np.float64 == np.dtype(float).type. from ._conv import register_converters as _register_converters Process STDOUT 和 STDERR 被重定向到 /tmp/ray/session_2018-12-19_09-43-46_5469/logs。等待 127.0.0.1:14332 处的 redis 服务器响应... 等待 127.0.0.1:25158 处的 redis 服务器响应... 使用 /dev/shm 启动具有 3.220188364 GB 内存的 Plasma 对象存储。无法启动 UI,您可能需要运行“pip install jupyter”。== 状态 == 使用 HyperBand:num_stopped=0 total_brackets=0 第 0 轮:请求的资源:0/4 个 CPU,0/0 个 GPU 此节点上的内存使用量:3.7/8.1 GB
Traceback (most recent call last):
File …Run Code Online (Sandbox Code Playgroud) 我遇到了一个奇怪的问题:我通过 hyperopt
定义了我的 XGB 超参数'max_depth'
hp.choice('max_depth',range(2,20))
Run Code Online (Sandbox Code Playgroud)
但我得到'max_depth' = 0或1结果,这不在[2,20)限制之内。为什么?我错过了什么吗?谢谢。
错误结果:
{'colsample_bytree': 0.18, 'learning_rate': 0.05, 'max_depth': 1, 'reg_alpha': 3.44, 'reg_lambda': 0.92}
{'colsample_bytree': 0.41, 'learning_rate': 0.09, 'max_depth': 0, 'reg_alpha': 0.14, 'reg_lambda': 3.53}
{'colsample_bytree': 0.71, 'learning_rate': 0.17, 'max_depth': 0, 'reg_alpha': 2.21, 'reg_lambda': 2.82}
Run Code Online (Sandbox Code Playgroud)
hp.choice('max_depth',range(2,20))
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 hyperopt 中定义参数空间。但是,当我运行时:
import hyperopt as hp
SPACE = {'d1': hp.uniform('d1',-1000000,-0.5),
'd2': hp.uniform('d2',0,1),
'd3': hp.uniform('d3',0,1)}
Run Code Online (Sandbox Code Playgroud)
我收到标题中的错误。我在网上发现的唯一一件事是我应该尝试降级到networkx 1.11,所以在命令提示符下我运行:
pip install networkx==1.11
Run Code Online (Sandbox Code Playgroud)
它显然有效,但属性制服仍然没有运气。
我正在使用pythonpackage hyperopt并且我有一个参数a,该参数必须大于parameter b。
例如,我希望我的参数空间像
space = {"b": hp.uniform(0, 0.5), "a": hp.uniform(b, 0.5)}
Run Code Online (Sandbox Code Playgroud)
要求a至少大于b,我该怎么做?
提前致谢
hyperopt ×5
parameters ×2
python-3.x ×2
optimization ×1
python ×1
ray ×1
scikit-learn ×1
svm ×1
tensorflow ×1
xgboost ×1