信息增益——信息熵

本文深入探讨了信息熵的概念,解释了它是如何作为信息量和不确定性度量的,并通过实例说明了信息熵随知识增长的变化过程。同时,文章还介绍了基尼不纯度这一衡量信息不纯度的指标。

熵是一个热力学中表征物质状态的参量之一,物理意义为:体系混乱程度的度量。

信息熵是为了解决信息量化问题。香浓【】认为,一条信息的信息量和它的不确定性有直接关系。一个问题的不确定性越大,要搞清楚这个问题,需要了解的信息就越多,其信息熵就越大。

                                                                   

 

横坐标是P(x)表示x的概率

纵坐标为H(u)表示信息熵Entropy

当概率越接近0或者越接近1时,信息熵的值越小,其不确定性就越小,数据就越“纯”。

class Entropy(object):
    def __init__(self,name):
        self.name = name
    
    def entropy(X):
        Y = -X * np.log2(X)
        return Y
import matplotlib.pyplot as plt
import numpy as np
from aligo_alg import Entropy

#画出图
X = np.linspace(0,1,500)
Y = Entropy.entropy(X)
plt.xlabel("P(x)")

plt.ylabel("-P(x)log2(P(x))")
plt.plot(X,Y)

 

比如我们开始学习一门课程“无人驾驶”。

刚开始我们对其了解得很少,只有0,说明了解得信息很少,就是不知道!

对比于一个钻研30年的教授,对于这门课程的信息熵可能是接近于1的,就是我都知道。

在刚开始学习的时候,只是初步的做了了解,很多东西不知道,但是你又很想学好它。此时对于这门课程,你需要了解的东西就有很多很多,所以在前0.4的信息熵很大。

随着你慢慢的学习,思路慢慢的理清,需要了解的东西不多了。此时对于这门课程的信息熵就会慢慢减小了。

 

用白话描述就是,如果没有外力的作用,这个世界将是越来越无序的。人活着,在于尽量让熵变低,即让世界变得有序,降低不确定性。

当我们在消费资源时,是一个增熵的过程,将有序的食物变为无序的能力。

当我们在学习的时候,是一个减熵的过程,减少了不确定的信息,让自己的思维变得更加有序

信息增益(减熵量 - 增熵量)即是衡量人生价值得尺度。

 

信息熵除了是独立信息的不确定性指标,也是衡量信息“纯度”的指标

基尼不纯度 是衡量信息不纯度的指标:                       

class Gini_impurity(object):
    def __init__(self,name):
        self.name = name
        
    def gini_impurity(X):
        Y = X * (1-X)
        return Y

 

在机器学习中,信息熵信息增益是重要的概念,有着广泛的应用和明确的原理。 ### 原理 - **信息熵**:信息熵是度量样本集合纯度/不确定度最常用的指标之一。信息熵越小,表示不确定度越低,确定度越高,纯度越高;反之,熵越大,样本的不确定性就越大[^3]。 - **信息增益**:信息增益代表的是在一个条件下,信息复杂度(不确定性)减少的程度,也即纯度提高的程度。以某特征划分数据集前后的熵的差值,即熵减去条件熵,是信息量的差值,表示此条件对于信息熵减少的程度。例如,一开始是某状态,用了条件后变成另一种状态,则条件引起的变化就是信息增益[^3][^4]。 ### 应用 - **特征选择**:信息增益和香农熵是帮助选择最佳特征的重要工具。在构建分类模型时,好的条件是信息增益越大越好,因为变化完后熵越小,代表混乱程度越低,最大程度地减小了混乱。所以在树分叉的时候,应优先使用信息增益最大的属性,这样可以降低复杂度,简化后续逻辑,提高分类算法的性能和准确性[^2][^4]。 - **构建分类模型**:通过理解和应用信息熵信息增益的概念,可以构建更有效的分类模型。利用它们对数据进行分析和处理,能更好地把握数据间的复杂关系,为模型提供更准确的特征选择,从而提升模型的分类效果[^1][^2]。 ### 代码示例 以下是一个简单的Python代码示例,用于计算信息熵信息增益: ```python import numpy as np def entropy(y): classes, counts = np.unique(y, return_counts=True) probabilities = counts / len(y) entropy = -np.sum(probabilities * np.log2(probabilities)) return entropy def information_gain(X, y, feature_index): parent_entropy = entropy(y) feature_values = X[:, feature_index] unique_values = np.unique(feature_values) weighted_entropy = 0 for value in unique_values: subset_indices = feature_values == value subset_y = y[subset_indices] subset_entropy = entropy(subset_y) subset_weight = len(subset_y) / len(y) weighted_entropy += subset_weight * subset_entropy return parent_entropy - weighted_entropy # 示例数据 X = np.array([[1, 2], [2, 3], [1, 3], [2, 2]]) y = np.array([0, 1, 0, 1]) # 计算第一个特征的信息增益 ig = information_gain(X, y, 0) print("信息增益:", ig) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值