python程序员,维权,免费电子书,rightknights,从零开始,从零开始基于树的建模完整教程(R&Python),《R完整教程》,《Python完整教程》

Hansenfen 2016-10-19 08:49:24

从零开始基于树的建模完整教程(R&Python)

2016-10-18 Python程序员


Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

简介

基于树的学习算法被认为是最优秀学习方法之一,它主要用于监督学习。树方法帮助预测模型拥有较高的精度,稳定性、易于解释。与线性模型不同,树模型映射非线性关系相当好。适用于解决手头上任何类型的问题(分类或回归)。

决策树、随机森林、gradient boosting等方法被广泛用于各种数据学科问题中。因此,对于每个分析师(包括新人)来说,学习这些算法并用它们建模很重要。

本教程旨在帮助初学者学习树建模。成功学完本教程后,有望成为一个精通使用树算法,建立预测模型的人。

提示:本教程不需要事先学习机器学习。然而,R或Python的基础知识会很有帮助。你可以遵循《R完整教程》《Python完整教程》开始。

目录

什么是决策树?它是如何工作的?

回归树和分类树
一棵树是如何决定在哪里分裂?
树建模的关键参数是什么?我们如何避免决策树的过拟合?
基于树的模型优于线性模型吗?
在R和Python中使用决策树
树建模的集成方法是什么?
什么是Bagging?它是如何工作的?
什么是随机森林?它是如何工作的?
什么是Boosting?它是如何工作的?
GBM和Xgboost哪个更强大?
 R和Python中使用GBM
在R和Python中使用XGBoost
在哪里实践?

1、什么是决策树?它是如何工作的?

决策树是一种监督学习算法(有一个预定义的目标变量)主要用于分类问题。它适用于离散的和连续的输入和输出变量。该技术中,将人口或样本分成两个或两个以上同质组(或者子集),以输入变量中最重要的差异A/不同为依据进行分割。


例如:
假设我们有一个样本,30名学生包含三个变量:性别(男/女),班级(IX/X)和身高(5到6英尺)。这30名学生中有15个名空闲时打板球。现在,我想建立一个模型来预测谁会在空闲时打板球?在这个问题上,我们需要根据非常重要的三个输入变量来分开空闲时打板球的学生。
这正是决策树可以帮助的,它将依据三个变量并识别创造最同质的学生组(互为异构)的变量,来分开学生。在下面的图片中,可以看到与其它两个变量相比,性别能够识别最佳同质组。


如上所述,决策树识别了最重要的变量并给出最佳的同质组人口值。现在问题是,它是如何识别并区分变量?要做到这一点,决策树使用各种算法,这些将在下面的章节讨论。

决策树的类型

决策树的类型基于目标变量的类型。它可以有两种类型:
    1.离散变量决策树:有明确目标变量的决策树被称为离散变量决策树。例如:-在上面学生问题的情景中,目标变量是“学生将打板球与否”即是或否。
    2.连续变量决策树:有连续目标变量的决策树被称为连续变量决策树。
例如:假设有一个问题,预测客户是否会支付保险公司的续保费用(是/否)。在这里,客户的收入是一个重要的变量,但保险公司并没有所有客户的收入明细。现在,我们知道这是一个重要的变量,可以根据职业、作品和其它各种变量建立一个决策树来预测客户收入。在这种情况下,预测的是连续变量值。

与决策树相关的重要术语

使用决策树时的基本术语:
    1.根节点:它代表整个人口或样本,并进一步分为两个或两个以上的同质组。
    2.分割:它是一个将一个节点划分成两个或两个以上子节点的过程。
    3.决策节点:当一个子节点进一步分裂成子节点,那么它被称为决策节点。
    4.叶/终端节点:不分裂的节点被称为叶子或终端节点。


    5.剪枝:删除决策节点的子节点的过程被称为剪枝。你可以说相反的过程叫分裂。
    6.分支 /子树:整个树的子部分被称为分支或子树。
    7.父子节点:一个节点,分为子节点被称为子节点的父节点,而子节点是父节点的孩子。
这些都是常用的决策树术语。我们知道,每种算法都有优缺点,下面是应该知道的重要因素。

