如何从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
相关产品推荐
相关产品推荐

