决策树入门
决策树 又称分类树,决策树是最为广泛的归纳推理算法之一,处理类别型或连续型变量的分类预测问题,可以用图形和if-then的规则表示模型,可读性很高。
决策树模型透过不断地划分数据,使依赖变量的差别最大,最终目的是将数据分类到不同的组织或不同的分枝,调整分类,最终建立最强的归类。
说的通俗一点就是给你一堆因素对应一个结果,决策树可以帮你找到每个因素对该结果的贡献值以及贡献率。
入门决策树的三个步骤
(大神也是从菜鸟变来的,一步一步来喽~)
1.了解决策树用到的一些基本的数学知识
熵:数据的混乱程度
数据公式表示为
PS: Pi为每个样本在样本集合中出现的概率。
例如:
存在两个集合:A【0,1,2,3】 and B【1,1,1,3】
A集合的Pi均为1/4, B集合的Pi依次为3/4和1/4。
最终A的熵计算得到1.38629,B的熵计算得到0.21576+0.34657=0.56233。
很明显B的熵值要小一些,熵值就这么简单。
Gini系数:表示在样本集合中一个随机选中的样本被分错的概率。是另一种评价指标,在决策树的应用中, Gine系数和熵值的作用一样,只不过计算方式不一样。![](https://i-blog.csdnimg.cn/blog_migrate/8ae0426357d95a2cc0ee99a9c9712276.png)
例如:
存在两个集合:A【0,1,2,3】 and B【1,1,1,3】
A集合的Pi均为1/4, B集合的Pi依次为3/4和1/4。
最终A的系数计算得到1-(1/16)*4=3/4,B的熵计算得到1-(1/16)-(9/16)=3/8。
很明显B的系数要小一些,Gini系数就这么简单。
不确定性:概率越小的事情,不确定性越大。
例如:
如图所示,翻车这种事情存在很大的不确定性,每个人都很难预测自己是否会翻车。
2.用决策树解决一个简单的问题
两个要点:
- 决策树顾名思义是一棵从根节点开始向下生长的一个判断过程,当我们每走一步后,最想得到的就是准确的答案,不确定性越小越好,熵值越小越好,因为熵值越小,说明混乱程度低,每个结果的概率大,对应的不确定性就越低。
- 决策树构造的基本思想就是随着树深度的增加,节点的熵迅速地降低。熵降低的速度越快越好,这样我们就可以得到一棵高度最矮而且有效的决策树。
实例分析:
举一个简单的例子如上图:
这里有14行数据,每个数据有4个特征,依次outlook,temperature,humidity,windy,最后一列是该同学是否打篮球也是我们要决策的结果。
第一步要干什么?
当然是去构造决策树,那么这时候我们遇到了一个问题,我们要以哪个特征作为根节点开始构建树呢?
首先不考虑任何特征,就原始数据集而言,以是否打篮球作为随机变量,那么我们先算一下熵值为多少,一共14天,打球有9天,不打球有5天,所以计算如下。
原始数据集的熵值H(D)为0.940。
第二步:
计算信息增益:g(D,A)=H(D)-H(D|A)
D为原始数据,A为一种划分。
信息增益就等于原始数据的熵值减去以A划分后的熵值。
以outlook为例
- outlook=sunny时,2/5的概率打球,3/5的概率不打球。entropy=0.971.
- outlook=overcast时,entropy=0(节点完全纯净)。
- outlook=rainy时,entropy=0.971。
三个分支的概率依次为:5/14、4/14、5/14。
所以当已知outlook的值时
信息熵为:5/14×0.971+4/14×0+5/14×0.971 = 0.693.
所以,当前决策树以outlook当根节点,可以使熵值变为0.693。
这样的话系统熵就从0.940下降到了0.693.
信息增益gain(outlook)为0.940-0.693 = 0.247。
同理可以计算出以其它三个特征为根节点的信息增益依次为:
gain(temperature)=0.029,gain(humidity)=0.152,gain(windy)=0.048.
其中gain(outlook)最大,即outlook作为根节点会使系统的信息熵下降得最快.
所以决策树的根节点取outlook。
了解上述决策树存在的问题
假设在原始数据集中添加一列ID属性,ID依次为1,2,3,4···,14
ID | outlook··· | temperature | humidity | windy | play |
---|---|---|---|---|---|
1 | |||||
2 | |||||
3 | |||||
4 | |||||
5 | |||||
6 | |||||
`` | |||||
13 | |||||
14 |
ID号只是一个标示号,实际上并算不上是特征,如果把其作为特征,它的熵值一定是最小的(1/140+1/140+···+1/14*0)=0,从而误被作为根节点,会让整个决策树出现严重的错误。
那么我们该怎么去避免这种情况的发生呢?
一些特征,特征里面存在的属性很多,每个属性对应的样本个数又很少,想办法将这些特征去掉。这时候我们将引入信息增益率这个重要的概念。
信息增益的理解:
对于待划分的数据集D,其 entroy(前)是一定的,但是划分之后的熵 entroy(后)是不定的,entroy(后)越小说明使用此特征划分得到的子集的不确定性越小(也就是纯度越高),因此 entroy(前) - entroy(后)差异越大,说明使用当前特征划分数据集D的话,其纯度上升的更快。而我们在构建最优的决策树的时候总希望能更快速到达纯度更高的集合,这一点可以参考优化算法中的梯度下降算法,每一步沿着负梯度方法最小化损失函数的原因就是负梯度方向是函数值减小最快的方向。同理:在决策树构建的过程中我们总是希望集合往最快到达纯度更高的子集合方向发展,因此我们总是选择使得信息增益最大的特征来划分当前数据集D。
缺点:信息增益偏向取值较多的特征
原因:当特征的取值较多时,根据此特征划分更容易得到纯度更高的子集,因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益比较 偏向取值较多的特征。
HA(D)将特征A作为随机变量计算的熵值。
信息增益率=g(D,A)/HA(D),可以看出,如果特征A取值过多的话,那么HA(D)就会特别大,信息增益率就会特别小。
最后一个小彩蛋~~
说了这么多,当我们构建好一棵树以后,怎么知道它好不好呢?再引入一个
评价函数如下:
每个叶子节点对应样本的个数乘以其熵值,又称损失函数。该函数值越小,构建的决策树相对越合理。
欢迎指教~
欢迎交流~
链接: 参考的一篇文章.