优点

    1.易于理解:决策树的输出非常容易理解,即使是非分析背景的人。不需要任何统计知识来阅读和解释它们。它的图形表示非常直观,用户可以很容易地关联他们的假设。
    2.有用的数据探索:决策树是最快的识别最重要变量和两个或两个以上变量之间的关系的方式之一。在决策树的帮助下,我们可以创建新的具有更强能力的变量/特征来预测目标变量。你可以参考文章(提高回归模型力量的技巧)一条技巧。它也可以用于数据探索方面。例如,我们正在研究一个问题,我们有数百个变量的信息,此时决策树将有助于识别最重要的变量。
    3.较少的数据清理要求:与其它建模技术相比,它需要更少的数据清理。它的公平度不受异常值和缺失值的影响。
    4.数据类型不受限制:它可以处理连续数值和离散变量。
    5.非参数方法:决策树被认为是一种非参数方法。这意味着决策树没有空间分布和分类器结构。

缺点

    1.过拟合:过拟合是决策树模型最实际的困难之一。这个问题通过限定参数模型和修剪得到解决(详细讨论如下)。
    2.不适合连续变量:在处理连续数值变量时,决策树用不同类别分类变量丢失信息。

2、回归树和分类树

我们都知道,终端节点(或叶子)位于决策树的底部。这意味着,决策树绘制时通常是颠倒的,叶子在底部,根在顶部(如下所示)。


这两种树的工作几乎相似,我们看看分类树和回归树的主要差异和相似性:
    1.回归树用于因变量是连续时。分类树用于因变量是离散时。
    2.对于回归树,通过训练数据的终端节点获取的值是观察到的落在该区域的平均响应。因此,如果一个未知结果数据落在该区域,我们将用平均值进行预测。
    3.对于分类树,通过训练数据的终端节点获取的值(分类)是观察落在该区域的模式。因此,如果一个未知分类的数据落在该区域,我们将用模式值进行预测。
    4.两种树划分预测空间(自变量)为不同且无重叠的区域。为了简单起见,你可以把这些区域想象为高维盒子或箱子。
    5.两种树遵循自上而下的贪婪方法被称为递归二分分裂。我们叫它“自上而下”,因为当所有的观察都在一个单一的区域时它从树的顶部开始,并依次将预测空间分裂成两个新的分支。它被称作“贪婪”是因为,该算法只关心(寻找最佳可用变量)当前分裂,而不关心未来会带来更好树的分裂。
    6.这个分裂过程一直持续直到达到一个用户定义的停止标准。例如:一旦每个节点的观测值不到50,我们可以告诉该算法停止。
    7.在这两种情况下,分裂过程直到达到停止标准导致树完全生长。但是,完全生长的树可能过拟合数据,导致看不见数据精度差。这带来了‘修剪’。修剪是用来解决过拟合技术的一种。关于它我们将了解更多在以下部分。

3、一棵树如何决定在哪里分裂?

制定分裂策略的决策严重影响一棵树的准确性。分类树和回归树的决策标准是不同的。
决策树使用多种算法来决定将一个节点分裂成两个或两个以上子节点。子节点的创建增加了子节点的同质性。换句话说,相对于目标变量节点纯度的增加。决策树分裂所有可用变量的节点,然后选择产生最多同质性节点的分裂。
该算法选择也基于目标变量的类型。让我们来看看决策树中最常用的四种算法:

基尼系数

基尼系数表示,如果我们从样本随机选择两个项,它们一定是同一类的,那么样本的纯度可能是1。
    1.它对分类目标变量“成功”或“失败”可用。
    2.它只执行二元分裂。
    3.基尼系数越高,同质性越高。
    4.CART(分类树和回归树)使用基尼方法来创建二元分裂。

计算分裂的基尼系数的步骤

    1.计算子节点的基尼系数,使用公式成功概率平方和失败概率平方的总和(p^2+q^2)。
    2.计算分裂的基尼系数,使用该分割的每个节点的加权基尼得分。
举例:—参照上面的例子,我们想基于目标变量(打板球与否)分开学生。在下面的图片,我们使用性别和班级两个输入变量分开人口。现在,我想使用基尼系数确定哪个分割产生的同质子节点更多。


按性别分:
    1.计算,女性子节点的基尼系数 = (0.2)*(0.2)+(0.8)*(0.8)=0.68
    2.男性子节点的基尼系数 = (0.65)*(0.65)+(0.35)*(0.35)=0.55
    3.计算按性别分的加权基尼系数  = (10/30)*0.68+(20/30)*0.55=0.59
按班级分:
    1.IX班级子节点的基尼系数  = (0.43)*(0.43)+(0.57)*(0.57)=0.51
    2.X班级子节点的基尼系数  =  (0.56)*(0.56)+(0.44)*(0.44)=0.51
    3.计算按班级分的加权基尼系数 = (14/30)*0.51+(16/30)*0.51=0.51
