python机器学习决策树算法

一、概述:
1、信息熵:
公式:H[x] = -∑p(x)log2p(x)
不确定性越大,信息熵越大
2、决策树评价:
优点:小规模数据集有效
缺点:处理连续变量不好;类别较多时,错误增加的比较快;不能处理大量数据

二、决策树生成算法:
1、ID3算法:
选择最大化信息增益来对结点进行划分。
在这里插入图片描述
缺点:偏向于具有大量值的属性,在训练集中,某个属性所取的不同值的个数越多,那么越有可能拿它来作为分裂属性。
比如一个训练集有10个元素,按某个属性(该属性下有10个类)分类,此时信息增益最大,但是毫无意义。
Ex:14个样本的电脑购买情况
在这里插入图片描述
2、C4.5算法:
信息增益的方法倾向于首先选择因子数较多的变量。
信息增益的改进,信息增益率
信息增益率 = 信息增益 / 分裂信息
在这里插入图片描述
Ex:机器学习例题-就业情况
3、CART算法:
CART用基尼(Gini)系数最小化准则来进行特征选择,生成二叉树;
分别计算它们的Gini系数增益,取Gini系数增益值最大的属性作为决策树的根节点属性
公式如下:
在这里插入图片描述
Ex:10个样本是否拖欠贷款

注意:
由于CART算法构建的是二叉树,因此对于有多个类的属性(如婚姻)需要进行预分类;对于类连续的属性(如年收入),需要预先指定一个中间值,以满足二分类的要求,如下:
婚姻状况:
在这里插入图片描述
年收入:
在这里插入图片描述
4、剪枝
(1)预剪枝:
在建立决策树之前,根据自己的经验,把一些不太重要的属性去掉
(2)后剪枝:
用所有的属性构建决策树之后,再砍掉决策树的一部分;
作用:在有限度地损失一部分精确度的前提下,明显地降低决策树的复杂度,可以抵抗决策树的过拟合情况。

三、决策树非线性二分类:
1、非线性二分类存在的问题:
非线性二分类的决策边界,比线性二分类的决策边界复杂。
因此在构建决策树的时候,会发现此时树的结构很复杂、不实用;
同时,还很容易出现过拟合的情况(训练集的结果很完美,但预测集的结果较差)
2、解决方法:剪枝
(1)设置树的最大深度:max_depth
(2)设置内部节点再划分所需的最小样本数:min_samples_split
当某个节点包含的样本数足够小时,即使该节点中的样本并非一类,也不对其再划分
(3)通过剪枝,虽然可能会损失一些训练集精度,但是却明显降低了树结构的复杂度;同时也可以抵抗过拟合

四、sklearn生成决策树的分析:

1、最上面一行0.5的意思是在独热矩阵x_data中,各列参数(如agestudentcredit_rating等)的取值都是0(no)或者1(yes),因此0.5就是用来判断是0还是1;
2、value中两个值的意思是当前样本中noyes分别的个数,因此value中两值之和总等于当前的sample

五、相关代码展示:
这次代码太多了,就不一个一个贴了,直接上链接:
相关代码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值