python - model.LGBMRegressor.fit(x_train, y_train) 和 lightgbm.train(train_data, valid_sets = test_data) 有什么区别?
问题描述
我尝试了两种实现轻 GBM 的方法。期望它返回相同的值,但它没有。
我认为lgb.LightGBMRegressor()
并且lgb.train(train_data, test_data)
会返回相同的准确性,但事实并非如此。所以我想知道为什么?
打破数据的功能
def dataready(train, test, predictvar):
included_features = train.columns
y_test = test[predictvar].values
y_train = train[predictvar].ravel()
train = train.drop([predictvar], axis = 1)
test = test.drop([predictvar], axis = 1)
x_train = train.values
x_test = test.values
return x_train, y_train, x_test, y_test, train
这就是我分解数据的方式
x_train, y_train, x_test, y_test, train2 = dataready(train, test, 'runtime.min')
train_data = lgb.Dataset(x_train, label=y_train)
test_data = lgb.Dataset(x_test, label=y_test)
预测模型
lgb1 = LMGBRegressor()
lgb1.fit(x_train, y_train)
lgb = lgb.train(parameters,train_data,valid_sets=test_data,num_boost_round=5000,early_stopping_rounds=100)
我希望它大致相同,但事实并非如此。据我了解,一个是助推器,另一个是回归器?
解决方案
LGBMRegressor
是sklearn接口。该.fit(X, y)
调用是用于模型训练的标准 sklearn 语法。它是一个类对象,您可以将其用作 sklearn 生态系统的一部分(用于运行管道、参数调整等)。
lightgbm.train
是 lightgbm 本身的核心训练 API。
XGBoost 和许多其他流行的 ML 训练库也有类似的区别(核心 API 使用xgb.train(...)
,例如 sklearn API 使用XGBClassifier
or XGBRegressor
)。
推荐阅读
- r - 向量化的 Mutate_at 和 ifelse 问题
- java - Quarkus Reactive Postgresql 多个查询
- typescript - 错误代码 16 和错误代码 14,带有调度云功能
- javascript - 使用 EJS 和 Node 动态渲染具有函数的 HTML div
- typescript - 如何在 TypeScript 的类原型中实现迭代器?
- c - STM32 ADC(双同时)扫描模式功能影响采样率?
- javascript - 为什么 Number() 方法会在数字长度大于 15 时增加数字的值?
- c++ - 将 Parquet 文件读入 C++ 结构数组
- plsql - 如何使用shell函数修改表中一行的每个值?
- java - 无法使用捆绑将数据从活动发送到片段