Parallel processing HyperOptSearch和ray.tune
我正在尝试使用HyperOptSearch和ray.tune进行参数优化。代码使用hyperopt(不使用tune),但我希望它更快,因此使用tune。不幸的是,我找不到很多例子,所以我不确定代码。我在XGboost中使用了一个管道,但我不仅想优化XGboost中的参数,还想优化管道中用于编码的另一个参数。这可能与tune有关吗?我的代码如下Parallel processing HyperOptSearch和ray.tune,parallel-processing,xgboost,ray,hyperopt,Parallel Processing,Xgboost,Ray,Hyperopt,我正在尝试使用HyperOptSearch和ray.tune进行参数优化。代码使用hyperopt(不使用tune),但我希望它更快,因此使用tune。不幸的是,我找不到很多例子,所以我不确定代码。我在XGboost中使用了一个管道,但我不仅想优化XGboost中的参数,还想优化管道中用于编码的另一个参数。这可能与tune有关吗?我的代码如下 from hyperopt import hp from ray import tune from ray.tune.suggest.hyperopt i
from hyperopt import hp
from ray import tune
from ray.tune.suggest.hyperopt import HyperOptSearch
def train_model(space, reporter):
#target encoding
columns_te=no_of_classes[no_of_classes.counts>space['enc_threshold']].feature.values.tolist()
#one hot encoding
columns_ohe=categorical.columns[~categorical.columns.isin(cols_te)].tolist()
#model
pipe1 = SKPipeline([('ohe',
OneHotEncoder(cols=columns_ohe, return_df=True,handle_unknown='ignore', use_cat_names=True)),
('te',
TargetEncoder(cols= columns_te, min_samples_leaf=space['min_samples_leaf']))])
pipe2 = IMBPipeline([
('sampling',RandomUnderSampler()),
('clf', xgb.XGBClassifier(**space, n_jobs = -1))
])
model = SKPipeline([('pipe1', pipe1), ('pipe2', pipe2)])
optimizer = SGD()
dataset = xx
accuracy = model.fit(dataset.drop(['yy']), dataset.yy)
reporter(mean_accuracy=roc_auc)
if __name__ == '__main__':
ray.init()
space = {'eta':hp.uniform('eta',0.001,0.1),
'max_depth':scope.int(hp.quniform('max_depth', 1,5,1)),
'min_child_weight': hp.uniform('min_child_weight', 0.1, 1.5),
'n_estimators': scope.int(hp.quniform('n_estimators',20,200,10)),
'subsample': hp.uniform('subsample',0.5,0.9),
'colsample_bytree': hp.uniform('colsample_bytree',0.5,0.9),
'gamma': hp.uniform('gamma',0,5),
'min_samples_leaf':scope.int(hp.quniform('min_samples_leaf',10,200,20)),
'nrounds':scope.int(hp.quniform('nrounds',100,1500,50))
}
algo = HyperOptSearch(space, max_concurrent=5, metric='roc_auc', mode="max")
tune.run(train_model, num_samples=10, search_alg=algo)
看起来不错。一旦你成功了,就可以把它作为一个例子!我有一个错误,我不知道如何解决。redis.exceptions.ConnectionError:写入套接字时出现错误104。连接被对等方重置。这似乎与数据集的大小有关。我试图遵循这个示例,但我不理解它们是如何在数据集上迭代的。数据是列表/数据帧吗?此外,如果我只使用数据集的一个样本,它也不起作用
def train_func(config,reporter):#添加一个reporter arg model=(…)optimizer=SGD(model.parameters(),momentum=config[“momentum”])dataset=(…)用于枚举(dataset)中的idx(数据,目标):精度=模型。拟合(数据,目标)报告器(平均精度=精度)#报告指标
我们最近在文档中添加了一个XGBoost示例:。此外,如果您使用Redis遇到ConnectionErrors,您可以使用此解决方法:看起来不错。一旦你成功了,就可以把它作为一个例子!我有一个错误,我不知道如何解决。redis.exceptions.ConnectionError:写入套接字时出现错误104。连接被对等方重置。这似乎与数据集的大小有关。我试图遵循这个示例,但我不理解它们是如何在数据集上迭代的。数据是列表/数据帧吗?此外,如果我只使用数据集的一个样本,它也不起作用def train_func(config,reporter):#添加一个reporter arg model=(…)optimizer=SGD(model.parameters(),momentum=config[“momentum”])dataset=(…)用于枚举(dataset)中的idx(数据,目标):精度=模型。拟合(数据,目标)报告器(平均精度=精度)#报告指标
我们最近在文档中添加了一个XGBoost示例:。此外,如果您使用Redis遇到ConnectionErrors,您可以使用以下解决方法: