我们可以从scikit-learn梯度提升决策树中提取最终决策规则吗?

时间:2019-04-23 07:49:27

标签: python machine-learning scikit-learn gradient decision-tree

我必须使用Gradient Booted Decision Tree在Python中构建分类模型,并获取模型参数(节点上的值)以在硬件上实现。据我了解,梯度增强决策树的最终结果是一个普通的决策树分类器,具有用于对输入数据进行分类的阈值。

我已阅读以下帖子:

1-Extracting decision rules from GradientBoostingClassifier

2-how to extract decision rules of GradientBosstingClassifier

正如他们所说,

  

model.estimators_包含模型组成的所有单个分类器。对于GradientBoostingClassifier,这是一个二维形状的numpy数组(n_estimators,n_classes),每个项目都是DecisionTreeRegressor。

他们展示了在构建梯度决策树分类器的过程中获取用作估计量的每个决策树阈值的方法。我不确定model.estimators是否包含最终决策树。关于集成分类器的scikit-learn文档也没有提及。

请帮助我如何从scikit-learn中提取梯度增强决策树模型的最终参数(节点上的值)。 或者,如果我对scikit-learn中的Gradient Boosted DT有误解,请告诉我。

1 个答案:

答案 0 :(得分:0)

  

我不确定model.estimators是否包含最终决策树[...]或我是否对梯度增强DT有误解

您似乎误解了一个关键的细节:GBT中没有任何“最终”决策树; GBT的工作方式大致为:

  • 集合中的每棵树都根据其自身的阈值进行分类
  • 对集合中所有树木的输出进行加权平均,以产生集合输出

根据您的评论:

  

我的目标是获取提供最佳分类结果的树的参数

同样,这与增强无关,正如您在下一条注释中正确指出的那样,增强是顺序生长树,每棵树都专注于先前树的“错误”。但是

  

获得的模型是决策树

正如我已经解释的那样,

不正确是正确的(最终模型是整个可加合集)。因此,在这里选择任何一棵树都没有任何意义。

鉴于这些澄清,您链接到的线程的第1个给出了如何为集合中的所有树木提取规则的阈值(老实说,不要知道它在实践中是否真的有用)。