机器学习(周志华)西瓜书 课后习题4.3 信息熵决策树算法——python实现(包括树的可视化)

本文详细介绍了基于信息熵的决策树算法,包括算法原理、信息熵与信息增益的概念,以及Python实现步骤。文中提供了一个完整的决策树生成过程,数据集主要涉及离散属性,并展示了决策树的字典存储结构和可视化结果。
摘要由CSDN通过智能技术生成

机器学习(周志华)西瓜书 课后习题4.3 信息熵决策树算法——python实现(包括树的可视化)

算法原理

1.信息熵

在这里插入图片描述

2.信息增益

在这里插入图片描述

我们所以要做的就是不断地从当前剩余的属性当中选取最佳属性对样本集进行划分。

算法的伪代码

在这里插入图片描述

数据集

在这里插入图片描述

Python实现

由于基于信息增益的决策树算法一般适用于离散属性,若要处理连续属性则必须将其按照一定规则转为离散属性。所以在接下来的代码实现当中并未处理连续属性

1. 信息熵的计算

def entropy(D):
    count=D.shape[0]
    Ent=0.0
    temp=D['好瓜'].value_counts() #获取剩余的类别数量
    for i in temp:
        Ent-=i/count*np.log2(i/count)
    return round(Ent, 3)

2. 信息增益的计算

def cal_gain(D,Ent,A):
    '''
    D:剩余的样本集
    Ent:对应的信息熵
    A:剩余的属性集合
    '''
    # print("gain:",A)
    gain = []
    count=D.shape[0]
    for i in A:
        temp=0
        for j in attribute[i]:
            temp+=D[(D[i]==j)].shape[0]/count*entropy(D[(D[i]==j)])
        # print(temp)
        gain.append(round(Ent-temp,3))
        # print(i,round(Ent-temp,3))
    return np.array(gain)

3.决策树的生成

def same_value(D, A):
    for key in A:
        if key in attribute and len(D[key].value_counts()) > 1:
            return False
    return True

# 叶节点选择其类别为D中样本最多的类
def choose_largest_example(D):
    count = D['好瓜'].value_counts()
    return '是' if count['是'] >= count['否'] else '否'

def choose_best_attribute(D,A):
    Ent=entropy(D)
    gain=cal_gain(D,Ent,A)
    return A[gain.argmax()]

#A:剩余的属性集
def TreeGenerate(D, A):
    Count = D['好瓜'].value_counts()
    if len(Count) == 1:  #情况一,如果样本都属于一个类别
        return D['好瓜'].values[0]

    if len(A) == 0 or same_value(
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值