信息增益matlab实现

一般地,一个决策树包含一个根节点,若干个内部节点和若干个叶节点,叶结点对应决策结果,其他每个节点对应于一个属性测试,每个结点包含的样本集合根据属性测试的结果被划分到子节点中;根节点包含样本全集,从根节点到每个叶节点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一颗泛化能力强,处理未见实例能力强的决策树。

信息熵 信息熵是度量样本集合纯度最常用的一种指标,假定当前样本集合D中第k类样本所占比例为pk(1,2,..|y|),则D的信息熵定义为

其中Ent(D)的值越小,则D的纯度越高。

信息增益 假定离散属性a有V个可能的取值a1,a2,...,aV,若使用a来对样本集D进行划分,则会产生V个分支节点,其中第v个分支节点包含了D中所有在属性a上取值为av的样本,记为Dv,根据信息熵的公式,在考虑到不同的分支节点所包含的样本数不同,给分支节点赋予权重|Dv|/|D|,即样本数越多的分支节点的影响越大,于是可计算出用属性a对样本集D进行划分所获得的”信息增益”。

一般而言,信息增益越大,则意味着使用属性a来进行划分所得的”纯度提升”越大。因此,我们可以用信息增益来进行决策树的划分属性选择。

实例分析 以下表的数据为例:其中有17个训练正例,学习目标是预测是不是好瓜的决策树。分类目标|Y|=2

信息熵计算得

上述实现代码为

close all;
clear all;
clc;
data = csvread('watermelon2.0.csv');
InforGain = gain(data);

function InforGain = gain(data) 
    [m, n] = size(data);
    InforGain = zeros(n-1,2);
    labels = data(:,n);
    for i=1:n
        tmp{i} = [];
        percen{i} = [];
        col = data(:,i);
        unicol = unique(col);
        %计算每一列有几类,并把每一类的信息熵和比例存储起来
        for j = 1:length(unicol)
            num = length(find(col==unicol(j)));
            pnum = length(find(col==unicol(j) & labels == 1));
            rate = pnum/num;
            if i==7
                rate = num/length(labels);
            end
            gain = -(rate*log2(rate)+(1-rate)*log2(1-rate));
            tmp{i}=[tmp{i} gain];
            percen{i}=[percen{i} num/length(col)];
        end
    end
    %整体信息熵
    InforEntropy = tmp{length(tmp)}(1);
    %将NAN转化为0
    for i = 1:length(tmp)
        tmp{i}(isnan(tmp{i})) = 0;
        %disp(tmp{i});
    end
    %求每一个属性列的信息增益
    for i = 1:length(percen)-1
        InforGain(i,:) = [i,roundn(InforEntropy-sum(tmp{i}.*percen{i}),-3)];
        disp(InforEntropy-sum(tmp{i}.*percen{i}));
    end

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

深度学习中的损失函数总结以及Center Loss函数笔记

图片分类里的center loss 目标函数,损失函数,代价函数 损失函数度量的是预测值与真实值之间的差异.损失函数通常写做L(y_,y).y_代表了预测值,y...

6525
来自专栏机器学习原理

机器学习(5)——KNNKNNKD Tree

前言:KNN算法以一种“物以类聚”为思想的方法,它不同于前面提到的回归算法,没有损失函数,通过判断预测值离的远近来预测结果。主要分为KNN算法和KD-Tree来...

3505
来自专栏机器学习算法工程师

从AlexNet剖析-卷积网络CNN的一般结构

作者:张旭 编辑:王抒伟 算了 想看多久看多久 零 参考目录: 一、卷积层 1.CNN中卷积层的作用 2.卷积层如何...

8945
来自专栏null的专栏

深度学习算法原理——栈式自编码神经网络

注:最近打算将UFLDL教程重新看一遍,其实里面有很多关于神经网络以及深度学习的知识点很有用,但是只是学习深度学习的话有一些内容就有点多余,所以想整理一个笔记,...

3805
来自专栏刘笑江的专栏

Deep Learning

2583
来自专栏张俊红

Sklearn参数详解—LR模型

2.4K6
来自专栏量化投资与机器学习

Matlab编程之——卷积神经网络CNN代码解析

这这是之前我共享的一个深度学习工具包,这是解释代码的一部分,具体的一些细节还还望大家根据自己的能力去做,慢慢去理解。不急昂! 源代码我公布出来希望大家学习交流,...

43910
来自专栏人工智能LeadAI

零基础入门深度学习 | 第四章:卷积神经网络

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习这个超热的技术,会不会感...

5597
来自专栏决胜机器学习

卷积神经网络(二) ——LetNet-5、AlexNet、VGG-16、残差网络

卷积神经网络(二) ——LetNet-5、AlexNet、VGG-16、残差网络 (原创内容,转载请注明来源,谢谢) 一、概述 本文主要介绍几种卷积网络模型,学...

5525
来自专栏yl 成长笔记

kera 学习-线性回归

园子里头看到了一些最基础的 keras 入门指导, 用一层网络,可以训练一个简单的线性回归模型。

1294

扫码关注云+社区

领取腾讯云代金券