机器学习中信息增益的计算方法

数据分析 | 信息增益与基尼系数的通俗解释(含实例) 信息增益是基于信息论的概念,用于度量在给定特征的情况下,数据集的不确定性减少程度。在决策树中,选择能够使得信息增益最大的特征作为划分节点。基尼系数是一种衡量数据集纯度(impurity)的指标,它表示从数据集中随机抽取两个样本,其类别标签不一致的概率。在决策树中,选择基尼系数最小的特征作为划分节点。 阅读详情

背景介绍:最近在处理数据的时候,需要用到信息增益来进行特征选择,在网上查阅了一些资料,这里对信息增益的相关知识总结一下。

  • 信息增益原理介绍

介绍信息增益之前,首先需要介绍一下熵的概念,这是一个物理学概念,表示“一个系统的混乱程度”。系统的不确定性越高,熵就越大。假设集合中的变量X={x1,x2…xn},它对应在集合的概率分别是P={p1,p2…pn}。那么这个集合的熵表示为:

举一个的例子:对游戏活跃用户进行分层,分为高活跃、中活跃、低活跃,游戏A按照这个方式划分,用户比例分别为20%,30%,50%。游戏B按照这种方式划分,用户比例分别为5%,5%,90%。那么游戏A对于这种划分方式的熵为:

同理游戏B对于这种划分方式的熵为:

游戏A的熵比游戏B的熵大,所以游戏A的不确定性比游戏B高。用简单通俗的话来讲,游戏B要不就在上升期,要不就在衰退期,它的未来已经很确定了,所以熵低。而游戏A的未来有更多的不确定性,它的熵更高。

介绍完熵的概念,我们继续看信息增益。为了便于理解,我们还是以一个实际的例子来说明信息增益的概念。假设有下表样本

!

第一列为QQ,第二列为性别,第三列为活跃度,最后一列用户是否流失。我们要解决一个问题:性别和活跃度两个特征,哪个对用户流失影响更大?我们通过计算信息熵可以解决这个问题。

按照分组统计,我们可以得到如下信息:

其中Positive为正样本(已流失),Negative为负样本(未流失),下面的数值为不同划分下对应的人数。那么可得到三个熵:

整体熵:

性别熵:

性别信息增益:

同理计算活跃度熵:

活跃度信息增益:

活跃度的信息增益比性别的信息增益大,也就是说,活跃度对用户流失的影响比性别大。在做特征选择或者数据分析的时候,我们应该重点考察活跃度这个指标。


信息熵、条件熵、信息增益 其中::样本属于第i个类别的概率:总样本数:集合中属于第个类别的样本个数。 阅读详情

相关推荐

机器学习---决策树的划分依据(熵、信息增益、信息增益率、基尼值和基尼指数)

当每⽀球队夺冠概率相等都是 1/16 的时侯,Ent(D) = -(16 * 1/16 * log1/16) = 4。假如有 16 ⽀球队,分别编号,先问是否在 1-8 之间,如果是就继续问是否在 1-4 之间, 以此类。从信息的完整性上进⾏的描述:当系统的有序状态⼀致时,数据越集中的地⽅熵值越⼩,数据。从信息的有序性上进⾏的描述:当数据量⼀致时,系统越有序,熵值越低;例子:假设我们没有看世界杯的⽐赛,但是想知道哪⽀球队会是冠军, 我们只能猜测某⽀球队是。其中:Ent(D) 的值越⼩,则 D 的纯度越⾼。

weixin_43961909的博客 3377

决策树---信息增益

文章目录一、什么是信息增益?二、决策树的构造引入包1.信息增益2.划分数据集3.递归构建决策树三、在python中使用Matplotlib注解绘制树形图1.Matplotlib注解2.构造注解树四.测试与储存分类器1.使用决策树执行分类2.决策树的存储总结 一、什么是信息增益? 划分数据集的之前之后信息发生的变化称为信息增益,知道如何计算信息增益,就可以计算每个特征值划分数据集获得的信息增益,获取信息增益最高的特征就是最好的选择。 熵定义为信息的期望值,即计算所有类别所有可能包含的信息期望值,通过以下公式得

Huanghuali_的博客 1万+

信息熵与信息增益:机器学习特征选择的数学基础

信息熵是信息论中量化不确定性的核心概念,由香农提出并广泛应用于机器学习领域。其数学定义为H(X)=-Σp(x)logp(x),本质是描述系统混乱程度的度量。在工程实践中,信息熵衍生出条件熵和信息增益等重要指标,成为决策树等算法特征选择的理论基础。通过计算特征对目标变量的信息增益,可以量化该特征对降低不确定性的贡献度。典型应用场景包括文本分类的特征词筛选、医疗诊断的关键指标识别等。在实际机器学习项目中,需注意信息增益对多值特征的偏好问题,可结合信息增益比等改进指标进行优化。理解这些信息论工具,能帮助开发者构建

