机器学习与数据科学决策树指南

简介: 一份关于决策树的基本介绍,用实例说明详细讲解。

       还在为如何抉择而感到纠结吗?快采用决策树(Decision Tree)算法帮你做出决定吧。决策树是一类非常强大的机器学习模型,具有高度可解释的同时,在许多任务中也有很高的精度。决策树在机器学习模型领域的特殊之处在于其信息表示的很清楚,而不像一些机器学习方法是个黑匣子,这是因为决策树通过训练学到的“知识”直接形成层次结构,该结构以这样的方式保存和显示学到的知识,即使是非专业人士也可以容易地弄明白。

1_jpeg

现实生活中的决策树

       在现实生活中,我们常常用过类似于决策树的方式来决定自己的生活。例如,决定周末安排什么样的活动。采取怎样的活动可能取决于一些因素,比如是否愿意和朋友一起出去或独自度过周末、周末的天气如何等。假设就这两个因素影响你做出决定的话,如果天气晴朗,并且你的朋友可以一起参与,那么你可能想踢足球。如果是下雨天,可能会一起去看电影。如果朋友有事无法参加,那么无论天气如何,可能会去看会书、玩会电子游戏。

2


       这就是现实中的一个明显的决策树例子,上述已经构建了一个树来模拟一组顺序的、层次化的决策,最终得到一个结果。这里,为了保持树的小巧,还选择了相当“高级”的决策。例如,如果为天气设置了许多可能的选项,例如晴天(25度)、下雨(25度)、晴天(26度)、下雨(26度)、晴天(27度)...... 等等,这样会使得树尺寸会很大,这种精确的温度对于最后做出的决策没有太相关的关系,因为只是想知道是外界是否下雨,根据下雨的情况决定是否外出,而温度的高低对其影响很小。当然,极寒极热天气还是在家比较舒服。
       机器学习中的决策树的概念和上面的思想是相同的,需要构建一个具有一组分层决策的树,最终给出决策结果,即分类或回归预测。尽可能使得决策树尺寸较小,同时要实现高分类/回归准确性。

机器学习中的决策树

       决策树模型的构建一般分为两个步骤:归纳(induction)和修剪(pruning)。归纳是实际构建树的步骤,即根据我们的数据设置所有的分层决策边界。但由于训练决策树的性质,树模型可能容易出现严重的过拟合现象。这个时候就需要采用修剪处理,修剪就是从决策树中删除不必要的分支结构的过程,有效地降低了对抗过拟合的复杂性,并使其更容易解释。

归纳|Induction

从高层次来看,决策树归纳需要经过4个主要步骤:

  • 训练数据集应具有一些特征变量、分类或回归输出;
  • 确定数据集中的“最佳特征”以分割数据;
  • 将数据拆分为包含此最佳特征的可能值的子集,这种分裂基本上定义了树上的节点,即每个节点是基于数据中的某个特征的分裂点;
  • 使用从步骤3创建的数据子集递归地生成新的树节点,保持分裂直到达到一个优化点,在该点已经通过某种度量优化了最大精度,同时最小化了分裂/节点的数量。

       第1步很简单,只需好好分析数据集。对于步骤2,通常使用贪婪算法来选择要使用的特征和特定分割,以最小化代价函数。构建决策树时执行的拆分相当于划分特征空间。我们将迭代地尝试不同的分割点,最后选择成本最低的分割点。也可以只在数据集中的值范围内进行拆分,这将使得我们免于浪费计算来测试那些表现差的分裂点。
       对于回归树,可以使用简单的平方误差作为模型的代价函数:

3


其中,Y是期望输出,Y-hat是预测值,对数据集中的所有样本求和以获得总误差。对于分类,使用的是基尼指数函数(Gini Index Function):

4


       其中pk是特定预测节点中第k类的训练实例样本的比例。理想情况下, 节点的错误值应为零,这意味着每个拆分输出的类正是我们想要的,一旦到达那个特定的决策节点,无论处于决策边界的这一边还是另一边,其输出也确定好了。
       在数据集中具有单个分类的概念被称为信息增益。以下是举例:

5


       如果选择了某种划分,其中每个输出根据输入数据混合类别,这种情况实际上根本没有获得任何信息; 另一方面,如果采取的分割对于每个输出的类的正确率都很高,那么已经获得 了在具体特征变量上以特定方式分割的信息。
       之后是对树模型进行分裂,直到树有数千个分支,但这不是一个好主意!这样得到的决策树将是巨大的、缓慢的,并且会过拟合训练数据集。因此,需要设置一些预定义的停止标准来停止树的构造。
       最常见的停止方法是对分配给每个叶节点的训练样本的数量使用最小数量。如果计数小于某个最小值,则不接受拆分,并将该节点作为最终叶节点。如果所有的叶子节点都成为最终节点,则训练停止。较小的最小数量将提供更精细的分割和信息,但也容易过拟合训练数据。因此,最小数量的取值通常基于数据集设置,具体取决于每个类中预计有多少个示例样本。

