3. 决策树

本文详细介绍了决策树中的关键概念,包括信息熵、条件熵和信息增益。接着讲解了ID3算法的原理和代码实现,以及C4.5和CART算法在决策树构建中的应用。此外,还讨论了决策树的剪枝过程和优劣,指出其在处理非线性数据和过拟合方面的挑战。
摘要由CSDN通过智能技术生成

一、信息熵、条件熵、信息增益

1.信息熵

在这里插入图片描述

2.条件熵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.信息增益

在这里插入图片描述

二、ID3算法及决策树

ID3算法只有树的生成,所以该算法生成的树容易产生过拟合。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ID3算法代码实现
# 数据使用统计特征方法上的贷款申请样本数据
import numpy as np
import operator

np.random.seed(0)


def loaddata():
    dataSet = [[0, 0, 0, 0, 'no'],
               [0, 0, 0, 1, 'no'],
               [0, 1, 0, 1, 'yes'],
               [0, 1, 1, 0, 'yes'],
               [0, 0, 0, 0, 'no'],
               [1, 0, 0, 0, 'no'],
               [1, 0, 0, 1, 'no'],
               [1, 1, 1, 1, 'yes'],
               [1, 0, 1, 2, 'yes'],
               [1, 0, 1, 2, 'yes'],
               [2, 0, 1, 2, 'yes'],
               [2, 0, 1, 1, 'yes'],
               [2, 1, 0, 1, 'yes'],
               [2, 1, 0, 2, 'yes'],
               [2, 0, 0, 0, 'no']]
    feature_name = ['age', 'job', 'house', 'credit']
    return dataSet, feature_name


# 定义计算数据集的熵的函数
def entropy(dataSet):
    # 数据量
    m = len(dataSet)
    # 标签不同类别的计数字典
    labelCounts = {
   }
    # 循环数据集
    for featVec in dataSet:
        currentLabel = featVec[-1]
        # 标签类别计数-如果字典中不存在则值为0,否则值加1
        if currentLabel not in labelCounts.keys():
            labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1
    # 定义一个自变量来保存熵
    e = 0.0
    # 根据公式计算熵
    for key in labelCounts:
        prob = float(labelCounts[key]) / m
        e -= prob * np.log2(prob)
    return e

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值