一,if-else原理
决策树算法是以if-else来形成的,if-else它的用法就是:if 后跟判断条件,如果判断为真,也即满足条件,就执行 if 下的代码段,否则执行 else 下的代码段
例如我们假如要判断一个房子的房租,可以大概按如下所示流程:
这是由 if-else 来组成的,也是一颗典型的树形结构"二叉树"
二,决策条件
分类问题的数据集由许多样本构成,而每个样本数据又会有多个特征维度。数据样本的特征维度与最终样本的分类都可能存在着某种关联,因此决策树的判别条件将从特征维度集中产生。
那么应该如何选择判别条件,也就是提问问题呢
1,纯度
引入了"纯度"的概念,是对单一类样本在子集内所占重的的度量。 在每一次判别结束后,如果集合中归属于同一类别的样本越多,那么就说明这个集合的纯度就越高。
纯度函数 横轴表示某个类的占比,纵轴表示纯度值,首先某个类达到最大值,或者最小值时,纯度达到最高值,然后,当某一个类的占比达到 0.5 时,纯度将取得最低值。得如下图像:
纯度度量函数 纯度值越低意味着损失值越高,反之则越低。如下图所示:
2,信息熵
信息熵是借鉴热熵的概念,是用于衡量不确定性的指标,也就是离散随机事件出现的概率,情况越混乱,信息熵越大。香农公式如下:
p 代表概率的意思,这里 "X" 表示进行信息熵计算的集合
3,ID3算法-信息增益
最著名的决策树算法有三种,分别是 ID3、C4.5 和 CART,这里主要讲一下ID3算法。 在ID3算法中如何利用信息熵从特征集合中选择决策条件呢?
ID3 算法的核心思想:越小型的决策树越优于大的决策树,也就是使用尽可能少的判别条件。从香农的"信息论"中可以得知,ID3 算法选择信息增益最大的特征维度进行 if -else 判别。
信息增益
信息增益是针对一个具体的特征而言的,某个特征的有无对于整个系统、集合的影响程度就可以用"信息增益"来描述。
经过一次 if-else 判别后,原来的类别集合就被分裂成两个集合,而我们的目的是让其中一个集合的某一类别的"纯度"尽可能高,如果分裂后子集的纯度比原来集合的纯度要高,那就说明这是一次 if-else 划分是有效过的。
通过比较使的"纯度"最高的那个划分条件,也就是我们要找的"最合适"的特征维度判别条件。
可以采用信息熵来计算信息增益值,用划分前集合的信息熵减去按特征维度属性划分后的信息熵
最后,比较不同特征属性的信息增益,增益值越大,说明子集的纯度越高,分类的效果就越好,我们把效果最好的特征属性选为 if-else 的最佳判别条件。
三,决策树算法原理
决策树的目标就是得到纯度更高的集合,这个过程就可以叫提纯。
决策树算法通过判别条件从根节点开始分裂为子节点,子节点可以继续分裂,每一次分裂都相当于一次对分类结果的"提纯",周而复始,从而达到分类的目的,在这个过程中,节点为"否"的不在分裂,判断为"是"的节点则继续分裂。
由三种停止的方式:
- 子节点属于同一类别:分类后的子节点集合都属于同一个类别,不可再分
- 特征属性用完:既然是从特征属性挑选的判断条件,那么就有用完的可能性;当用完还没完成分类的时候,用占比较大的类作为节点的归属类
- 手动停止:像设置决策树层数,节点个数等作为停止判断条件
四,剪枝策略
决策树会根据数据集各个维度的重要性来选择 if -else 分支,如果决策树将所有的特征属性都用完的情况下,那么过拟合现象就很容易出现。
要如何解决这种过拟合问题呢?这时就要用到"剪枝策略"。 可以分成两种,一种称为预剪枝,另一种称 为后剪枝。
1,预剪枝 即在分支划分前就进行剪枝判断,如果判断结果是需要剪枝,则不进行该分支划分。
2,后剪枝 决策树的各个判断分支已经形成后,才开始进行剪枝判断。
剪枝的意思就是减少特征属性的介入