gpt4 book ai didi

python-3.x - XGboost:无法传递管道中 eval_set 的验证数据

转载 作者:行者123 更新时间:2023-11-30 08:36:58 25 4
gpt4 key购买 nike

我想在管道中为 XGboost 模型实现 GridSearchCV。我有数据预处理器,在代码上方定义,还有一些网格参数

XGBmodel = XGBRegressor(random_state=0)
pipe = Pipeline(steps=[
('preprocess', preprocessor),
('XGBmodel', XGBmodel)
])

我想传递这些拟合参数

fit_params = {"XGBmodel__eval_set": [(X_valid, y_valid)], 
"XGBmodel__early_stopping_rounds": 10,
"XGBmodel__verbose": False}

我正在尝试拟合模型

searchCV = GridSearchCV(pipe, cv=5, param_grid=param_grid, fit_params=fit_params)
searchCV.fit(X_train, y_train)

但我在使用 eval_set 时遇到错误:DataFrame.dtypes for data must be int, float or bool

我猜这是因为验证数据没有经过预处理,但是当我搜索谷歌时,我发现到处都是通过这种方式完成的,而且似乎应该可以工作。我还尝试找到一种方法来单独对验证数据应用预处理器,但是如果不先拟合训练数据,就无法转换验证数据。

完整代码

columns = num_cols + cat_cols
X_train = X_full_train[columns].copy()
X_valid = X_full_valid[columns].copy()

num_preprocessor = SimpleImputer(strategy = 'mean')
cat_preprocessor = Pipeline(steps=[
('imputer', SimpleImputer(strategy = 'most_frequent')),
('onehot', OneHotEncoder(handle_unknown='ignore'))
])

preprocessor = ColumnTransformer(transformers=[
('num', num_preprocessor, num_cols),
('cat', cat_preprocessor, cat_cols)
])

XGBmodel = XGBRegressor(random_state=0)
pipe = Pipeline(steps=[
('preprocess', preprocessor),
('XGBmodel', XGBmodel)
])

param_grid = {
"XGBmodel__n_estimators": [10, 50, 100, 500],
"XGBmodel__learning_rate": [0.1, 0.5, 1],
}

fit_params = {"XGBmodel__eval_set": [(X_valid, y_valid)],
"XGBmodel__early_stopping_rounds": 10,
"XGBmodel__verbose": False}

searchCV = GridSearchCV(pipe, cv=5, param_grid=param_grid, fit_params=fit_params)
searchCV.fit(X_train, y_train)

有没有办法在管道中预处理验证数据?或者也许完全不同的方式来实现这个东西?

最佳答案

没有什么好的办法。如果在拟合模型之前您有很长的变压器管道,那么您可以考虑拟合管道中的变压器,然后单独应用模型。

根本问题是管道没有模型拟合中使用的验证集的概念。您可以在 LightGBM github here 上看到讨论。他们的建议是在安装完整的管道之前预先训练变压器并将其应用于验证数据。如果您使用快速转换器,这可能没问题,但在极端情况下可能会使 CPU 时间加倍。

关于python-3.x - XGboost:无法传递管道中 eval_set 的验证数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56346632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com