【发布时间】:2017-11-26 00:58:25
【问题描述】:
在使用 sci-kit learn 时是否可以定义自定义决策树叶类型?
我想使用更复杂的叶子来训练随机森林,例如包含线性回归量或高斯的叶子。这可能需要定义自定义叶类型并实施新的拆分标准。这可能吗?
谢谢。
【问题讨论】:
标签: scikit-learn
在使用 sci-kit learn 时是否可以定义自定义决策树叶类型?
我想使用更复杂的叶子来训练随机森林,例如包含线性回归量或高斯的叶子。这可能需要定义自定义叶类型并实施新的拆分标准。这可能吗?
谢谢。
【问题讨论】:
标签: scikit-learn
这是可以做到的,但不是很明智。
sklearn 中的决策树是用 Cython(C++ 和 Python 的混合体)编写的,并使用预先确定的 Cython 拆分标准列表。这使得 sklearn 树非常快,但不容易定制。
如果您使用纯 Python 编写自己的叶子和拆分器,则必须将它们与 sklearn Cython 代码集成。这是可能的,但可能是漫长而艰难的。最后,你的代码会很慢,因为它会在每个节点从 C++ 调用 Python。因此,您从头开始编写树构建算法会更便宜。
如果您非常认真地努力,您可以在 Cython 中编写叶子和拆分器,以使其易于与 scikit-learn 集成并尽可能快。但是这个解决方案不会那么自定义,因为您将无法从 Python 添加另一个叶子模型。
如果你想快速尝试这样一个模型,你可以使用 Weka 中的 M5 算法。
如果你问我的意见,我几乎不明白你为什么要在随机森林的每一片叶子中添加更复杂的模型——它已经足够复杂了。
【讨论】: