今天在课堂上给大家讲到信息熵、信息增益(在特征项较多的数据集中,对某些特征有明显的偏好,ID3 决策树学习算法 就是以信息增益为准则来选择划分属性。)和信息增益率(标识某个特征的重要程度,依据C4.5决策树算法)的时候,很多同学都不理解,对数学公式很敬畏,其实不然,接下来我就使用Python原生代码实现信息熵、信息增益、信息增益率的计算!!!
1.信息熵:
1.1 信息熵简介及公式:
1948年香农提出了信息熵(Entropy)的概念。
信息理论:
1、从信息的完整性上进行的描述:
当系统的有序状态一致时,数据越集中,熵值越小,数据越分散,熵值越大。[En]
When the ordered state of the system is consistent, the entropy value is smaller where the data is more concentrated, and the entropy value is larger where the data is more scattered.
2、从信息的有序性上进行的描述:
当数据量一致时,系统越有序,其熵值越低;越是混沌或分散的系统,其熵值越高。[En]
When the amount of data is consistent, the more orderly the system is, the lower the entropy value is; the more chaotic or scattered the system is, the higher the entropy value is.
"信息熵" (information entropy)是度量样本集合纯度最常用的一种指标。
信息熵的公式为:
说明:log不是自然对数,而是以2为底的对数
- 代码实现信息熵的计算:
import numpy as np
import pandas as pd
data = pd.DataFrame(
{'学历': ['专科', '专科', '专科', '专科', '专科', '本科', '本科', '本科', '本科', '本科', '研究生', '研究生', '研究生', '研究生', '研究生'],
'婚否': ['否', '否', '是', '是', '否', '否', '否', '是', '否', '否', '否', '否', '是', '是', '否'],
'是否有车': ['否', '否', '否', '是', '否', '否', '否', '是', '是', '是', '是', '是', '否', '否', '否'],
'收入水平': ['中', '高', '高', '中', '中', '中', '高', '高', '很高', '很高', '很高', '高', '高', '很高', '中'],
'类别': ['否', '否', '是', '是', '否', '否', '否', '是', '是', '是', '是', '是', '是', '是', '否']})
def infor(data):
a = pd.value_counts(data) / len(data)
return sum(np.log2(a) * a * (-1))
2. 信息增益
2.1 信息增益简介
信息增益:以某特征划分数据集前后的熵的差值。熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏。
信息增益 = entroy(前) - entroy(后)
注:信息增益表示得知特征X的信息而使得类Y的信息熵减少的程度
2.2 信息增益公式
2.3 Python代码实现信息增益的计算
def g(data, str1, str2):
e1 = data.groupby(str1).apply(lambda x: infor(x[str2]))
p1 = pd.value_counts(data[str1]) / len(data[str1])
e2 = sum(e1 * p1)
return infor(data[str2]) - e2
print("学历信息增益:{}".format(g(data, "学历", "类别")))
3. 信息增益率
3.1 信息增益率简介
增益率:增益率是用前面的信息增益Gain(D, a)和属性a对应的"固有值"(intrinsic value) [Quinlan , 1993J的比值来共同定义的。
3.2 信息增益率公式
属性 a 的可能取值数目越多(即 V 越大),则 IV(a) 的值通常会越大.
3.3 Python代码实现信息增益率计算
def gr(data, str1, str2):
return g(data, str1, str2) / infor(data[str1])
print("学历信息增益率:", gr(data, "学历", "类别"))
说明:以上代码实现思路仅供提升班级教学效果使用,如果您有幸刷到我的博客,万分荣幸,本人通过梳理本篇博客方便本籍学生理解的同时,自己也有所提升,这种感觉非常棒。当然以上思路仅为一家之言,如有不同见解欢迎各路大神评论区交流指正。
Original: https://blog.csdn.net/qq_41475067/article/details/113898634
Author: 福将~白鹿
Title: Python代码实现信息熵、信息增益、信息增益率的计算

Bert不完全手册3. Bert训练策略优化!RoBERTa & SpanBERT

一加七语音唤醒_一加语音助手小布体验:还有很长的路要走

MaskRCNN使用tf-gpu环境搭建实战

ModelCheckpoint自动保存模型

麦克风声源定位原理_使用麦克风阵列对声源定位的方法

5 分钟将 TensorFlow 1 代码转换到 TensorFlow 2

MATLAB 剔除异常点

Set A Light 3D Studio for Mac(3D摄影棚布光软件)中文

Unity插件——文字转朗读语音RtVioce插件功能/用法/下载

【python】tkinter界面化+百度API—语音翻译(二)

2021爱分析·智能客服厂商全景报告

tensorflow和numpy库中tensordot详解

虚拟机VMware 安装Ubuntu20.04+Apollo6.0

win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境
