python中如何实现信息增益和信息增益率

冰川箭仙
发布: 2025-11-21 16:21:50
原创
253人浏览过
<p>信息增益和信息增益率用于决策树特征选择,基于信息熵计算。1. 信息熵衡量数据混乱程度,公式为H(S) = -Σ(p_i log2(p_i)),Python用entropy函数实现。2. 信息增益IG(S, A) = H(S) - Σ(|S_v|/|S| H(S_v)),表示划分后熵的减少,通过information_gain函数计算特征对标签的分类能力。3. 信息增益率GR(S, A) = IG(S, A) / IV(A),其中IV(A)为特征A的固有值,用于抑制多取值特征偏差,由intrinsic_value函数计算。4. 示例中使用年龄特征计算得信息增益0.083,增益率0.096。5. 函数适用于离散特征,连续特征需预处理分箱。完整实现包含熵、增益、增益率三部分,支持决策树构建中的最优划分选择。</p>

python中如何实现信息增益和信息增益率

在Python中实现信息增益(Information Gain)和信息增益率(Information Gain Ratio),主要基于信息熵的概念。这两个指标常用于决策树算法(如ID3使用信息增益,C4.5使用信息增益率)中选择最优划分属性。

信息熵的计算

信息熵衡量数据集的混乱程度。假设一个数据集有 C 个类别,每个类别的概率为 p_i,则信息熵定义为:

H(S) = -Σ(p_i * log2(p_i))

注意:当 p_i 为0时,对应项视为0。

Python实现如下:

立即学习Python免费学习笔记(深入)”;

```python import numpy as np

def entropy(y): _, counts = np.unique(y, return_counts=True) probs = counts / len(y) return -np.sum(probs * np.log2(probs + 1e-9)) # 加极小值避免log(0)

<H3>信息增益的实现</H3>
<p>信息增益表示划分前后熵的减少量。对某个特征 <strong>A</strong>,其信息增益为:</p>
<p><strong>IG(S, A) = H(S) - Σ(|S_v|/|S| * H(S_v))</strong></p>
<p>其中 S_v 是特征 A 取值为 v 的子集。</p>

<p>代码实现:</p>
```python
def information_gain(X, y, feature_idx):
    original_entropy = entropy(y)
    values, counts = np.unique(X[:, feature_idx], return_counts=True)

    weighted_entropy = 0
    for value, count in zip(values, counts):
        subset_indices = X[:, feature_idx] == value
        subset_entropy = entropy(y[subset_indices])
        weighted_entropy += (count / len(y)) * subset_entropy

    return original_entropy - weighted_entropy
登录后复制

信息增益率的实现

信息增益偏向取值多的特征,因此引入信息增益率进行校正:

GPTKit
GPTKit

一个AI文本生成检测工具

GPTKit 108
查看详情 GPTKit

GR(S, A) = IG(S, A) / IV(A)

其中 IV(A) 是特征 A 的固有值(Intrinsic Value):

IV(A) = -Σ(|S_v|/|S| * log2(|S_v|/|S|))

完整实现:

```python def intrinsic_value(X, feature_idx): values, counts = np.unique(X[:, feature_idx], return_counts=True) probs = counts / len(X) return -np.sum(probs * np.log2(probs + 1e-9))

def information_gain_ratio(X, y, feature_idx): ig = information_gain(X, y, feature_idx) iv = intrinsic_value(X, feature_idx) return ig / iv if iv > 0 else 0

<H3>使用示例</H3>
<p>假设有一个简单的分类数据集:</p>
```python
# 示例数据:X为特征,y为标签
X = np.array([
    ['青年', '否', '否', '一般'],
    ['青年', '否', '否', '好'],
    ['青年', '是', '否', '好'],
    ['青年', '是', '是', '一般'],
    ['中年', '否', '否', '一般'],
    ['中年', '否', '否', '好'],
    ['中年', '是', '是', '好'],
    ['中年', '否', '是', '非常好'],
    ['老年', '否', '是', '非常好'],
    ['老年', '否', '是', '好'],
    ['老年', '是', '否', '好'],
    ['老年', '是', '否', '非常好'],
])

y = np.array(['否', '否', '是', '是', '否', '否', '是', '是', '是', '是', '是', '是'])

# 计算第0个特征(年龄)的信息增益和增益率
ig = information_gain(X, y, 0)
igr = information_gain_ratio(X, y, 0)

print(f"信息增益: {ig:.3f}")
print(f"信息增益率: {igr:.3f}")
登录后复制

基本上就这些。通过上述函数,你可以为任意特征计算信息增益和增益率,用于特征选择或构建决策树模型。注意处理离散特征,连续特征需先分箱或扩展逻辑。

以上就是python中如何实现信息增益和信息增益率的详细内容,更多请关注php中文网其它相关文章!

相关标签:
python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号