如何获得梯度提升模型的系数?

机器算法验证 r Python 助推
2022-03-16 20:51:06

gbm我尝试在 R 和sklearnPython中使用梯度提升模型。但是,它们都不能提供模型的系数。对于gbm在 R 中,似乎可以获得树结构,但我找不到获取系数的方法。因为sklearn在 Python 中,我什至看不到树结构,更不用说系数了。谁能给我一些帮助?

在网上搜索了几个小时后,我仍然找不到答案。自 2009 年以来,我可以找到类似的问题,但没有答案。像下面这样:

这让我怀疑 R 和 Python 是否主要由学术界人士使用,因此大多数用户并不关心如何在工业中使用它们。例如,如果你想在某个不运行 Python 的实时平台上实现结果,你会怎么做?

4个回答

我在“工业”中使用 R。GBM 和其他基于树的方法没有“系数”,因此尝试提取它们是没有意义的。

您可以做的是将每棵树编码为 SQL 查询。这需要一点努力,但是一旦你可以为一棵树做这件事,你就可以遍历模型中的所有树,生成大约 500 个 SQL 查询,并使用它们在你选择的数据库上对你的模型进行评分。

就像前面提到的 Zach 一样,“系数”并不真正适用于 GBM。我不确定你是如何实现它的,但是在像 CARET(for R)这样的包中,你可以在模型构建过程中查看变量的重要性。你也可以在 R 中的 GBM 包的小插图中看到类似的东西。在 GBM 包中,我认为它被称为相对影响;其背后的数学原理在弗里德曼 2001 年的论文中。

这两种方法都会在某种程度上为您提供变量在使用 GBM 对目标进行分类时的“有用”/“重要”程度的排名。

假设您的其他平台与 PMML 兼容,则使用PMML将模型传输到其他平台。

对于 python,您可以使用 import _pickle as cPickle 将模型保存到 pickle 文件并从 pickle 文件中恢复模型。

存储模型的代码:

with open("gbmFit.pkl", "wb") as pickle_file:
    cPickle.dump(model, pickle_file)

要恢复模型,可以使用以下代码:

with open('gbmFit.pkl', 'rb') as pickle_file:
    gbmfit = cPickle.load(pickle_file)
    y_pred_restore = gbmfit.predict(np.array(x1 + 1).reshape((-1, 1)))

现在您可以保存模型并保存以供以后实时使用。