修剪|Pruning

       由于训练决策树的性质,可能容易会出现严重的过拟合现象。为每个节点设置最小实例数的正确值可能具有挑战性。大多数情况下,可能只是希望做出合适的决定,而无需最优的决定。因此,无需使得最小值非常小获得非常复杂的树,且有很多分裂是多余的,并没有提高模型的准确性。
       树修剪是一种利用修剪树中不必要的分裂的技术。从上层开始,修剪将树的一部分从严格的决策边界压缩为更平滑、更通用的树,从而有效地降低树的复杂性。决策树的复杂性定义为树中的分裂数。
       一种简单而高效的修剪方法是遍历树中的每个节点,并评估将其移除后其代价函数上的效果。如果移除后,代价函数变化不大,那就修剪掉该节点。

实例实践

       使用Scikit Lear中内置的函数来实现分类和回归的决策树是非常容易的。首先加载数据集并初始化决策树以进行分类。

from sklearn.datasets import load_iris
from sklearn import tree

# Load in our dataset
iris_data = load_iris()

# Initialize our decision tree object
classification_tree = tree.DecisionTreeClassifier()

# Train our decision tree (tree induction + pruning)
classification_tree = classification_tree.fit(iris_data.data, iris_data.target)

       Scikit.还允许使用graphviz库可视化构建的树,它附带了一些选项,这些选项将有助于可视化决策节点,并将模型学到的内容进行分割,下面根据特征名称对节点进行着色,并显示每个节点的类和特征信息:

import graphviz 
dot_data = tree.export_graphviz(classification_tree, out_file=None, 
                     feature_names=iris.feature_names,  
                     class_names=iris.target_names,  
                     filled=True, rounded=True,  
                     special_characters=True)  
graph = graphviz.Source(dot_data)  
graph.render("iris") 

6


       也可以在Scikit Learn中为决策树模型设置几个参数。以下是一些有趣的尝试以获得更好的结果:
  • max_depth:树的最大深度,类似于深度神经网络中的最大层数。较浅会使得模型更快但不准确;更深的模型可能会使得准确性更高,但过拟合的风险也增大,且运行很慢;
  • min_samples_split: 拆分节点所需的最小样本数, 将其设置为合适的值将有助于减轻过拟合;
  • max_features:查找最佳拆分时要考虑的特征数,更高可能意味着更好的结果,但训练也需要更长的时间;
  • min_impurity_split:树生长早期停止的阈值,如果节点的杂质高于阈值,则该节点将分裂,可用于权衡对抗过拟合(高值、小树)与高精度(低值、大树);
  • presort:是否预先分配数据以加快拟合中最佳分割的发现。如果事先对每个特征的数据进行排序,训练算法将更容易找到合适的分裂值;

实际中应用决策树的技巧

以下是决策树的优缺点总结,可以帮助读者确定它是否适合各自的问题,以及有关如何有效应用它们的一些提示:

优点| Pros

  • 易于理解和解释:在每个节点都能够确切地看到模型做出了什么决定。在实践中,能够完全理解准确度和误差来自何处,模型可以很好地处理哪种类型的数据,以及输出如何受到特征值的影响。Scikit learn的可视化工具是可视化和理解决策树的绝佳选择;
  • 需要准备很少的数据:许多机器学习模型可能需要大量的数据预处理,例如归一化,并且可能需要复杂的正则化方案。另一方面,在调整了一些参数后,决策树可以很好地做到开箱即用;
  • 使用树进行推理的计算成本与训练树的数据集呈对数关系,这是一个巨大的优势,意味着输入更多的数据不一定会对推理速度产生巨大的影响;

缺点|Cons

  • 由于训练的性质,过拟合在决策树中很常见。通常建议执行某种类型的降维,例如PCA, 以便树不必学习如此多的特征上的拆分;
  • 出于与过拟合情况类似的原因,决策树也容易变得偏向于在数据集中占多数的类别,对不平衡数据进行某种类平衡(例如类权重、采样或专门的损失函数)操作是一个不错的主意。

作者信息

George Seif,机器学习和深度学习
本文由阿里云云栖社区组织翻译。
文章原标题《A Guide to Decision Trees for Machine Learning and Data Science》,译者:海棠,审校:Uncle_LLD。
文章为简译,更为详细的内容,请查看原文