上述,你可以看到按性别分裂的基尼分数高于按班级分裂,因此,该节点分裂将于性别。

卡方

它是一个找出父子节点差异的统计显著性的算法。我们通过目标变量的观察和期望频率之间的标准差异的平方和来测量它。
    1.它对分类目标变量“成功”或“失败”可用。
    2.它可以执行两个或两个以上分裂。
    3.卡方值越高,父子节点差异的统计显著性越高。
    4.每个节点的卡方计算使用公式,卡方 = ((实际– 期望)^2 / 期望)^1/2
    5.它生成的树被称为CHAID (卡方自动交互检测)
计算分裂的卡方的步骤:
    1.计算单个节点的卡方,通过计算成功与失败的偏差
    2.计算分裂的卡方,使用该分割的所有节点的成功与失败的卡方的总和
举例:使用上面计算基尼系数的例子。
按性别分:
    1.首先填充女性节点,填充“打板球”和“不打板球”的实际值,这里分别是2和8。
    2.计算“打板球”和“不打板球”的期望值,这里将两个都是5,因为父节点有50%的概率,我们运用同样的概率到女性数上(10)。
    3.使用公式计算偏差,实际 - 期望。“打板球”(2 - 5 = -3),“不打板球”(8 - 5 = 3)。
    4.使用公式=((实际– 期望)^2 / 期望)^1/2计算“打板球”和“不打板球”节点的卡方。您可以参考下表计算。
    5.按照相似的步骤计算男性节点的卡方值。
    6.现在加上所有的卡方值来计算按性别分裂的卡方。


按班级分:
按班级分裂执行类似的计算步骤,你会得出下面的表。


上述,你可以看到卡方也确定按性别比按班级分裂更显著。

信息增益:

看看下面的图片,认为哪个节点很容易被描述。我敢肯定,你的答案是C,由于所有的值都是相似的,它需要更少的信息。另一方面,B需要更多的信息来描述它,A需要最多的信息。换句话,我们可以说,C是一个纯净的节点,B较少纯,A更不纯。


现在,我们可以得出一个结论,较少纯净的节点需要较少的信息来描述它。更不纯的节点需要较多信息。信息论定义系统中这种混乱程度称为熵是一个措施。如果样本完全同质,那么熵是零,如果样本同样划分(50%—50%),熵是一。
熵可以用公式计算:
这里p和q分别是该节点成功和失败的概率。熵也用于分类目标变量。它选择与父节点和其它分裂相比,具有最低熵的分裂。熵越小,越好。
计算分裂的熵的步骤:
    1.计算父节点的熵
    2.计算分裂的每个节点的熵并计算分裂中所有可用子节点的加权平均值。
举例:学生的例子让我们使用这个方法来确定最佳的分割。
    1.父节点的熵= -(15/30) log2 (15/30) – (15/30) log2 (15/30) = 1。此处1显示它不是一个纯净的节点。
    2.女性节点的熵 = -(2/10) log2 (2/10) – (8/10) log2 (8/10) = 0.72,男性节点的熵 -(13/20) log2 (13/20) – (7/20) log2 (7/20) = 0.93
    3.按性别分裂的熵 = 子节点的加权熵 = (10/30)*0.72 + (20/30)*0.93 = 0.86
    4.班级IX节点的熵,-(6/14) log2 (6/14) – (8/14) log2 (8/14) = 0.99,班级X节点的熵,-(9/16) log2 (9/16) – (7/16) log2 (7/16) = 0.99。
    5.按班级分裂的熵 =  (14/30)*0.99 + (16/30)*0.99 = 0.99
上述,你可以看到,按性别分裂熵最低,所以该树将会按性别分裂。我们可以从熵中得到信息增益为1-熵

减少方差

至今,我们讨论了分类目标变量的算法。减少方差算法用于连续目标变量(回归问题)。该算法采用方差的标准公式来选择最佳分裂。较低方差的分裂被选来作为人口分裂的标准:


上述X拔是平均值,X是实际值,n是值的个数。
计算方差的步骤:
    1.计算每个节点的方差。
    2.计算每个分裂的方差作为每个节点方差的加权平均值。
