python - 使用 LightGBM 回归的网格搜索
问题描述
我想使用 Light GBM 训练回归模型,以下代码可以正常工作:
import lightgbm as lgb
d_train = lgb.Dataset(X_train, label=y_train)
params = {}
params['learning_rate'] = 0.1
params['boosting_type'] = 'gbdt'
params['objective'] = 'gamma'
params['metric'] = 'l1'
params['sub_feature'] = 0.5
params['num_leaves'] = 40
params['min_data'] = 50
params['max_depth'] = 30
lgb_model = lgb.train(params, d_train, 1000)
#Prediction
y_pred=lgb_model.predict(X_test)
mae_error = mean_absolute_error(y_test,y_pred)
print(mae_error)
但是当我继续使用 GridSearchCV 时,我遇到了问题。我不完全确定如何正确设置。我找到了有用的资源,例如这里,但它们似乎正在使用分类器。
第一次尝试:
from sklearn.metrics import make_scorer
score_func = make_scorer(mean_absolute_error, greater_is_better=False)
model = lgb.LGBMClassifier(
boosting_type="gbdt",
objective='regression',
is_unbalance=True,
random_state=10,
n_estimators=50,
num_leaves=30,
max_depth=8,
feature_fraction=0.5,
bagging_fraction=0.8,
bagging_freq=15,
learning_rate=0.01,
)
params_opt = {'n_estimators':range(200, 600, 80), 'num_leaves':range(20,60,10)}
gridSearchCV = GridSearchCV(estimator = model,
param_grid = params_opt,
scoring=score_func)
gridSearchCV.fit(X_train,y_train)
gridSearchCV.grid_scores_, gridSearchCV.best_params_, gridSearchCV.best_score_
,之前给了我一堆错误:
“ValueError:未知标签类型:'连续'”
更新:我使代码运行与 LGBMModel 切换 LGBMClassifier。我是否也应该尝试使用 LGBMRegressor,或者这无关紧要?(来源:https ://lightgbm.readthedocs.io/en/latest/_modules/lightgbm/sklearn.html )
解决方案
首先,不清楚数据的性质是什么,因此哪种模型更适合。你使用 L1 度量,所以我假设你有某种回归问题。如果不是,请纠正我并详细说明您为什么使用 L1 度量标准。如果是,那么根本不清楚你为什么要使用LGBMClassifier
,因为它服务于分类问题(正如@bakka 已经指出的那样)。
请注意,实际上LGBMModel
与LGBMRegressor
(您可以在代码中看到它)相同。但是,不能保证这种情况在长期的未来会保持不变。因此,如果您想编写良好且可维护的代码 - 不要使用基类LGBMModel
,除非您非常清楚自己在做什么,为什么以及后果是什么。
关于参数范围:在 github 上查看这个答案
推荐阅读
- android - Android:跨应用生命周期持久化数据
- javascript - Sweetalert2:完全禁用版本> = 9.0.0的动画的正确方法
- javascript - 使用 selenium.WebDriver 时出现错误:参数列表后丢失)
- flutter - 绘制自定义形状 Flutter
- oauth-2.0 - Quarkus Web 应用程序无法使用 JWT 和 Keycloak 进行授权
- django - 如何在 Django 中显示未读通知计数
- wordpress - 错误:WooCommerce 避免为非登录用户添加到购物车
- php - 为什么我得到“抛出新的 PostTooLargeException;” 当我有验证规则“size:1000”时尝试上传 10MB 文件时出错
- shopify - Shopify Plus 启用 Checkout.liquid
- ruby - 如何根据 Ruby 的 OpenApi 规范验证 JSON 有效负载?