相关文章
|
21天前
|
机器学习/深度学习 存储 算法
决策树和随机森林在机器学习中的应用
在机器学习领域,决策树(Decision Tree)和随机森林(Random Forest)是两种非常流行且强大的分类和回归算法。它们通过模拟人类决策过程,将复杂的数据集分割成易于理解和处理的子集,从而实现对新数据的准确预测。
57 10
|
28天前
|
机器学习/深度学习 数据采集 监控
探索机器学习:从数据到决策
【9月更文挑战第18天】在这篇文章中,我们将一起踏上一段激动人心的旅程,穿越机器学习的世界。我们将探讨如何通过收集和处理数据,利用算法的力量来预测未来的趋势,并做出更加明智的决策。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和思考方式。
|
1月前
|
机器学习/深度学习 算法 Python
从菜鸟到大师:一棵决策树如何引领你的Python机器学习之旅
【9月更文挑战第9天】在数据科学领域,机器学习如同璀璨明珠,吸引无数探索者。尤其对于新手而言,纷繁复杂的算法常让人感到迷茫。本文将以决策树为切入点,带您从Python机器学习的新手逐步成长为高手。决策树以其直观易懂的特点成为入门利器。通过构建决策树分类器并应用到鸢尾花数据集上,我们展示了其基本用法及效果。掌握决策树后,还需深入理解其工作原理,调整参数,并探索集成学习方法,最终将所学应用于实际问题解决中,不断提升技能。愿这棵智慧之树助您成为独当一面的大师。
32 3
|
1月前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【9月更文挑战第7天】当我们身处数据海洋,如何提炼出有价值的洞察?决策树作为一种直观且强大的机器学习算法,宛如智慧之树,引领我们在繁复的数据中找到答案。通过Python的scikit-learn库,我们可以轻松实现决策树模型,对数据进行分类或回归分析。本教程将带领大家从零开始,通过实际案例掌握决策树的原理与应用,探索数据中的秘密。
41 1
|
2月前
|
机器学习/深度学习 算法 数据挖掘
【白话机器学习】算法理论+实战之决策树
【白话机器学习】算法理论+实战之决策树
|
2月前
|
机器学习/深度学习 算法 自动驾驶
揭秘机器学习模型的决策之道
【8月更文挑战第22天】本文将深入浅出地探讨机器学习模型如何从数据中学习并做出预测。我们将一起探索模型背后的数学原理,了解它们是如何被训练以及如何对新数据进行预测的。文章旨在为初学者提供一个清晰的机器学习过程概述,并启发读者思考如何在自己的项目中应用这些技术。
|
2月前
|
机器学习/深度学习 API 网络架构
"解锁机器学习超级能力!Databricks携手Mlflow,让模型训练与部署上演智能风暴,一触即发,点燃你的数据科学梦想!"
【8月更文挑战第9天】机器学习模型的训练与部署流程复杂,涵盖数据准备、模型训练、性能评估及部署等步骤。本文详述如何借助Databricks与Mlflow的强大组合来管理这一流程。首先需在Databricks环境内安装Mlflow库。接着,利用Mlflow跟踪功能记录训练过程中的参数与性能指标。最后,通过Mlflow提供的模型服务功能,采用REST API或Docker容器等方式部署模型。这一流程充分利用了Databricks的数据处理能力和Mlflow的生命周期管理优势。
94 7
|
2月前
|
机器学习/深度学习 算法 搜索推荐
基于机器学习的用户行为分析:深入洞察与精准决策
【8月更文挑战第3天】基于机器学习的用户行为分析为企业提供了深入了解用户需求、优化产品设计和制定精准营销策略的有力工具。随着人工智能和大数据技术的不断发展,用户行为分析将更加智能化和个性化。未来,我们可以期待更加高效、精准的机器学习算法和模型的出现,以及更多创新性的应用场景的拓展。同时,也需要关注数据隐私和安全性问题,确保用户数据的安全和合规使用。
|
2月前
|
机器学习/深度学习 算法 Python
决策树下的智慧果实:Python机器学习实战,轻松摘取数据洞察的果实
【8月更文挑战第3天】在数据的海洋中探寻真知,决策树犹如智慧之树,以其直观易懂的强大功能,引领我们逐步缩小决策范围,轻松获取数据洞察。本篇将带您踏上Python机器学习之旅,从理解决策树为何受青睐开始,通过scikit-learn库实现鸢尾花数据集分类,解析其决策机制,并掌握调参技巧,最终优化模型性能,共同摘取数据科学的甜美果实。
48 1
|
2月前
|
机器学习/深度学习 数据可视化 算法
决策树VS世界:掌握Python机器学习中的这棵树,决策从此不再迷茫
【8月更文挑战第2天】在数据驱动时代,决策树作为一种直观且易于解释的机器学习方法,因其强大的分类与回归能力备受青睐。本文介绍决策树的基础概念:通过属性测试划分数据,优化选择以提高预测准确度。使用Python的scikit-learn库,我们演示了如何加载鸢尾花数据集,构建并训练决策树模型,评估其准确性,以及利用`plot_tree`函数可视化决策过程,从而更好地理解模型的工作原理。掌握这些技能,你将在面对复杂决策时更加自信。
22 2