我想创建一个决策树,然后在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)
但是我收到错误ValueError:在非包中尝试相对导入。 这不是我导入的方式吗?我是否需要以不同的方式保存文件?谢谢。
答案 0 :(得分:1)
Scikit学习版本0.22在DecisionTreeClassifier中引入了修剪功能。名为ccp_alpha
的新超参数可让您校准修剪量。请参阅文档here。
答案 1 :(得分:0)
在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
答案 2 :(得分:-1)
如果您真的想从2012年开始使用sgenoud's 7-year-old fork中的scikit-learn,请在存储库的基本目录上使用git clone
,不要只是尝试复制/克隆单个文件(当然,自2012年以来,您将失去任何改进/修复;请回到v 0.12)
但是这个想法听起来是个误解:您可以通过更改参数来提早停止DecisionTreeClassifier
parameters max_depth, min_samples, min_samples_leaf, min_impurity_decrease, min_impurity_split ,从而获得较浅/修剪的树木。查看文档并使用参数,它们可以满足您的要求。我从事ML已有10年以上的历史,从未见过需要破解DT源的事情。有很多充分的理由不这样做,也没有充分的理由。
(如果您尝试使用DecisionTreeClassifier参数,但仍然无法获得所需的信息,请在此处使用虹膜等开源数据集发布可复制的代码示例。)