我想创建一个决策树,然后在python中修剪它。但是,sklearn 本身不支持修剪。通过互联网搜索,我找到了这个:https://github.com/sgenoud/scikit-learn/blob/4a75a4aaebd45e864e28cfca897121d1199e41d9/sklearn/tree/tree.py
但是我不知道如何使用该文件。我试过了:
from sklearn.datasets import load_iris
import tree
clf = tree.DecisionTreeClassifier()
iris = load_iris()
clf = clf.fit(iris.data, iris.target)
但是我收到错误值错误:尝试在非包中相对导入。这不是我导入的方式吗?我是否需要以其他方式保存文件?谢谢。
Scikit-learn 0.22 版本在 DecisionTreeClassifier 中引入了修剪。一个名为 ccp_alpha
的新超参数可让您校准修剪量。请参阅此处的文档。
如果你真的想使用 sgenoud 在 2012 年 7 年前的 scikit-learn 分支,git clone
在存储库的基本目录中,不要只是尝试复制/克隆单个文件(当然,自 2012 年以来您将失去任何改进/修复;回到 v 0.12)
但这个想法听起来很误解:您可以通过更改参数来获得较浅/修剪的树木,以获得早期停止DecisionTreeClassifier
参数max_depth、min_samples、min_samples_leaf、min_impurity_decrease min_impurity_split。查看文档并使用参数,它们会满足您的要求。我已经做了 ML>10 年了,从来没有见过需要破解 DT 源代码。有很多很好的理由不这样做,也没有充分的理由。
(如果您尝试使用 DecisionTreeClassifier 参数,但仍然无法获得所需的内容,请使用 iris 等开源数据集在此处发布可重现的代码示例。
在 Python 中,模块(=其他语言中的包)通常定义相互依赖的例程。在这些情况下,您不能只下载一个.py文件并将其放入工作区(即源所在的目录)。相反,将整个包下载到该文件夹中,然后相对导入,即如下所示:
# a general import, should only be used if you are absolutely certain that there will be no namespace conflicts
from sklearn.tree.tree import *
# a more "safe" way is to import the classes/functions you need explicitely
from sklearn.tree.tree import DecisionTreeClassifier