0

我想创建一个决策树,然后在 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: Attempted relative import in non-package. 这不是我导入的方式吗?我需要以其他方式保存文件吗?谢谢你。

4

3 回答 3

1

Scikit-learn 0.22 版在 DecisionTreeClassifier 中引入了剪枝。一个名为的新超参数ccp_alpha可让您校准修剪量。请参阅此处的文档。

于 2020-01-05T07:53:15.500 回答
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
于 2015-01-23T22:44:36.840 回答
0

如果你真的想在 2012 年使用sgenoud 的 7 年前scikit-learngit clone分支,在 repo 的基本目录上,不要只是尝试复制/克隆单个文件(当然你会丢失任何自 2012 年以来的改进/修复;回到v 0.12

但是这个想法听起来是错误的:您可以通过更改参数来获得较浅/修剪的树,以获得早期停止DecisionTreeClassifier参数 max_depth、min_samples、min_samples_leaf、min_impurity_decrease、min_impurity_split。请参阅文档并使用参数,它们会满足您的要求。我从事 ML 已有 10 年以上,从未见过需要破解 DT 源。有很多充分的理由不这样做,也没有充分的理由这样做。

(如果您尝试使用 DecisionTreeClassifier 参数但仍然无法获得您想要的东西,请使用开源数据集(如 iris 等)在此处发布可重现的代码示例。)

于 2019-10-05T02:20:58.443 回答