weixin_30175731的博客 186

熵、信息增益、信息增益率

一、熵 (1)原理 初中物理我们对“熵”这个东西懵懵懂懂,印象中仿佛对物体内部的热效应有关,时隔这么多年在机器学习、深度学习领域的学习中又看见了它的踪影,不免有点让人有点熟悉又陌生的感觉。“熵”这个东西看不见又摸不着,到底什么是“熵”? “熵”是用来干什么的?“熵”是一个系统里面的混乱程度的度量、标尺。系统混乱程度越低,系统的熵值越小,反之越大。 我们先从物理学的角度出发,假设相同条件下有一桶冰水和一桶热水,哪一个的熵值会大呢? 冰水中的分子热运动速度较慢,内部的分子排布比较有规律。热水内部温

qq_39197555的博客 1万+

【python 机器学习】信息增益率

在机器学习中的决策树算法(例如C4.5),信息增益率是用来选择最佳特征的另一个重要指标。信息增益率改进了信息增益的不足,尤其是在处理具有许多取值的特征时。通过使用信息增益率,决策树能够做出更加准确的决策。今天,我们将简单介绍信息增益率的概念、计算方法以及它与信息增益的区别。

m0_62599305的博客 908

【python 机器学习】信息增益介绍

在机器学习中,特别是在决策树算法(如ID3)中,信息增益是一个非常重要的概念。它用于衡量通过某个特征来分割数据时,信息的不确定性减少了多少。信息增益帮助我们选择最优的特征,使得数据分割后更加“纯净”。在这篇文章中,我们将以简单的语言介绍信息增益的概念,并解释它是如何在决策树中起作用的。

m0_62599305的博客 1277

机器学习中的信息增益

m0_68094390的博客 168

信息增益Information Gain原理与代码实例讲解

《信息增益Information Gain原理与代码实例讲解》 摘要 信息增益(Information Gain)是机器学习与数据挖掘中的一个核心概念,用于特征选择和模型优化。本文将详细讲解信息增益的基本原理、计算方法及其在机器学习中的广泛应用,并通过具体实例展示其实

AI天才研究院 798

信息、熵、信息增益、基尼指数

信息 信息是用来消除随机不确定性的东西,放在机器学习的语境里是这样的,每个类xi的信息为: I表示信息,p(xi)表示指xi的概率 熵 熵是对随机变量不确定性的度量,是信息的期望值 熵只依赖于随机变量的分布,和其取值没有关系 熵是用来度量不确定的,所以熵越大,X=xi的不确定性越大 给了样本集合D后,其经验熵为: k表示有k个分类,|CK|为样本集中属于K类的样本数 条件熵 在一个条件下,随...

BeforeEasy的博客 917

《UE4游戏开发》之 《音效系统的实现》

音效系统需要负责管理什么事情: 1.1 确定声音控制的分类:如背景音乐、技能音效、界面音效、角色配音等,不同游戏对声音有不同的分类 1.2 控制每个分类的声音的开启与关闭,以及调节每个分类声音的大小 解决如何分类: 2.1 首先需要知道ue4为声音分类提供了什么:SoundClass通常需要一个根分类【SC_RPG_Master】,便于总体控制音效,以及指定引擎默认启动的音效 打开SoundClass资产【SC_RPG_Master】,对根控制的设置,将逐级传递并按比例进行设置,以此达到控制一类声音的目的.

qq_21919621的博客 2126

NX工程图避坑指南:唐康林老师视频里没细说的10个实用技巧与隐藏设置

本文深入解析NX工程图中10个易被忽视的实用技巧与隐藏设置,涵盖视图更新、剖面线自定义、标注样式统一等核心问题。特别针对UG/NX8.5/NX10用户,提供从首选项设置到打印优化的完整解决方案,帮助工程师避开常见陷阱,提升制图效率与规范性。

weixin_28683689的博客 575

机器学习-特征选择:如何用信息增益提升模型性能?

其中,( IG(S, A) ) 表示数据集 ( S ) 关于特征 ( A ) 的信息增益,( T ) 是根据特征 ( A ) 分割后的子集,( |S_t| ) 是子集 ( S_t ) 中的样本数,( |S| ) 是原始数据集 ( S ) 中的样本总数,( H(S_t) ) 是子集 ( S_t ) 的信息熵。然而,特征选择本身充满挑战。偏向于具有较多取值的特征:信息增益度量的是特征的不确定性减少程度,这意味着具有较多取值的特征通常会获得更高的信息增益值,可能会导致偏向选择具有更多取值的特征。

笑不语的博客 1211

双目相机测距原理

普通双目相机具有如下特点:左右两个相机位于同一平面(光轴平行),且相机参数(焦距f)一致。其原理图如下:如图所示,P点为相应的物体位置,CL和CR为左右相机光心位置,PL和PR分别为左相机和右相机拍摄的P点成像结果。f为相机焦距,Z为物体距相机的深度距离,b为左右相机基线距离根据几何关系有:则相应的深度信息计算公式为:(1)其中XL-XR为视差。其余在两侧的情况同样可以用几何关系分析得到该表达式(1),即对于普通双目相机测距可以直接通过公式(1)得到深度结果。

doudou2weiwei的博客 4543

(1)信息熵,条件熵,信息增益,信息增益率

介绍信息熵和信息增益之前,先介绍信息增量的概念 文章目录1、信息量2、熵3、条件熵4、信息增益5、参考文献: 1、信息量 定义:信息多少的量度,与事件发生的概率相关。 信息量用III表示, 记事件A发生的概率为p,则事件A的信息量计算公式: IA=−log⁡2(p) I_A = -\log_2(p) IA​=−log2​(p) 例子 :比如说,我们掷骰子,点数为一事件的概率为16\frac{1}{6}61​, 那么该事件的信息量为: IB=−log⁡2(16)=log⁡26≈2.6 I_B = -\lo

xdg15294969271的博客 3759

Keil5 安装与卸载全攻略:从零开始到完美避坑

本文提供了Keil5集成开发环境的完整安装与卸载指南。针对嵌入式开发新手,详细解析了安装前的关键准备、MDK核心与C51双环境的安装激活步骤、常见问题排查,并重点介绍了如何彻底卸载软件以避免残留问题,帮助用户从零开始搭建稳定高效的开发环境。

weixin_29172963的博客 636

Unity简单操作:PostProcessing的使用

Postprocessing是一个unity2018版本的集成后期插件,有了这个插件,之后用unity开发时,后期调整颜色、光晕等会很方便。 目录 新建一个postprocessing profile(配置文件)。​ 参数说明: 新建一个postprocessing profile(配置文件)。 在主相机下加一个组件PostProcess Layer。 注意:需要将相机的Layer层设置与Post Process Layer 下的Volume blending(体积混合)...

weixin_39114763的博客 7368

决策树中的熵、条件熵、信息增益和Gini指数计算示例

文章目录信息熵条件熵信息增益公式计算Gini指数计算示例 信息 首先我们从什么是信息来着手分析: I(X=xi)=−log2p(xi)I_{(X = x_i)} = -log_2p(x_i)I(X=xi​)​=−log2​p(xi​) I(x)I(x)I(x)用来表示随机变量的信息,p(xi)p(x_i)p(xi​)指是当xixixi发生时的概率。 熵 在信息论和概率论中熵是对随机变量不确定性的度...

PIPIXIU的博客 1万+

【VS Code+Verilog+Vivado使用】(1)常用插件

VS Code + Verilog + Vivado联合使用说明

XDUryan的博客 5636

《统计学习方法》matlab计算决策树信息增益

统计学习方法 Matlab 决策树 信息增益 经验条件熵

qq_45289576的博客 673

unity 腾讯地图sdk移动和缩放代码

unity 腾讯地图sdk 实现移动端 缩放 和 移动

。。。。。 1283

基于STM32设计的老人摔倒检测报警系统【升级版】(235)

在 `235 基于STM32设计的老人摔倒检测报警系统(OneNet+MQTT)` 项目基础上增加了心率、血氧、体温测量3个功能。

1510

【机器学习300问】33、决策树是如何进行特征选择的?

看一个猫咪二分类的例子,什么是信息熵?什么是信息增益?决策树是如何进行特征选择的?

qq_39780701的博客 2379

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

机器学习算法原理--决策树

信息增益是指在使用某一特征进行数据集划分前后,数据集熵的变化量。熵是数据集中混乱程度或不确定性的一种度量,熵越大表示不确定性越高。信息增益反映了使用某个特征进行分类后,不确定性减少的程度。信息增益比是对信息增益的一种修正,旨在解决信息增益偏好具有大量值的特征的问题。它通过除以特征的固有值的熵(也就是特征本身的不确定性),来对信息增益进行规范化。

qiqiaoya的博客 697

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从“女神相亲记”带你走进决策树(机器学习经典方法)

1.决策树算法概述 2.典型的决策树是什么样子的 3.根节点的选择--信息增益 4.信息和信息量 4.1如何理解信息 4.2如何计算信息量 4.3信息论里面的计算方法 4.信息熵是什么 5.实战:根据信息增益生成决策树 5.1计算样本信息熵 5.2计算属性信息熵 5.3计算属性信息增益熵Gain 5.4确定根节点和各个节点 6.总结

大学成长道路上的探索经历与点滴思考,与君共勉,共筑成长。 944

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 研究生二年级下学期工作计划安排
下一篇: C语言中比较两个浮点数是否相等的方法,fabs和abs
It_BeeCoder
博客等级 码龄10年 967粉丝 238原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值