决策树算法(三)——计算香农熵

本文主要介绍了如何在决策树算法中计算香农熵,以此来确定最佳特征划分数据集。首先,解释了香农熵在信息论中的作用,接着展示了如何根据数据集构建并计算香农熵的Python代码。通过示例,详细讲解了计算过程,包括计算样本总数、统计类别频率、计算概率及熵。最后,讨论了熵的变化对数据集分类的影响,并鼓励读者实践以加深理解。
摘要由CSDN通过智能技术生成

写在前面的话

如果您有任何地方看不懂的,那一定是我写的不好,请您告诉我,我会争取写的更加简单易懂!

如果您有任何地方看着不爽,请您尽情的喷,使劲的喷,不要命的喷,您的槽点就是帮助我要进步的地方!

计算给定数据的信息熵

在决策树算法中最重要的目的我们已经在前几章说过了,就是根据信息论的方法找到最合适的特征来划分数据集。在这里,我们首先要计算所有类别的所有可能值的香农熵,根据香农熵来我们按照取最大信息增益(information gain)的方法划分我们的数据集。


我们的数据集如下表所示:
这里写图片描述

根据这张表,我们使用python来构建我们的数据集。

#!/usr/bin/env python
# coding=utf-8
# author: chicho
# running: python trees.py
# filename : trees.py

def createDataSet():
    dataSet = [[1,1,'yes'],
              [1,1,'yes'],
              [1,0,'no'],
              [0,1,'no'],
              [0,1,'no']] # 我们定义了一个list来表示我们的数据集,这里的数据对应的是上表中的数据

    labels = ['no surfacing','flippers']

    return dataSet, labels

其中第一列的1表示的是不需要浮出水面就可以生存的,0则表示相反。 第二列同样是1表示有脚蹼,0表示的是没有。

在构建完数据集之后我们需要计算数据集的香农熵。
根据香农熵的定义可以知道:

这里写图片描述

根据这个公式我们来编写相应的代码。(注意:我们是计算每个类别的香农熵,也就是鱼类还是非鱼类的香农熵。在这我们的数据集当中我们用’yes’表示是鱼类,用‘no’表示非鱼类)

# 代码功能:计算香农熵
from math import log #我们要用到对数函数,所以我们需要引入math模块中定义好的log函数(对数函数)

def calcShannonEnt(dataSet):#传入数据集
# 在这里dataSet是一个链表形式的的数据集
    countDataSet = len(dataSet) # 我们计算出这个数据集中的数据个数,在这里我们的值是5个数据集
    labelCounts={
   } #
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值