机器学习——决策树

1、决策树概述

决策树是一种分类算法,也可以用于回归!
判断是否喜欢打篮球:第一个节点为age,第二个节点为是否是男生,在叶子节点的位置要能给出判定的唯一结果!而如果不是叶子节点,那么不能给出最后的判定结果。例如爷爷奶奶那个节点里面的3个人,就是不爱打篮球的,而is male节点中,两个小于15岁的爱不爱打篮球还不能判断。
决策树例子
决策树的两个阶段:
决策树的两个阶段

2、熵和Gini系数的原理解释

熵的理解:不确定程度的大小,与概率大小成反比。
基尼系数:概率越大,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、实例

  1. 加载数据,用sns的pairplot画出原始数据的图,用violin画一个;
  2. 样本分割,数据集创建;样本分割示意图
  3. 决策树参数描述和实现;
    参数
    后续代码
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值