1、决策树概述
决策树是一种分类算法,也可以用于回归!
判断是否喜欢打篮球:第一个节点为age,第二个节点为是否是男生,在叶子节点的位置要能给出判定的唯一结果!而如果不是叶子节点,那么不能给出最后的判定结果。例如爷爷奶奶那个节点里面的3个人,就是不爱打篮球的,而is male节点中,两个小于15岁的爱不爱打篮球还不能判断。
决策树的两个阶段:
2、熵和Gini系数的原理解释
熵的理解:不确定程度的大小,与概率大小成反比。
基尼系数:概率越大,Gini系数越小,和熵类似。
3、决策树构造实例
判断是否想去打篮球的过程:
那个属性当根节点?
构造树的基本思想是随着树的深度的增加,节点的熵迅速地降低。熵降低的速度越快越好,我们期望得到一棵高度最矮的决策树。
先按照一个特征划分,然后计算这个特征的类别概率,然后再计算分支当中的类别概率,然后再进行加权求和。比如下图第一种情况,outlook -> sunny/overcast/rainy的概率分别为5/14、4/14、5/14, 然后对应分支的熵为0.971、0、0.971,于是这个分类的最终熵为:5/14 x 0.971 + 4/14 x 0 + 5/14 x 0.971 = 0.693。原来的系统的信息熵,打球的概率为9/14不打的概率为5/14,因此系统的熵为0.940。
4、信息增益
信息增益:系统原来的熵减去现在的熵,打球的例子中,gain(outlook) = 0.940 - 0693 = 0.247;
同样可已计算出gain(temperature) = 0.029,gain(humidity) = 0.152,gain(windy) = 0.048;因此,gain(outlook)最大,使得系统的信息熵下降的最快,所以决策树的根节点就选择outlook。
其他节点选择:根节点选择出来后就不用官其他的节点了,剩下的就是递归问题了。
5、信息增益率
ID3:信息增益:系统熵 - 基于某个划分后的系统熵
C4.5:信息增益率 = 信息增益 / 划分类别自身的熵
CART:Gini系数
评价函数:C(T) = SUM_leaf( N_t * H(t) ) # 相当于代价函数、损失函数。
其中:H(t)表示当前叶子节点的熵,N_t表示当前叶子节点的内的元素个数。
对于连续值,首先将其离散化,然后把连续属性的值分成不同的区间,依据是边角各个分裂点的gain的大小,遍历以后就能确定分割点。
如果增加一个id列,并且根据此来划分,那么就会划分成14个节点,而且每个节点的熵为0,于是信息增益率为gain(id) = 0.940 - 0 = 0.940是最大的,然而,对于新的需要判断的测试集,id是没有任何意义的。因此信息增益指标是不完善的。
因此采用信息增益率来评价,例如上面的outlook,gain(outlook) = 0.247,则信息增益率:
0.247 / H(5/15,4/14,5/14),注意信息增益率除的是自身类别的熵,不是系统原来的熵。
6、决策树剪枝
我们不知道生成的决策树是否是最矮的。因为我们总可以构建出来绝对大的书树,根据训练集可以构建一个完全的分类树,但是这样对于新的测试集并不友好,也就是泛化能力很差。因此不需要决策树太庞大,以至于过拟合。
**预剪枝:**让决策树在构建过程中提前停止。可以控制深度,也可以控制某个分支的样本个数。
**后剪枝:*构建好决策树后进行剪枝。C(T) = SUM_leaf( N_t x H(t) ) ,修正后的代价函数:
C_α(T) = C(T) + α|T_leaf| 。其中,T表示叶子节点个数,C(T)表示原来的基础损失函数,α越大,要求的叶子节点数越少,相反则越多,相当于惩罚项。这应用在后剪枝。判断一个节点的代价函数,再判断这个节点下面所有的叶子节点的代价函数的和,保留较小的那一种情况。
7、随机森林
随机性1:选取样本的随机性,给定选取比例,每次选取一部分就可以了。这里是有放回采样。
随机性2:选取样本的特征的时候,比如10个特征,随机选择其中一部分,然后建立决策树。
随机森林会随机建立很多决策树,最后的决定由多个树共同决定。
8、实例
- 加载数据,用sns的pairplot画出原始数据的图,用violin画一个;
- 样本分割,数据集创建;
- 决策树参数描述和实现;