决策树(含常见的树的解释)

决策树(Decision Tree):
定义:
决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。
ID3 决策树:(基本已被淘汰,但很经典)
1.信息熵与信息增益:
信息熵:
在这里插入图片描述
信息增益:
在这里插入图片描述

2.实现步骤:
① 使用信息熵度量类别标签对样本整体的不确定性。
② 使用信息熵度量每个特征不同取值的不确定性。
③ 使用信息增益决定决策树分支的划分依据。
3.代码实现:

from numpy import *
 
def calcShannonEnt(dataSet):
    """
    input:数据集
    output:数据集的香农熵
    descript:计算给定数据集的香农熵
    """
    num = len( dataSet )  # 样本集总数
    classList = [c[-1] for c in dataSet]  # 抽取分类信息
    labelCounts = {} # 词典形式存储类别计数
    for cs in set(classList): # 对每个类别计数
        labelCounts[cs] = classList.count( cs )
 
    shannonEnt = 0.0   # 信息熵
    for key in labelCounts:
        prob = labelCounts[key] / float(num)
        shannonEnt -= prob * math.log2(prob)
    return shannonEnt
 
# 给定数据集
def CreateDataSet():
    dataSet = [[1, 1, ' Yes'],
               [1, 1, ' Yes'],
               [1, 0, 'No'],
               [0, 1, 'No'],
               [0, 1, 'No']]
    labels = ['no surfacing', 'flippers']
    return dataSet, labels
 
myDat, labels = CreateDataSet()
print(calcShannonEnt(myDat))

进阶:
本人这个不善于讲解,请跳转:
点我跳转
C4.5算法:(严格意义上讲不算算法,是一种规则)
C4.5算法是由Ross Quinlan开发的用于产生决策树的算法。该算法是对Ross Quinlan之前开发的ID3算法的一个扩展。C4.5算法产生的决策树可以被用作分类目的,因此该算法也可以用于统计分类。
本质:(实际是对ID3的改进)
用信息增益率来选择属性。ID3选择属性用的是子树的信息增益,这里可以用很多方法来定义信息,ID3使用的是熵(entropy, 熵是一种不纯度度量准则),也就是熵的变化值,而C4.5用的是信息增益率。
Cart树:
Cart树采用一种二分递归分割的技术,分割方法采用基于最小距离的基尼指数估计函数,将当前的样本集分为两个子样本集,使得生成的的每个非叶子节点都有两个分支。因此,CART算法生成的决策树是结构简洁的二叉树。
算法步骤:
1.决策树的生成:基于训练数据集生成决策树,生成的决策树要尽量大。
2.决策树的剪枝:用验证数据集对以生成的树进行剪枝并选择最优子树。这时用损失函数最小作为剪枝标准。
基尼指数计算公式:
在这里插入图片描述
CART树剪枝:
决策树算法对训练集很容易过拟合,导致泛化能力很差,为解决此问题,需要对CART树进行剪枝。CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变小,从而能够对未知数据有更准确的预测,也就是说CART使用的是后剪枝法。一般分为两步:先生成决策树,产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,最后选择泛化能力好的剪枝策略。
剪枝:
剪枝 (pruning)是决策树学习算法对付过拟合的主要手段。剪枝是指将一颗子树的子节点全部删掉,利用叶子节点替换子树(实质上是后剪枝技术),也可以(假定当前对以root为根的子树进行剪枝)只保留根节点本身而删除所有的叶子
两种方案:先剪枝和后剪枝:
1.预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;
2.后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值