信息增益率详解

一、信息熵

信息熵是度量样本集合的无序程度的一种指标。如果一个样本集合的纯度较高,那么熵值就比较小;反之,如果一个样本集合的纯度比较低,那么熵值就比较大。

设样本集合 D 中第 k 类样本所占的比例为 pk(k=1,2,…,|y|),则 D 的信息熵的计算公式为:

def calc_entropy(data_set):
    num_entries = len(data_set)
    label_counts = {}
    for feat_vec in data_set:
        current_label = feat_vec[-1]
        if current_label not in label_counts.keys():
            label_counts[current_label] = 0
        label_counts[current_label] += 1
    entropy = 0.0
    for key in label_counts:
        prob = float(label_counts[key])/num_entries
        entropy -= prob * log(prob, 2)
    return entropy

二、信息增益

信息增益是指在得知样本特征 X 的信息所能提供的关于样本类别的信息量,它的计算公式为类别标签的信息熵H(Y)减去在特征 X 已知条件下类别标签的条件熵H(Y|X),用数学式子表示即:

信息增益越大,表示特征对样本分类的重要性越高。在构造决策树时,我们选择信息增益最大的特征作为当前节点对数据进行划分,重复该步骤,直到划分完毕。

def calc_info_gain(data_set, base_entropy, feat_idx):
    num_entries = len(data_set)
    feat_vals = [example[feat_idx] for example in data_set]
    unique_vals = set(feat_vals) 
    new_entropy = 0.0
    for value in unique_vals:
        sub_set = split_data_set(data_set, feat_idx, value)
        prob = len(sub_set)/float(num_entries)
        new_entropy += prob * calc_entropy(sub_set)
    info_gain = base_entropy - new_entropy
    return info_gain

三、信息增益率

信息增益率在选择划分属性时对可选择的属性数进行了惩罚,避免选择取值数目较多的属性,即会将其权值进行降低,计算公式为:

用信息增益率来选择属性时,先从候选划分属性中找出所有能使信息增益高于平均水平的属性,再从中选择信息增益率最高的。

def calc_info_gain_ratio(data_set, base_entropy, feat_idx):
    num_entries = len(data_set)
    feat_vals = [example[feat_idx] for example in data_set]
    unique_vals = set(feat_vals) 
    new_entropy = 0.0
    split_info = 0.0
    for value in unique_vals:
        sub_set = split_data_set(data_set, feat_idx, value)
        prob = len(sub_set)/float(num_entries)
        new_entropy += prob * calc_entropy(sub_set)
        split_info -= prob * log(prob, 2)
    if split_info == 0.0:
        return 0.0
    info_gain = base_entropy - new_entropy
    info_gain_ratio = info_gain / split_info
    return info_gain_ratio

四、实例分析

在使用信息增益率算法建立决策树时,在选择初始特征时,根据信息增益率最高的原则,选取了编号为2(有工作?)的属性进行划分,选择该属性的理由是它能将样本集划分成唯一的三个子集,且每个子集的信息熵都比较小。结果如下图所示:

可以看出,经过信息增益率算法构建的决策树比信息增益算法构建的更为简洁,划分效果更好。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/279616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-20 15:04
下一篇 2024-12-20 15:04

相关推荐

  • Java 监控接口返回信息报错信息怎么处理

    本文将从多个方面对 Java 监控接口返回信息报错信息的处理方法进行详细的阐述,其中包括如何捕获异常、如何使用日志输出错误信息、以及如何通过异常处理机制解决报错问题等等。以下是详细…

    编程 2025-04-29
  • 使用Python爬虫获取电影信息的实现方法

    本文将介绍如何使用Python编写爬虫程序,来获取和处理电影数据。需要了解基本的Python编程语言知识,并使用BeautifulSoup库和Requests库进行爬取。 一、准备…

    编程 2025-04-28
  • Python爬取网页信息

    本文将从多个方面对Python爬取网页信息做详细的阐述。 一、爬虫介绍 爬虫是一种自动化程序,可以模拟人对网页进行访问获取信息的行为。通过编写代码,我们可以指定要获取的信息,将其从…

    编程 2025-04-28
  • 如何使用Python执行Shell命令并获取执行过程信息

    本文将介绍如何使用Python执行Shell命令并获取执行过程信息。我们将从以下几个方面进行阐述: 一、执行Shell命令 Python内置的subprocess模块可以方便地执行…

    编程 2025-04-28
  • Python实现身份信息模拟生成与查验

    本文将从以下几个方面对Python实现身份信息模拟生成与查验进行详细阐述: 一、身份信息生成 身份信息生成是指通过代码生成符合身份信息规范的虚假数据。Python中,我们可以使用f…

    编程 2025-04-27
  • Dapper使用getschema获取表信息

    本文旨在介绍Dapper中使用getschema获取表信息的方法和注意事项。 一、获取某张表的所有列信息 使用Dapper获取某张表信息,可以使用 `IDbConnection.G…

    编程 2025-04-27
  • 已装备我军的空中信息化作战平台

    本文将会从多个方面详细阐述已装备我军的空中信息化作战平台。 一、平台概述 已装备我军的空中信息化作战平台是一个全新的作战系统,具备实时数据采集、处理、分析、共享的能力。它可以在不同…

    编程 2025-04-27
  • 通过提交信息搜索-使用git

    本篇文章重点讲解如何使用git通过提交信息来搜索。我们将从多个方面介绍如何使用git来搜索提交信息,并提供相应的代码示例以供参考。 一、搜索方式 Git提供了三种搜索方式,分别为:…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25

发表回复

登录后才能评论