了解了信息熵,再看决策树,会很容易的。通过上篇博客,我们知道:信息熵被认为是一个系统有序程度的度量,一个系统越是有序,信息熵就越低,一个系统越是混乱,信息熵就越高。决策树的构造过程就是,如何划分,能让系统变得更加有序。
先来直观理解一下决策树:
可以发现,决策树比较明确直观,一眼看去仿佛跟机器学习无关。决策树在借贷、风控领域应用还是比较多的。
概述
决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构建决策树来进行分析的一种方式,是一种直观应用概率分析的一种图解法;决策树是一种预测模型,代表的是对象属性与对象值之间的映射关系;决策树是一种树形结构,其中每个内部节点表示一个属性的测试,每个分支表示一个测试输出,每个叶节点代表一种类别;决策树是一种非常常用的有监督的分类算法。
决策树的决策过程就是从根节点开始,测试待分类项中对应的特征属性,并按照其值选择输出分支,直到叶子节点,将叶子节点的存放的类别作为决策结果。
(与线性回归不一样,比较简单直观。是在已知各种情况发生概率的基础上,通过构建决策树来进行分析的一种方式,和线性回归相比,会直观很多,很明确的就能看出走势,是一种直观应用概率分析的一种图解法。是一种预测模型,……)
决策树分为两大类:分类树和回归树,前者用于分类标签值,后者用于预测连续值,常用算法有ID3、C4.5、CART等
构建过程
决策树算法的重点就是决策树的构造;决策树的构造就是进行属性选择度量,确定各个特征属性之间的拓扑结构(树结构);构建决策树的关键步骤就是分裂属性,分裂属性是指在某个节点按照某一类特征属性的不同划分构建不同的分支,其目标就是让各个分裂子集尽可能的’纯’(让一个分裂子类中待分类的项尽可能的属于同一个类别,下面会介绍“纯”的具体意思)。
构建步骤如下:
- 将所有的特征看成一个一个的节点;
- 遍历每个特征的每一种分割方式,找到最好的分割点;, e g : N 1 、 N 2 . . . . N m eg: N_1 、N_2 ....N_m eg:N1、N2....Nm ;计算划分之后所有子节点的’纯度’信息;
- 使用第二步遍历所有的特征,选择出最优的特征以及最优的划分方式;得出最终的子节点: N 1 、 N 2 . . . . N m N_1 、N_2 ....N_m N1、N2....Nm
- 对子节点 N 1 、 N 2 . . . . N m N_1 、N_2 ....N_m N1、N2....Nm 分别继续执行2-3步,直到每个最终的子节点都足够’纯’。
特征属性类型
根据特征属性的类型不同,在构建决策树的时候,采用不同的方式,具体如下:
- 属性是离散值,而且不要求生成的是二叉决策树,此时一个属性就是一个分支
- 属性是离散值,而且要求生成的是二叉决策树,此时使用属性划分的子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支
- 属性是连续值,可以确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支
分割属性选择
决策树算法是一种“贪心”算法策略,只考虑在当前数据特征情况下的最好分割方式,不能进行回溯操作。
对于整体的数据集而言,按照所有的特征属性进行划分操作,对所有划分操作的结果集的“纯度”进行比较,选择“纯度”越高的特征属性作为当前需要分割的数据集进行分割操作,持续迭代,直到得到最终结果。决策树是通过“纯度”来选择分割特征属性点的。
量化纯度
决策树的构建是基于样本概率和纯度进行构建操作的,那么进行判断数据集是否“纯”可以通过三个公式进行判断,分别是Gini系数、熵(Entropy)(熵越高,越无序,即越趋于均匀分布、所有事件越趋近等概率情况;熵越低,表示某事件的概率越趋于1的情况,也就是越纯)、错误率。这三个公式值越大,表示数据越“不纯”;越小表示越“纯”。越纯的话,一个分裂子类中待分类的项就越可能属于同一个类别,也就是越有序。当然,最纯的情况就是子类属于同一类。
实践证明这三种公式效果差不多,一般情况使用熵公式。
这三个概念还是特别好理解的,信息熵上篇博客介绍了,这里就不说。另外两个只是换了种表达式,意思差不多。
比如说:某事件的概率特别趋于1的情况,此时表示越纯,那么:
- ∑ i = 1 n ( p i ) 2 \sum_{i=1}^n (p_i)^2 ∑i=1n(pi)2 就会越趋于1 (因为各事件总的概率为1,小于1的概率值,取平方时,会更小,只有某概率趋于1时,各概率的平方 和才趋于最大值1),则, G i n i = 1 − ∑ i = 1 n ( p i ) 2 Gini=1-\sum_{i=1}^n (p_i)^2 Gini=1−∑i=1n(pi)2 就会越趋于0。
- 同理,某事件的概率特别趋于1的时候,错误率 Error 越趋于0。
所以说:这三个公式值越大,表示数据越“不纯”;越小表示越“纯”
信息增益
当计算出各个特征属性的量化纯度值后使用信息增益度来选择出当前数据集的分割特征属性;如果信息增益度的值越大,表示在该特征属性上会损失的纯度越大 ,那么该属性就越应该在决策树的上层,计算公式为:
Gain为A为特征对训练数据集D的信息增益,它为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差。
换句话说就是:原来的比较无序H(D),经过属性A分割后,即 H(D)-H(D|A),系统会变得有序很多。信息增益Gain就是来衡量这种变化程度。
停止条件
决策树构建的过程是一个递归的过程,所以必须给定停止条件,否则过程将不会进行停止,一般情况有两种停止条件:
- 当每个子节点只有一种类型的时候停止构建
- 当前节点中记录数小于某个阈值,同时迭代次数达到给定值时,停止构建过程,此时使用 m a x ( p ( i ) ) max(p(i)) max(p(i)) 作为节点的对应类型
方式一可能会使树的节点过多,导致过拟合(Overfiting)等问题;比较常用的方式是使用方式二作为停止条件
效果评估
决策树的效果评估和一般的分类算法一样,采用混淆矩阵来进行计算准确率、召回率、精确率等指标。
也可以采用叶子节点的纯度值总和来评估算法的效果,值越小,效果越好(当然不能直接加,因为不同节点的样本数很可能不一样,因此需要配一下权重。|Dt|表示单个节点的样本数,|D|表示所有的样本数)
所以:决策树的损失函数可定义为(该值越小,算法效果越好)
举例
最后,把文章开关的那个例子来计算一下,看看是如何构造决策树的。
首先计算一下“是否拥有房产”的信息增益:
同理可得出
这里,97.5是怎么来的呢?
因为收入属于连接型数据,计算方式跟“房产”还有“婚姻”略有不同:
- 首先排序,计算出相邻两项的中值。
- 然后以每个中值分划分点求信息增益。
但仔细观察数据,比如最小的两个数60、75,它俩的y值都是否,如果用67.5把它俩分割开,显然不合理,因此一般情况下,对于相邻y值是相等的,就不分割了。所以最终得到80和97.5两个分割点,然后分别计划相应的信息增益:
综上: G a i n ( 收 入 = 97.5 ) = 0.395 > G a i n ( 婚 姻 ) = 0.205 > G a i n ( 房 产 ) = 0.205 Gain(收入=97.5)=0.395>Gain(婚姻)=0.205>Gain(房产)=0.205 Gain(收入=97.5)=0.395>Gain(婚姻)=0.205>Gain(房产)=0.205,所以第个分割属性为“收入”。接下就是对子树采用相同的方式分割,就得到了文章开头的那个决策树。
这样看来:决策树还是挺简单的。
总结
有些不好意思,因为这篇博客专业的词用的比较多哈。
重点是明白:纯度的量化方式 和 信息增益
纯度的量化方式常见的有三种:Gini系数、熵和错误率,这三种表达的是一个意思。值越大,表示数据越“不纯”,也就是越混乱;越小表示越“纯”,也就是越有序。越纯的话,分裂子类中待分类的项就越可能属于同一个类别,也就是越有序。当然,最纯的情况就是子类属于同一类。
信息增益,简单来说就是:原来的的状态,记作H(D),表示原来的纯度;属性A分割后的纯度,记作H(D|A);他俩的差值,也就是信息增益Gain= H(D)-H(D|A),就是来衡量属性A分割前后的纯度变化情况。信息增益最大,表示效果越明显。
决策树划分的依据就是:哪种属性划分时的信息增益最大,就按哪个属性来划分。