当我们需要对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知的条件,而对未知的情况不要做任何主观假设。在这种情况下,概率分布最均匀,预测的风险最小。因为这时概率分布的信息熵最大,所以称之为“最大熵法”。最大熵法在数学形式上很漂亮,但是实现起来比较复杂,但把它运用于金融领域的诱惑也比较大,比如说决定股票涨落的因素可能有几十甚至上百种,而最大熵方法恰恰能找到一个同时满足成千上万种不同条件的模型。

这里我们先不讨论算法(这里用的是ID3/C4.5),把一棵决策树建立起来再说。我们要建立的决策树的形式类似于“如果天气怎么样,去玩;否则,怎么着怎么着”的树形分叉。那么问题是用哪个属性(即变量,如天气、温度、湿度和风力)最适合充当这颗树的根节点,在它上面没有其他节点,其他的属性都是它的后续节点。借用信息论的概念,我们用一个统计量,“信息增益”(Information Gain)来衡量一个属性区分以上数据样本的能力。信息增益量越大,这个属性作为一棵树的根节点就能使这棵树更简洁,比如说一棵树可以这么读成,如果风力弱,就去玩;风力强,再按天气、温度等分情况讨论,此时用风力作为这棵树的根节点就很有价值。如果说,风力弱,再又天气晴朗,就去玩;如果风力强,再又怎么怎么分情况讨论,这棵树相比就不够简洁了。计算信息增益的公式需要用到“熵”(Entropy)。名词越来越多,让我们通过手工计算记住它们的计算方法,把Excel打开:

1 计算熵

我们检查的属性是是否出去玩。用Excel对上面数据的play变量的各个取值排个序(这个工作簿里把“play”这个词去掉),一共是14条记录,你能数出取值为yes的记录有9个,取值为no的有5个,我们说这个样本里有9个正例,5 个负例,记为S(9+,5-),S是样本的意思(Sample)。这里熵记为Entropy(S),计算公式为:

Entropy(S)= -(9/14)*log(9/14)-(5/14)*log(5/14)

解释一下,9/14是正例的个数与总记录之比,同样5/14是负例占总记录的比例。log(.)是以2为底的对数(我们知道以e为底的对数称为自然对数,记为ln(.),lg(.)表示以10为底的对数)。在Excel里我们可以随便找一个空白的单元格,键入以下公式即得0.940:

=-(9/14)*LOG(9/14,2)-(5/14)*LOG(5/14,2)

这里LOG(9/14,2)中的“2”表示以2为底。类似地,如果你习惯用Matlab做数学运算本,公式为

-(9/14)*log2(9/14)-(5/14)*log2(5/14)

其中“2”的含义与上同。

总结:在这个例子中,我们的输出属性(我们要检查的属性)“play”只有两个取值,同样地,如果输出属性的取值大于2,公式是对成的,一样的形式,连加就是,找到各个取值的个数,求出各自的比例。如果样本具有二元输出属性,其熵的公式为

Entropy(S) =-(p+)*log(p+)-(p-)*log(p-)
其中,p+、p-分别为正例和负例占总记录的比例。输出属性取值大于2的情况,公式是对称的。

2 分别以Wind、Humidity、Outlook和Temperature作为根节点,计算其信息增益

可以数得,属性Wind中取值为Weak的记录有Normal的记录有8条,其中正例6个,负例2个;同样,取值为Strong的记录6个,正例负例个3个。我们可以计算相应的熵为:

Entropy(Weak)=-(6/8)*log(6/8)-(2/8)*log(2/8)=0.811

Entropy(Strong)=-(3/6)*log(3/6)-(3/6)*log(3/6)=1.0

现在就可以计算出相应的信息增益了:

Gain(Wind)=Entropy(S)-(8/14)*Entropy(Weak)-(6/14)*Entropy(Strong)=0.940-(8/14)*0.811-(6/14)*1.0=0.048

这个公式的奥秘在于,8/14是属性Wind取值为Weak的个数占总记录的比例,同样6/14是其取值为Strong的记录个数与总记录数之比。

同理,如果以Humidity作为根节点:

Entropy(High)=0.985 ; Entropy(Normal)=0.592

Gain(Humidity)=0.940-(7/14)*Entropy(High)-(7/14)*Entropy(Normal)=0.151

以Outlook作为根节点:

Entropy(Sunny)=0.971 ; Entropy(Overcast)=0.0 ; Entropy(Rain)=0.971

Gain(Outlook)=0.940-(5/14)*Entropy(Sunny)-(4/14)*Entropy(Overcast)-(5/14)*Entropy(Rain)=0.247

以Temperature作为根节点:

Entropy(Cool)=0.811 ; Entropy(Hot)=1.0 ; Entropy(Mild)=0.918

Gain(Temperature)=0.940-(4/14)*Entropy(Cool)-(4/14)*Entropy(Hot)-(6/14)*Entropy(Mild)=0.029

这样我们就得到了以上四个属性相应的信息增益值:

