专栏首页深度学习自然语言处理在茫茫决策树入门帖里,我强推这篇(附可视化图)

在茫茫决策树入门帖里,我强推这篇(附可视化图)

来源:Data Science and Robots Blog

编译:Bing

编者按:作为机器学习两大重要算法——随机森林和梯度树提升的基础,决策树是每位机器学习从业者都应该理解的概念。本文作者Brandon Rohrer用两个日常的例子为我们讲解了决策树的原理,过程清晰易读,适合入门学习。文末附有原文链接,感兴趣的读者可移步原文观看视频版本。以下是论智的编译。

决策树是我最喜欢的模型之一,它们非常简单但是很强大。事实上,Kaggle中大多数表现优秀的项目都是XGBoost和一些非常绝妙的特征工程的结合,XGBoost是决策树的一种变体。决策树背后的概念非常简洁明了,下面就用具体案例解释一下。

早上几点出门才能不迟到?

假设我们现在要创建一个数据集,记录每天上班离开家的时间以及能否准时到达公司。下图就记录了一些情况,可以看到大多数情况下,只要在8:15之前出门就能准时上班,在这之后就会经常迟到。

你可以在决策树中总结出这一情况。首先第一个分叉点可以问:“是否在8:15之前离开?”这里有两种回答:“是”或“否”。根据习惯我们将“是”放在左边,然后将数据分为两组,虽然有一些例外情况,但总体看来8:15是一个分水岭。如果在这之前出门,大概率不会迟到,反之亦然。

这就是最简单的决策树模型,只有一对选择分支。

接下来我们可以对这个模型进行微调,在两个分支上分别再进行分类,即加入8:00和8:30两个时间点,这样可以更全面地分析到达时间。下表显示,8:00之前出门绝对能准时到达,而8:00到8:15之间出门可能会准时到。而在8:15之后8:30之前几乎每次都会迟到,但也有可能不迟到。而8:30之后一定会迟到。

这样一来,决策树就变成了两层,你还可以根据自己的需要继续分层下去。大多数情况下,每个决策点只有两个分支。

上面的案例只有一个预测变量,以及一个类别目标变量。预测变量是“我们出门的时间”,目标变量是“是否准时上班”。由于只有两种明确的可能(是或不是),所以是分类的。有分类目标的决策树也被称为分类树。

我们可以将这一例子继续扩展,把它变成两个决策变量。将出门时间和工作日加入进去,将周一定为1,以此类推,周六为6,周日为7。数据显示,在周六和周日,绿色的点要更靠近左边一些。这说明在工作日,8:10出门也许足够了,但是周末可能会迟到。

为了在决策树中表示这一点,我们可以像之前一样,再在8:15时加上分界线,在这之后出发可能会迟到,但是在这之前却不好说,此前我们判断的是不会迟到,但现在看来这个推断不完全准确。

为了让我们更好地估计周末情况,我们可以进一步将8:15之前分为工作日和周末两种情况。工作日如果在8:15之前出发,那么一定不会迟到。但是周末如果在8:15之前出发,大多数情况会准时到达,但是也有例外。于是决策树可以如下图表示:

继续分类,将周末的8:15分继续分为8:00前和8:00后。如果8:00前出发,几乎每次都能准点到达,8:00至8:15之间出发,大部分都会迟到。现在我们有了一个二维决策树,将数据分成了四个不同区域。其中两个表示准点到达,另外两个表示迟到。

这是一个三层决策树,注意,并不是每个分支都需要继续细分下去(例如最右边的一支)。

现在我们可以分析一个具有连续目标变量的案例了。当模型对连续变量做出预测时,这也被称为回归树。我们已经解释了一维或二维的分类树了,接下来我们分析回归树。

你几点起床?

现在我们要加入某人的年龄以及他起床的时间。我们回归树模型的根节点就是对整个数据集的估计。在这种情况下,如果你不知道某人的年龄但还要估计他的起床时间,那么可能的时间是6:25,我们假设这是决策树的根节点。

另一个关于年龄的分支我们定在25岁,经过数据收集,平均来说,25岁以下的人会在7:05起床,25岁以上的人会在6点钟起床。

但是年轻人群体中也有变数,所以我们可以在进行分类。我们预计,12岁以下的人会在7:45起床,而12至25岁的人会在6:40起床。

25岁以上的人也可以进行细分。例如25至40岁的人平均在6:10起床,而40至70岁的人平均5:50起床。

但是,年轻人群体中仍然有很多种情况,继续细分,以8岁为分界点,可以让预测的值更准确。我们也可以在40岁至70岁之间以58岁为分界点。注意,我们现在的某些“树叶”上只有一或两个数据点,这种情况很可能导致过度拟合,稍后我们会对其进行处理。

根据年龄,决策树能让我们做出多种判断。如果我要判断一名36岁的实验对象的起床时间,那么我可以从树的顶端开始。

他是否小于25岁?否,向右。低于40岁?是的,向左。最终估计的起床时间为6:10。

决策树的结构能让你将任何年龄的人分到各自的类别中,并且预测出他们的起床时间。

我们还可以将回归树模型扩展到有两个预测变量的形式。如果我们不仅考虑某人的年龄,还要考虑月份,那么我们会找到更加丰富的模式。目前北半球是夏季,昼长夜短,太阳日出时间较冬季更早。假设学生们没有课业压力(当然只是假设),他们的起床时间受太阳升起的影响,另一方面,成年人的起床时间就更加规律,只会随着季节变化进行轻微波动。另外,老年人在这个情况下会起的稍早。

