让我们解决过度拟合!决策树的成本复杂性修剪快速指南
了解决策树中的过拟合问题,并使用Python中的Scikit-Learn通过最小的成本复杂性修剪来解决
决策树是数据科学家工具包中提供的最直观,最有效的工具之一。它具有倒置的树状结构,该结构曾经仅用于决策分析,但现在也是一种出色的
机器学习算法,尤其是当我们手头有分类问题时。
这些决策树以捕获数据模式的能力而闻名。但是,多余的东西都是有害的,对吗?决策树之所以臭名昭著,是因为它们可能过于依赖其所训练的数据。
因此,我们的树由于无法处理一组新的值,因此在部署时效果不佳。
特色图像分割决策树
但是,不用担心!就像熟练的技工可以在其工具箱中轻松获得各种尺寸的扳手一样,熟练的数据科学家也拥有一套处理各种问题的技术。这就是我们将在本文中探讨的内容。
修剪在决策树中的作用
修剪是用于克服过度拟合问题的技术之一。从字面意义上讲,修剪是一种涉及选择性去除树木(或植物)某些部分(例如树枝,芽或根)以改善树木结构并促进健康成长的做法。这也正是修剪对我们的决策树所做的。它使它具有通用性,因此如果我们向它提供任何新类型的数据,它都可以适应,从而解决了过拟合的问题。
它减小了决策树的大小,这可能会稍微增加您的训练错误,但会大大减少您的测试错误,因此使其更具适应性。
最小的成本复杂性修剪是决策树修剪的类型之一。
该算法通过称为复杂度参数的α(≥0)进行参数化。
复杂度参数用于定义成本复杂性量度,R α(T)给定树T的:- [R α(T)= R(T)+α| T |
| T | 是T中的终端节点数,R(T)传统上定义为终端节点的总误分类率。
在其0.22版本中,Scikit-learn在决策树中引入了称为ccp_alpha的参数(是!它是Cost Complexity Pruning-Alpha的缩写),该参数可用于执行相同的操作。
用Python构建决策树
我们将使用虹膜数据集来拟合决策树。您可以在此处下载数据集。
首先,让我们导入所需的基本库和数据集:
数据集如下所示:
我们的目标是根据花朵的间隔长度和宽度来预测花朵的种类。
我们将数据集分为两部分-训练和测试。我们这样做是为了能够看到我们的模型在看不见的数据上的表现。我们将使用train_test_split功能从sklearn.model_selection分裂的数据集。
现在,让我们将“决策树”安装到火车零件上,并在测试和火车上进行预测。我们将使用DecisionTreeClassifier从sklearn.tree用于这一目的。
默认情况下,“决策树”功能不执行任何修剪,并允许该树尽可能多地增长。如下所示,我们在火车和测试零件上的准确度得分分别为0.95和0.63。可以说我们的模型过拟合,即记忆了火车零件,但在测试零件上的表现却不尽相同。
sklearn中的DecisionTree具有一个称为cost_complexity_pruning_path的函数,该函数提供了修剪期间子树的有效alpha值以及相应的杂质。换句话说,我们可以使用以下alpha值来修剪决策树:
我们将设置这些alpha值并将其传递给DecisionTreeClassifier的ccp_alpha参数。通过遍历alphas数组,我们将在数据集的Train和Test部分上找到准确性。
从上面的图中可以看出,在alpha = 0.01和0.02之间,我们获得了最大的测试精度。尽管我们的火车精度已降至0.8,但我们的模型现在更通用了,并且在看不见的数据上会表现更好。
题库