举例:我们分配打板球数值1,不打板球数值0。现在按照步骤来确定正确的分裂:
    1.根节点方差,平均值是(15*1 + 15*0)/30 = 0.5,有15个1和15个0。方差是((1-0.5)^2+(1-0.5)^2+….15 次+(0-0.5)^2+(0-0.5)^2+…15 次) / 30,这可以写成 (15*(1-0.5)^2+15*(0-0.5)^2) / 30 = 0.25

    2.女性节点平均值 =  (2*1+8*0)/10=0.2,方差 = (2*(1-0.2)^2+8*(0-0.2)^2) / 10 = 0.16
    3.男性节点平均值 = (13*1+7*0)/20=0.65 ,方差 = (13*(1-0.65)^2+7*(0-0.65)^2) / 20 = 0.23
    4.按性别分裂的方差 = 子节点的加权方差 = (10/30)*0.16 + (20/30) *0.23 = 0.21
    5.班级IX节点的平均值=  (6*1+8*0)/14=0.43,方差 = (6*(1-0.43)^2+8*(0-0.43)^2) / 14= 0.24
    6.班级X节点的平均值 =  (9*1+7*0)/16=0.56,方差 = (9*(1-0.56)^2+7*(0-0.56)^2) / 16 = 0.25
    7.按班级分裂的方差 = (14/30)*0.24 + (16/30) *0.25 = 0.25
上述,你可以看到,按性别分裂的方差低于父节点,因此分裂将于性别变量。
直到这里,我们了解了决策树的基本知识和决策过程为选择最佳分裂建立树模型相关的。正如我所说,决策树可以应用于回归和分类问题。让我们详细地了解这些方面。

4、树建模的关键参数是什么?我们如何避免决策树的过拟合?

过拟合是决策树建模时面临的关键挑战之一。如果是没有限制组的决策树,它会给你100%准确训练集,因为最坏的情况下,每个观察最终以1个叶子结束。因此,决策树建模时阻止过拟合是关键,它可以通过2种方式:
    1.限制树的大小
    2.剪枝
让我们简要地讨论一下这两种方式。

限制树的大小

这可以通过定义树使用的各种参数来完成。首先,一棵决策树的基本结构:


用于定义树的参数进一步说明如下。下面描述的参数与工具无关。重要的是理解树建模中使用的参数的作用。这些参数在R和Python是可用的。
1.节点分裂的最小样本

  • 定义要分裂节点所需的最少样本数(或观测值)。

  • 用来控制过拟合。更高的值,防止模型学习关系具体到特定的样本。

  • 过高的值可能引起欠拟合,使用CV值调节。

2.终端节点(叶)的最少样本数

  • 定义了树终端节点或叶子所需要的最少的样本数

  • 类似min_samples_split用来控制过拟合。

  • 针对不平衡分类问题通常选择较低的值,因为大部分少数类的区域将非常小。

3.树的最大深度(垂直深度) 

  • 树的最大深度。

  • 用来控制过拟合,更高的深度将允许模型学习关系非常具体到特定的样本。

  • 使用CV值调节。

4.终端节点的最大数量

  • 树的终端节点或叶子的最多个数。

  • 可能在max_depth中定义。深度为"n"的二叉树被构造就会产生最多2^n个终端节点。

5.考虑分割的最大特征数

  • 为了寻找最佳分裂的特征数。这些将被随机选择。

  • 根据经验,总特征数的平方根就行,但是应该检查总特征数的30-40%。

  • 过高的值可能会导致过拟合。

剪枝

如前面所讨论的,设置限制的技术是一个贪婪的方法。换句话说,它将检查即刻的最佳分裂,向前移动,直到到达指定的停止条件之一。当你开车时,让我们考虑以下情况:


有2个车道:
    1.一条汽车以80公里/小时行驶
    2.一条卡车以30公里/小时行驶
这时,你是黄色的车,有2个选择:
    1.左转,迅速超过其它2辆汽车
    2.继续在本车道行驶

我们分析这两种选择。前一个选择,你将立即超越前面的车,并到达卡车的后面,开始以30公里/小时行驶,寻找机会回到右边。同时所有起初在你后面的车领先。这将是最佳选择,如果你的目标是在接下来的10s里行进最远的距离。后一个选择,你以相同的速度,跨过卡车,然后超车可能视情况而定。贪婪的你!


这正是通常的决策树和剪枝之前的区别。有限制的决策树不会看前面的卡车,通过左转采取贪婪的方法。另一方面,如果我们使用剪枝,我们实际上向前看几步,并做出选择。

英文原文:https://www.analyticsvidhya.com/blog/2016/04/complete-tutorial-tree-based-modeling-scratch-in-python/
译者:毛茸茸的向日葵
阅读
精选留言

该文章作者已设置需关注才可以留言

写留言

    该文章作者已设置需关注才可以留言

    写留言

    加载中
    以上留言由公众号筛选后显示

    了解留言功能详情

    原文地址