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

Posted

技术标签:

【中文标题】model.LGBMRegressor.fit(x_train, y_train) 和 lightgbm.train(train_data, valid_sets = test_data) 有啥区别?【英文标题】:What is the difference between model.LGBMRegressor.fit(x_train, y_train) and lightgbm.train(train_data, valid_sets = test_data)?model.LGBMRegressor.fit(x_train, y_train) 和 lightgbm.train(train_data, valid_sets = test_data) 有什么区别? 【发布时间】:2019-11-24 13:50:04 【问题描述】:

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

我希望它大致相同,但事实并非如此。据我了解,一个是助推器,另一个是回归器?

【问题讨论】:

我的猜测是,fit 只是 light gbm 的 sklearn api 使用的方法(使 light gbm 在为 sklearn 构建的库中可用),train 是 lightgbm 的本机方法.所以差异可能只是由不同的默认值造成的。 您有什么见解吗?我也有同样的疑问。 我也有同样的问题,在使用相同的超参数集测试 20 次运行后,使用 sklearn fit 总是给我更好的结果,我不明白为什么 很遗憾,lightgbm 支持团队真的很弱,他们已经关闭了一个讨论主题:github.com/microsoft/LightGBM/issues/2930。我有同样的问题。我没有在其中任何一个中设置任何参数,但我发现这两个 API 之间存在巨大差异。 【参考方案1】:

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

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

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

【讨论】:

以上是关于model.LGBMRegressor.fit(x_train, y_train) 和 lightgbm.train(train_data, valid_sets = test_data) 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

x=x+=x-=x-x;

为啥 ('x',) 中的 'x' 比 'x' == 'x' 快?

是∃x(P(x))是∃x(x∈S∧P(x))还是∃x(x∈S→P(x))的缩写?

python视频b'\x1aE\xdf\xa3\x01\x00\x00\x00\x00\x00\x00\

二进制数组在 C# 中将映射缩减为矩形

springboot redistemplate值有 x00数据