You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从sklearn的RandomForestRegressor获取单棵树的预测结果?

从sklearn的RandomForestRegressor中获取单棵树的预测结果,最合适的方法是什么?

我曾实现一个子类,手动调用每个estimator的predict方法并对结果取平均。虽然大多数情况下有效,但这绕过了森林predict方法的验证与并行机制,且似乎不支持pandas输出。由于决策树拟合时未使用标签,因此在predict时传入DataFrame会导致森林报错。

距离上次相关提问已有一段时间,是否有更优的方法?

class RFRegressor(RandomForestRegressor):
    """
    随机森林模型。
    """
    def predict(self, X):
        self.estimators_y = np.array([e.predict(X) for e in self.estimators_])
        self.estimators_std = np.std(self.estimators_y , axis=0)

        return np.average(self.estimators_y, axis=0)

    def clearCache(self):
        delattr(self, 'estimators_y')
        delattr(self, 'estimators_std')

其他帖子建议使用apply方法获取叶节点索引,提取树的预测值并取平均。这段代码(我认为)可以运行,但速度极慢。我不太擅长Numpy,相信它可以被优化得更高效。

values = [[np.average(rfr.estimators_[i].tree_.value[leaf], axis=1) 
           for i, leaf in enumerate(sample)] 
          for sample in rfr.apply(X)]
avg = np.average(values, axis=1)

内容的提问来源于stack exchange,提问作者Mike Warren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:55:10