访问随机森林模型(Python、scikit-learn)中单个树的底层(tree_)对象

Posted

技术标签:

【中文标题】访问随机森林模型(Python、scikit-learn)中单个树的底层(tree_)对象【英文标题】:Access the underlying (tree_) object of a single tree in a Random-Forest model (Python, scikit-learn) 【发布时间】:2016-09-20 21:25:39 【问题描述】:

我需要将 Random Fores 模型转换为基于规则的模型或基于 (if-then) 的模型。我现在已经创建了我的模型,并且调整得很好。我面临的问题是我无法“访问”(base_estimator)或底层(tree_object),这使得创建一个可以从森林中的树中提取规则的函数成为可能。如果您能帮助我解决这个问题,我将不胜感激。创建我使用的模型:

    estimator = RandomForestRegressor(oob_score=True, n_estimators=10,max_features='auto')

我尝试使用estimator.estimators_ 属性访问单个树,然后使用例如estimator.estimators_[0].tree_ 来获取用于构建森林的决策树(DecisionTreeRegressor 对象)。不幸的是,这种方法不起作用。

如果可能的话,我想要类似的东西:

   estimator = RandomForestRegressor(oob_score=True, n_estimators=10,max_features='auto')
   estimator.fit(tarning_data,traning_target)
   tree1 = estimator.estimators_[0]
   leftChild = tree1.tree_.children_left
   rightChild = tree1.tree_.children_right

【问题讨论】:

【参考方案1】:

要在随机森林模型中访问DecisionTreeRegressor 对象的底层结构,您需要执行以下步骤:

estimator = RandomForestRegressor(oob_score=True,n_estimators=10,max_features='auto')
estimator.fit(tarning_data,traning_target)
tree1 = estimator.estimators_[0]
leftChilds = tree1.tree_.children_left # array of left children
rightChilds = tree1.tree_.children_right #array of right children

即基本上是问题中已经描述的内容。

【讨论】:

以上是关于访问随机森林模型(Python、scikit-learn)中单个树的底层(tree_)对象的主要内容,如果未能解决你的问题,请参考以下文章

Spark MLlib速成宝典模型篇06随机森林Random Forests(Python版)

随机森林模型及案例(Python)

使用 python sklearn 增量训练随机森林模型

将 sklearn 随机森林 Python 模型导出到 Android

在 Python 中创建随机森林预测模型时面临错误

python基于随机森林模型的预测概率和标签信息可视化ROC曲线