Gain(Wind)=0.048 ;Gain(Humidity)=0.151 ; Gain(Outlook)=0.247 ;Gain(Temperature)=0.029

最后按照信息增益最大的原则选Outlook为根节点。子节点重复上面的步骤。这颗树可以是这样的,它读起来就跟你认为的那样、

关于信息增益(information gain)相关推荐

  1. 什么是信息增益(Information Gain)?

    参考链接: 什么是信息增益(Information Gain)? 信息熵到底是什么 首先建立一棵决策树.信息增益是一个统计量,用来描述一个属性区分数据样本的能力.信息增益越大,那么决策树就会越简洁.这 ...

  2. 什么是信息增益(Information Gain)

    当我们需要对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知的条件,而对未知的情况不要做任何主观假设.在这种情况下,概率分布最均匀,预测的风险最小.因为这时概率分布的信息熵最大,所以称之为 ...

  3. 最大信息熵增益_信息熵(Entropy)、信息增益(Information Gain)

    1. 信息熵:H(X) 描述X携带的信息量. 信息量越大(值变化越多),则越不确定,越不容易被预测. 对于抛硬币问题,每次有2种情况,信息熵为1 对于投骰子问题,每次有6中情况,信息熵为1.75 下面 ...

  4. python get score gain_什么是“熵和信息增益”?(What is “entropy and information gain”?)...

    什么是"熵和信息增益"?(What is "entropy and information gain"?) 我正在读这本书( NLTK ),令人困惑. 熵被定义 ...

  5. 论文阅读 An Information Gain Formulation for Active Volumetric 3D Reconstruction

    这是一篇讲基于3D重建这个场景,如何更好地计算information gain的 好像是2016ICRA 也是uzh实验室的 An Information Gain Formulation for A ...

  6. java 信息增益_对信息增益(IG,Information Gain)的理解和计算

    可能理解的不对. 决策树构建中节点的选择靠的就是信息增益了. 信息增益是一种有效的特征选择方法,理解起来很简单:增益嘛,肯定是有无这个特征对分类问题的影响的大小,这个特征存在的话,会对分类系统带来多少 ...

  7. ig信息增益 java_信息增益(IG,Information Gain)的理解和计算

    可能理解的不对. 决策树构建中节点的选择靠的就是信息增益了. 信息增益是一种有效的特征选择方法,理解起来很简单:增益嘛,肯定是有无这个特征对分类问题的影响的大小,这个特征存在的话,会对分类系统带来多少 ...

  8. Information Gain 计算 python实现

    from math import logdef I(*args):total = sum(args) + 0.0result = 0.0for i in args:if i == 0:result + ...

  9. IG (information gain)

    IG(t)=H( C )-H(C/T) 特征T的信息增益等于:整体C的信息量减去已知特征t时的信息量. 信息量通过熵来表达. H( C )是整体的信息熵 Ci为类别 H(C/T)是已知特征T时的信息量 ...

最新文章

  1. zabbix3.0禁用guest用户
  2. Linux下通过PXE服务器安装Linux系统
  3. Python 微信机器人-通过wxpy库向指定名称的好友发送微信消息实例演示
  4. 4.8 这和大脑有什么关系-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授
  5. 安信证券王环:安信证券数据中台建设历程
  6. 14 Java NIO vs IO-翻译
  7. java中文乱码问题的原因是什么?怎么解决中文乱码问题?
  8. 记录您的里程和社区运行情况:Java EE 7真实体验
  9. thinkphp v5.0.11漏洞_Thinkphp 5.0远程代码执行漏洞
  10. 发现一个 WPF/E Asp.net Server Control
  11. paper reading:Part-based Graph Convolutional Network for Action Recognition
  12. 开源大数据:Databricks Lakehouse
  13. 捕获asp.net下的未处理异常
  14. 一个接口文档模板的API设计流程
  15. 假显卡测试软件,如何使用软件检测真假显卡软件验证方法简介
  16. 解决 fast api “detail“: “There was an error parsing the body“问题
  17. python 强类型 弱类型_Python 到底是强类型语言,还是弱类型语言?
  18. mysql sniffer 源码_MySQL 抓包工具 - MySQL Sniffer 使用小结 (含带general_log日志)
  19. [翻译]Linter简介-摘自维基百科
  20. 【转】超级珍贵的卤水秘方大全!

热门文章

  1. 【c++数据结构】栈混洗的甄别算法
  2. 公链,仍然是区块链产业的根基!
  3. 分销APP联盟商家入驻商城系统开发
  4. 简述java什么是继承_Java 继承简述
  5. c语言编程能力风暴,学编程得从娃娃抓起:Abilix 能力风暴 发布 全新教育机器人伯牙...
  6. indesign如何画弧线_InDesign钢笔工具怎么使用
  7. SWAPIDC服务器销售模板,记录利用swapidc搭建IDC销售网站教程
  8. php 根据时间获取二十四节气
  9. 教你快速爬取哔哩哔哩整部番剧的视频弹幕
  10. 有机化学研究生博士生为什么被要求长时间工作