我们创建的这个决策树和上一个很像。从根节点6:30开始(这里是用matplotlib进行的可视化)

之后我们寻找一个适合加入边界的地方,以35岁为分界线,35岁以下的人在7:06起床,35岁以下的人在6:12起床。

重复之前的过程,在年轻群体中细分时间,判断是否是9月中旬、是否是3月中旬。若在9月中旬之后,那么就判定为冬季,35岁以下的人起床时间估计为7:30,而夏季预计为6:56。

接着,我们可以在大于35岁的群体中继续以48岁为界线进行精确的分析。

我们同样还可以回过头,在35岁以下群体中分析18岁人群冬季的起床时间,如下图。18岁以下的人冬季在7:54起床,而18岁以上的人在6:48起床。

从这里,我们看到随着分支的增加,决策树模型的形状越来越接近原始数据的形状。同样,我们也会注意到决策树所区分的各个区域,颜色也越来越相近。

这一过程如果继续下去,模型就会不断接近数据原始形状,每个决策区域会变得越来越小,对数据的估计也会越来越准确。

如何处理过拟合

然而,决策树需要注意的一个重点是过度拟合。回到我们只有单一变量的回归树案例,即年龄对起床时间的影响中,假设我们继续细分年龄,直到每个类别中只有一两个数据。

到了这时,决策树能非常好地解释并拟合数据,它不仅能掌握基本趋势,还能捕捉噪声。如果用该模型对新数据进行预测,那么训练数据中的噪声会让预测精确度降低。理想情况下,我们想让决策树捕捉趋势但不要夹杂噪声。要达到这一效果,比较有保障的方法就是在每片“树叶”上有多个数据,这样一来,噪声就会被平均掉。

另一种需要警惕的现象是变量过多的情况。我们一开始的回归树是一维的,后来加上了“月份”数据,成为了二维回归树。但是决策树不在乎有多少个维度,我们甚至可以加上地区纬度、某人锻炼量、身体的大数据或任何可能想到的变量。

变量一多,接下来就要考虑细分哪些变量了。如果变量很多,就需要大量计算。同时我们加入的变量越多,所需要的数据就越多,所以处理起来要耗费大量精力。

当你相对数据进行必要解读时,决策树真的非常有用,它们很普遍,可以处理预测变量和目标变量之间非线性的关系。二次方程、指数关系、周期循环等等关系都能在决策树中表示,只要你有足够的数据支持。决策树同样可以发现不平滑的趋势,例如突然下降或上升,或者其他人工神经网络等模型的隐藏趋势。作为数据分析的工具,决策树的优势还是很明显的。

原文地址:https://brohrer.github.io/how_decision_trees_work.html

推荐阅读:

一大批历史精彩文章啦

【收藏版】长文详解基于并行计算的条件随机场

【珍藏版】长文详解python正则表达式

这些神经网络调参细节,你都了解了吗

谈谈我在自然语言处理入门的一些个人拙见

大数定律和中心极限定理的区别和联系

本文分享自微信公众号 - 深度学习自然语言处理(zenRRan)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【原创手写笔记】面试准备,关于决策树算法你需要知道的那些

    决策树(Decision Tree)是一种非常经典的机器学习算法,常见的决策树算法包括ID3、C4.5、CART树等。

    zenRRan
  • 【比赛】CCL“中国法研杯”相似案例匹配评测竞赛 - TOP队伍攻略分享

    上周末参加了在云南昆明举办的“第十八届中国计算语言学大会”(The Eighteenth China National Conference on Comput...

    zenRRan
  • 实例讲解决策树分类器

    决策树是一种简单高效并且具有强解释性的模型,广泛应用于数据分析领域。其本质是一颗由多个判断节点组成的树,如:

    zenRRan
  • 分析 | Python抓取婚恋网用户数据,原来这才是年轻人的择偶观

    刚好在看决策树这一章,书里面的理论和例子让我觉得这个理论和选择对象简直不能再贴切。看完长相看学历,看完学历看收入。

    灯塔大数据
  • 机器学习实战之Python3实现决策树算法

    导语:今天这篇文章也是我们的志愿编辑写出来的文章哦,稳重介绍了如何在python3中实现自己的决策树算法并画出来!另外,小编Tom邀请你一起搞事情! 预备知识:...

    IT派
  • 机器学习(十) ——使用决策树进行预测(离散特征值)

    机器学习(十)——使用决策树进行预测(离散特征值) (原创内容,转载请注明来源,谢谢) 一、绘制决策树 决策树的一大优点是直观,但是前提是其以图像形式展示。如...

    用户1327360
  • 入门决策树 | 概述篇 | 山人聊算法 | 6th

    说完了感知机的事儿。我们这次来聊聊决策树,决策树是一种可解释性好、对各种非线性情况适应性强的方法。

    用户7623498
  • 实用 | 分享一个决策树可视化工具

    【磐创AI导读】:这篇文章希望跟大家分享一个可视化决策树或者随机森林的工具。这可以帮助我们更好的去理解或解释我们的模型。想要获取更多的机器学习、深度学习资源。欢...

    磐创AI
  • 决策树结果可视化

    决策树是一种优秀的机器学习算法,具有很好模型可解释性,有着广泛地应用。如何对决策树模型的结果做可视化分析,以便于更多人理解决策树做决策的机理?

    陆勤_数据人网
  • 【白话机器学习】算法理论+实战之决策树

    如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的, 常见的机器学习算法:

    Datawhale

扫码关注云+社区

领取腾讯云代金券