1.决策树的定义算法
树想必你们都会比较熟悉,是由节点和边两种元素组成的结构。理解树,就须要理解几个关键词:根节点、父节点、子节点和叶子节点。优化
父节点和子节点是相对的,说白了子节点由父节点根据某一规则分裂而来,而后子节点做为新的父亲节点继续分裂,直至不能分裂为止。而根节点是没有父节点的节点,即初始分裂节点,叶子节点是没有子节点的节点,以下图所示:spa
图1.1 树的结构示意图3d
决策树利用如上图所示的树结构进行决策,每个非叶子节点是一个判断条件,每个叶子节点是结论。从跟节点开始,通过屡次判断得出结论。blog
2. 决策树如何作决策排序
从一个分类例子提及:ci
银行但愿可以经过一我的的信息(包括职业、年龄、收入、学历)去判断他是否有贷款的意向,从而更有针对性地完成工做。下表是银行如今可以掌握的信息,咱们的目标是经过对下面的数据进行分析创建一个预测用户贷款一下的模型。io
表2.1 银行用户信息表table
职业基础 |
年龄 |
收入 |
学历 |
是否贷款 |
自由职业 |
28 |
5000 |
高中 |
是 |
工人 |
36 |
5500 |
高中 |
否 |
工人 |
42 |
2800 |
初中 |
是 |
白领 |
45 |
3300 |
小学 |
是 |
白领 |
25 |
10000 |
本科 |
是 |
白领 |
32 |
8000 |
硕士 |
否 |
白领 |
28 |
13000 |
博士 |
是 |
自由职业 |
21 |
4000 |
本科 |
否 |
自由职业 |
22 |
3200 |
小学 |
否 |
工人 |
33 |
3000 |
高中 |
否 |
工人 |
48 |
4200 |
小学 |
否 |
(注:上表中的数据都由本人捏造,不具备任何实际的意义)
上边中有4个客户的属性,如何综合利用这些属性去判断用户的贷款意向?决策树的作法是每次选择一个属性进行判断,若是不能得出结论,继续选择其余属性进行判断,直到可以“确定地”判断出用户的类型或者是上述属性都已经使用完毕。好比说咱们要判断一个客户的贷款意向,咱们能够先根据客户的职业进行判断,若是不能得出结论,再根据年龄做判断,这样以此类推,直到能够得出结论为止。
决策树用树结构实现上述的判断流程,如图2.1所示:
图2.1 银行贷款意向分析决策树示意图
经过图2.1的训练数据,咱们可以建议图2.1所示的决策树,其输入是用户的信息,输出是用户的贷款意向。若是要判断某一客户是否有贷款的意向,直接根据用户的职业、收入、年龄以及学历就能够分析得出用户的类型。如某客户的信息为:{职业、年龄,收入,学历}={工人、39, 1800,小学},将信息输入上述决策树,能够获得下列的分析步骤和结论。
第一步:根据该客户的职业进行判断,选择“工人”分支;
第二步:根据客户的年龄进行选择,选择年龄”<=40”这一分支;
第三步:根据客户的学历进行选择,选择”小学”这一分支,得出该客户无贷款意向的结论。
3. 决策树的构建
那么问题就来了,如何构建如图2.1所示一棵决策树呢?决策树的构建是数据逐步分裂的过程,构建的步骤以下:
步骤1:将全部的数据当作是一个节点,进入步骤2;
步骤2:从全部的数据特征中挑选一个数据特征对节点进行分割,进入步骤3;
步骤3:生成若干孩子节点,对每个孩子节点进行判断,若是知足中止分裂的条件,进入步骤4;不然,进入步骤2;
步骤4:设置该节点是子节点,其输出的结果为该节点数量占比最大的类别。
从上述步骤能够看出,决策生成过程当中有两个重要的问题:
(1)数据如何分割
(2)如何选择分裂的属性
(3)何时中止分裂
3.1 数据分割
假如咱们已经选择了一个分裂的属性,那怎样对数据进行分裂呢?
分裂属性的数据类型分为离散型和连续性两种状况,对于离散型的数据,按照属性值进行分裂,每一个属性值对应一个分裂节点;对于连续性属性,通常性的作法是对数据按照该属性进行排序,再将数据分红若干区间,如[0,10]、[10,20]、[20,30]…,一个区间对应一个节点,若数据的属性值落入某一区间则该数据就属于其对应的节点。
例:
表3.1 分类信息表
职业 |
年龄 |
是否贷款 |
白领 |
30 |
否 |
工人 |
40 |
否 |
工人 |
20 |
否 |
学生 |
15 |
否 |
学生 |
18 |
是 |
白领 |
42 |
是 |
(1)属性1“职业”是离散型变量,有三个取值,分别为白领、工人和学生,根据三个取值对原始的数据进行分割,以下表所示:
表3.2 属性1数据分割表
取值 |
贷款 |
不贷款 |
白领 |
1 |
1 |
工人 |
0 |
2 |
学生 |
1 |
1 |
表3.2能够表示成以下的决策树结构:
(2)属性2是连续性变量,这里将数据分红三个区间,分别是[10,20]、[20,30]、[30,40],则每个区间的分裂结果以下:
表3.3 属性2数据分割表
区间 |
贷款 |
不贷款 |
[0,20] |
1 |
2 |
(20,40] |
0 |
2 |
(40,—] |
1 |
0 |
表3.3能够表示成以下的决策树结构:
3.2 分裂属性的选择
咱们知道了分裂属性是如何对数据进行分割的,那么咱们怎样选择分裂的属性呢?
决策树采用贪婪思想进行分裂,即选择能够获得最优分裂结果的属性进行分裂。那么怎样才算是最优的分裂结果?最理想的状况固然是能找到一个属性恰好可以将不一样类别分开,可是大多数状况下分裂很难一步到位,咱们但愿每一次分裂以后孩子节点的数据尽可能”纯”,如下图为例:
从图3.1和图3.2能够明显看出,属性2分裂后的孩子节点比属性1分裂后的孩子节点更纯:属性1分裂后每一个节点的两类的数量仍是相同,跟根节点的分类结果相比彻底没有提升;按照属性2分裂后每一个节点各种的数量相差比较大,能够很大几率认为第一个孩子节点的输出结果为类1,第2个孩子节点的输出结果为2。
选择分裂属性是要找出可以使全部孩子节点数据最纯的属性,决策树使用信息增益或者信息增益率做为选择属性的依据。
(1)信息增益
用信息增益表示分裂先后跟的数据复杂度和分裂节点数据复杂度的变化值,计算公式表示为:
其中Gain表示节点的复杂度,Gain越高,说明复杂度越高。信息增益说白了就是分裂前的数据复杂度减去孩子节点的数据复杂度的和,信息增益越大,分裂后的复杂度减少得越多,分类的效果越明显。
节点的复杂度能够用如下两种不一样的计算方式:
a)熵
熵描述了数据的混乱程度,熵越大,混乱程度越高,也就是纯度越低;反之,熵越小,混乱程度越低,纯度越高。 熵的计算公式以下所示:
其中Pi表示类i的数量占比。以二分类问题为例,若是两类的数量相同,此时分类节点的纯度最低,熵等于1;若是节点的数据属于同一类时,此时节点的纯度最高,熵 等于0。
b)基尼值
基尼值计算公式以下:
其中Pi表示类i的数量占比。其一样以上述熵的二分类例子为例,当两类数量相等时,基尼值等于0.5 ;当节点数据属于同一类时,基尼值等于0 。基尼值越大,数据越不纯。
例:
以熵做为节点复杂度的统计量,分别求出下面例子的信息增益,图3.1表示节点选择属性1进行分裂的结果,图3.2表示节点选择属性2进行分裂的结果,经过计算两个属性分裂后的信息增益,选择最优的分裂属性。
属性1:
属性2:
因为 ,因此属性1与属性2相比是更优的分裂属性,故选择属性1做为分裂的属性。
(2)信息增益率
使用信息增益做为选择分裂的条件有一个不可避免的缺点:倾向选择分支比较多的属性进行分裂。为了解决这个问题,引入了信息增益率这个概念。信息增益率是在信息增益的基础上除以分裂节点数据量的信息增益(听起来很拗口),其计算公式以下:
其中 表示信息增益,
表示分裂子节点数据量的信息增益,其计算公式为:
其中m表示子节点的数量,表示第i个子节点的数据量,N表示父节点数据量,说白了, 其实
是分裂节点的熵,若是节点的数据链越接近,
越大,若是子节点越大,
越大,而
就会越小,可以下降节点分裂时选择子节点多的分裂属性的倾向性。信息增益率越高,说明分裂的效果越好。
仍是信息增益中说起的例子为例:
属性1的信息增益率:
属性2的信息增益率:
因为 ,故选择属性2做为分裂的属性。
3.3 中止分裂的条件
决策树不可能不限制地生长,总有中止分裂的时候,最极端的状况是当节点分裂到只剩下一个数据点时自动结束分裂,但这种状况下树过于复杂,并且预测的经度不高。通常状况下为了下降决策树复杂度和提升预测的经度,会适当提早终止节点的分裂。
如下是决策树节点中止分裂的通常性条件:
(1)最小节点数
当节点的数据量小于一个指定的数量时,不继续分裂。两个缘由:一是数据量较少时,再作分裂容易强化噪声数据的做用;二是下降树生长的复杂性。提早结束分裂必定程度上有利于下降过拟合的影响。
(2)熵或者基尼值小于阀值。
由上述可知,熵和基尼值的大小表示数据的复杂程度,当熵或者基尼值太小时,表示数据的纯度比较大,若是熵或者基尼值小于必定程度数,节点中止分裂。
(3)决策树的深度达到指定的条件
节点的深度能够理解为节点与决策树跟节点的距离,如根节点的子节点的深度为1,由于这些节点与跟节点的距离为1,子节点的深度要比父节点的深度大1。决策树的深度是全部叶子节点的最大深度,当深度到达指定的上限大小时,中止分裂。
(4)全部特征已经使用完毕,不能继续进行分裂。
被动式中止分裂的条件,当已经没有可分的属性时,直接将当前节点设置为叶子节点。
3.4 决策树的构建方法
根据决策树的输出结果,决策树能够分为分类树和回归树,分类树输出的结果为具体的类别,而回归树输出的结果为一个肯定的数值。
决策树的构建算法主要有ID三、C4.五、CART三种,其中ID3和C4.5是分类树,CART是分类回归树,将在本系列的ID3、C4.5和CART中分别讲述。
其中ID3是决策树最基本的构建算法,而C4.5和CART是在ID3的基础上进行优化的算法。
4. 决策树的优化
一棵过于复杂的决策树极可能出现过拟合的状况,若是彻底按照3中生成一个完整的决策树可能会出现预测不许确的状况,所以须要对决策树进行优化,优化的方法主要有两种,一是剪枝,二是组合树,将在本系列的剪枝和组合树中分别讲述。