model.LGBMRegressor.fit(x_train, y_train)和lightgbm.train(train_data, valid_sets = test_data)有什么区别?

16

我尝试了两种实现Light 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)

我希望它大致相同,但实际上并不是。据我所知,一个是增强器,另一个是回归器?


2
我的猜测是,fit只是sklearn api中light gbm使用的方法(使light gbm可在为sklearn构建的库中使用),而train是lightgbm的本地方法。因此,差异可能仅由不同的默认值引起。 - jottbe
你有什么想法吗?我也有完全相同的疑问。 - Gustavo
我有同样的问题,在使用相同的超参数集对每个运行进行了20次测试后,使用sklearn fit始终给出更好的结果,我不明白为什么。 - ADJ
很不幸,lightgbm的支持团队非常薄弱,他们关闭了一个讨论主题:https://github.com/microsoft/LightGBM/issues/2930。我也遇到了同样的问题。我在两个API中都没有设置任何参数,但是结果却有很大的差异。 - Moradnejad
1个回答

12

LGBMRegressorsklearn 的接口。调用 .fit(X, y) 是模型训练的标准 sklearn 语法。它是一个类对象,可作为 sklearn 生态系统的一部分使用(用于运行管道、参数调整等)。

lightgbm.train 是 lightgbm 自身的核心训练 API。

XGBoost 和许多其他流行的 ML 训练库也具有类似区别(例如核心 API 使用 xgb.train(...),而 sklearn API 使用 XGBClassifierXGBRegressor)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接