【机器学习】【决策树】用样本集详解并计算:信息+香农熵+条件熵+信息增益+信息增益比+决策树的最优根节点+经验熵+经验条件熵

本文深入探讨信息论中的基本概念,包括信息、香农熵、条件熵和信息增益,并通过实例计算解释如何利用这些概念在机器学习中构建决策树。文章详细阐述了信息函数、香农熵的计算及其意义,并展示了不同概率下熵的变化曲线。同时,介绍了经验熵和经验条件熵的概念,最后讨论了信息增益比在C4.5算法中的作用,以选择决策树的最佳特征。
摘要由CSDN通过智能技术生成

首先信息、香农熵、条件熵、信息增益都是信息论里面的概念。

本文章的讲解和代码实现(除了条件熵和信息增益)都基于两个随机变量的样本空空间,样本空间X={x1, x2}的概率分布如下所示:

p(x1) = p1, 0< p1 <1
p(x2) = p2, 0< p2 <1
p1 + p2 = 1

1.信息

1.1信息函数

信息是用来消除随机不确定性的东西,信息的公式如下所示

I(x) = -log(p(x), 2) ,
其中p(x)就是随机变量x发生时的概率,x ∈ {x1,x2}

可知I(x1)就是随机变量x1的信息,I(x2)就是随机变量x2的信息。

1.2信息函数的python是实现

# -*- coding: utf-8 -*-
"""
@author: 蔚蓝的天空tom
Talk is cheap, show me the code
Aim:画出样本空间X={x1, x2}中随机变量变量x1的信息函数Info(x1)曲线图,因变量为p
Info(x1) = -log2(p)
已知p(x1)=p, p(x2)=1-p, 0<= p <= 1
"""

import numpy as np
import math
import matplotlib.pyplot as plt

def log_ele(x, n):
    '''
    表达式x的logn函数 log(x, n)
    :param x:表达式
    :param n:log的底
    '''
    if 0 >= x:
        return 0
    else:
        return math.log(x, n)

def log_func(X, n):
    '''
    logn函数的向量化
    :param X:向量X
    :param n:log的底
    '''
    func = np.frompyfunc(log_ele, 2, 1)
    return func(X, n)

#画以概率p为因变量的随机变量的信息曲线
def plot_information():
    '''
    样本空间:X={x1, x2}
    概率密度:p(x1) = p, p(x2) = 1 - p, 0.0<= p <=1.0
    '''
    p = np.arange(0.0, 1.01, 0.01)
    '''
    [ 0.    0.01  0.02  0.03  0.04  0.05  0.06  0.07  0.08  0.09  0.1   0.11
      0.12  0.13  0.14  0.15  0.16  0.17  0.18  0.19  0.2   0.21  0.22  0.23
      0.24  0.25  0.26  0.27  0.28  0.29  0.3   0.31  0.32  0.33  0.34  0.35
      0.36  0.37  0.38  0.39  0.4   0.41  0.42  0.43  0.44  0.45  0.46  0.47
      0.48  0.49  0.5   0.51  0.52  0.53  0.54  0.55  0.56  0.57  0.58  0.59
      0.6   0.61  0.62  0.63  0.64  0.65  0.66  0.67  0.68  0.69  0.7   0.71
      0.72  0.73  0.74  0.75  0.76  0.77  0.78  0.79  0.8   0.81  0.82  0.83
      0.84  0.85  0.86  0.87  0.88  0.89  0.9   0.91  0.92  0.93  0.94  0.95
      0.96  0.97  0.98  0.99  1.  ]
    '''
    info_x1 = -1 * log_func(p, 2)   #x1的信息
    
    #plot x1's information and x2's information in the coordinate system
    x = p
    y = info_x1
    plt.figure(1)
    plt.grid(True)
    plt.title('random variable x1\'s information')
    plt.xlabel('p')
    plt.ylabel('random variable x1\'s information')
    plt.ylim(min(y.min(), y.min()), max(y.max(), y.max())+1)
    plt.xlim(x.min() - 0.1, x.max() + 0.1)
    plt.plot(x, y, c='red',label='Info(x1)=-log2(p)')
    plt.legend(loc = 'upper right')
    plt.show()
if __name__=='__main__':
    plot_information()

1.3信息函数的曲线图(变量概率p为因变量)


从图上可以知道样本空间中的随机变量x1的信息是随着x1的发生概率p的增大而减小下。可知随机变量的概率越大,此信息变量的信息会越小,此随机变量的不确定性就越小。

2.香农熵(Shannon Entropy)

2.1香农熵公式

从概率论的角度看,香农熵是样本空间内所有随机变量的信息的期望,香农熵的公式如下所示:

H(X)=p(x1)I(x1) + p(x2)I(x2),
其中X是样本空间{x1, x2},p(x1)是x1发生时的概率,p(x2)是x2发生时的概率,I(x1)是x1的信息,I(x2)是x2的信息

2.2香农熵的意义

1)香农熵只依赖样本空间X的分布

2)香农熵和样本空间X内的所有的样本取值没有任何关系

3)香农熵用来度量随机变量的不确定性

4)熵越大,概率说明X的不确定性越大

5)熵越小,概率说明X的不确定性越小

6)熵,就是不确定性的度量!

应用:在机器学习分类中用到香农熵,熵越到说明这个类别的不确定性越大,反之越小。

下面以本章中的样本空间为例,画出香农熵以概率p为因变量的变化曲线,其中p(x1)=p, p(x2) = 1 - p,0<= p <= 1。

2.3香农熵的python实现

# -*- coding: utf-8 -*-
"""
@author: 蔚蓝的天空tom
Talk is cheap, show me the code
Aim:画出样本空间X={x1, x2}的香农熵函数图H(X) = -p*log2(p) - (1-p)*log2(1-p),因变量为p
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值