新闻中心

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

2025-11-21
浏览次数:
返回列表
信息增益和信息增益率用于决策树特征选择,基于信息熵计算。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. 函数适用于离散特征,连续特征需预处理分箱。完整实现包含熵、增益、增益率三部分,支持决策树构建中的最优划分选择。

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 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>
                    <div class="aritcle_card">
                        <a class="aritcle_card_img" href="/ai/1202">
                            <img src="https://img.php.cn/upload/ai_manual/001/431/639/68b7a1824cc48323.png" alt="CA.LA">
                        </a>
                        <div class="aritcle_card_info">
                            <a href="/ai/1202">CA.LA</a>
                            <p>第一款时尚产品在线设计平台,服装设计系统</p>
                            <div class="">
                                <img src="/static/images/card_xiazai.png" alt="CA.LA">
                                <span>94</span>
                            </div>
                        </div>
                        <a href="/ai/1202" class="aritcle_card_btn">
                            <span>查看详情</span>
                            <img src="/static/images/cardxiayige-3.png" alt="CA.LA">
                        </a>
                    </div>
                
```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

信息增益率的实现

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

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中如何实现信息增益和信息增益率的详细内容,更多请关注其它相关文章!


# 你可  # 如何利用seo赚钱例子  # 福建测试网站优化检修  # 营销型网站建设无锡  # 苏州seo推广人员  # 关键词厂家排名  # 峨眉山网站推广外包服务  # 合肥网站建设设计制作  # 徐州网站建设代理加盟  # 网站推广托管面试问题  # 专业建设视频教学网站  # python  # 中文网  # 这两个  # 相关文章  # 适用于  # 命令行  # 最优  # 决策树  # 如何实现  # 非常好  # ai 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项  c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换  Eclipse怎么运行工程_Eclipse工程运行配置说明  J*aScript实现动态背景色下的文本与按钮颜色自适应调整  Win10系统怎么查看已安装更新_Win10卸载有问题的更新补丁  如何更改在 Excel 中打开超链接时的默认浏览器  解决Rails应用中内容错位与Turbo警告:meta标签误用导致富文本渲染异常  c++中的std::launder有什么实际用途_c++对象生命周期与指针优化  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】  yy漫画网页版官方入口_yy漫画官网登录页面链接  最新韩小圈网页版登录入口_官网在线观看官方链接  c++中的std::basic_string的SSO优化_c++短字符串优化深度解析  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法  Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口  在Qt QML中通过Python字典动态更新TextEdit内容的教程  京东单号查询入口_京东快递订单追踪入口  照顾宝贝2小游戏点击立即在线玩  狙击外星人小游戏开始_狙击外星人小游戏立即开始  mysql如何设置表访问权限_mysql表访问权限配置  Composer如何在生产环境安全地执行composer update  深入理解J*a编译器的兼容性选项:从-source到--release  电脑IP地址怎么查 查看本机IP地址的几种方法  Win11怎么关闭快速启动_Win11彻底关机设置教程  如何仅使用CSS更改登录界面背景图像图标的颜色  如何在网页中实现特定地点的随机图片展示  12306怎么选座位选到安静区_12306选座安静区域选择策略  QQ邮箱正确登录入口_QQ邮箱官方网站使用地址  在命令行怎么运行html项目_命令行运行html项目方法【教程】  如何在Promise链中有效终止错误处理后的执行  免费抖音短视频入口_抖音网页版短视频免费通道  《噬血代码2》新预告片发布 展示游戏剧情  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法  苹果手机指南针不准怎么校准 传感器校准方法详解【建议收藏】  邮政快递单号查询入口 邮政快递物流信息在线查询入口  Pandas DataFrame 多条件优先级排序与排名  C#中解析不规范的HTML为XML 常见的坑与解决办法  如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践  AngularJS $http POST请求数据传递与Go后端接收实践  C++如何生成随机数_C++ random库使用方法与范围设置  HTML长属性值处理:表单action路径优化与代码规范应对  sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件  支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡  html怎么在cmd下运行php文件_cmd运行html中php文件方法【教程】  汽水音乐在线解析 汽水音乐在线解析入口  荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】  C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言  Python Socket多播通信中指定源IP地址的实践指南  小红书网页版入口链接分享 小红书官网直接进 

搜索