• 决策树信息熵(entropy),基尼系数(gini)


    总是很容易忘记一些专业术语的公式,可以先理解再去记住

    1.信息熵(entropy)

     反正就是先计算每一类别的占比,然后再乘法,最后再将每一类加起来

    def entropy(sr):
        """计算信息熵,以一个明细的观测点序列为输入  
    
    
        参数:
        ----------
        sr: series, 一列明细数据,非统计好的各类别占比  
    
    
        返回值:
        ----------
        entr: float, 变量的熵"""
        p = sr.distribution()
        e = p.binPct * np.log(p.binPct)
        return -e.sum()

    其中distribution()的功能就是计算一个series各类的占比

    def distribution(self, sort='index'):
        """计算单个变量的分布, 返回的数据框有两列:cnt(个数)、binPct(占比) 
    
    
        参数:
        ----------
        sort: str, 'index' 表示按变量值的顺序排序,其他任意值表示变量值的个数占比排序"""
        a = self.value_counts()
        b = a / a.sum()
        df = pd.DataFrame({'cnt': a, 'binPct': b})
        if sort == 'index':
            df = df.sort_index()
        return df.reindex(columns=['cnt', 'binPct'])

    2.基尼系数(GINI)

     具体公式如上,也是要先计算每一类别的分布

    def gini_impurity(sr):
        """计算基尼不纯度, 以一列明细观测为输入。  
    
    
        参数:
        ----------
        sr: series, 一列明细数据  
    
    
        返回值:
        ----------
        impurity: float, 变量的基尼不纯度"""
        p = sr.distribution()
        impurity = 1 - (p.binPct * p.binPct).sum()
        return impurity

    3.信息增益

     

     反正首先计算lable列的信息熵,然后再根据特征a的取值去分组,然后再计算组内label的信息熵,最后那原始的信息熵-sum(每组信息熵*组内占比)

    def gain_entropy(sr, by):
        """计算随机变量的条件熵、gain.  
    
    
        参数:
        ----------
        sr: series, 一列明细数据,非统计好的各类别占比  
    
        by: series, 与 sr 等长,条件明细数据。将按 by 取不同的值分组,计算各组内 sr 的熵,再加权求和  
    
    
        返回值:
        ----------
        gain_entr: float, 变量的熵增益"""
    
        entr = entropy(sr)
    
        d = by.distribution().binPct
        cond_entr = pd.Series(index=d.index)
        for i in d.index:
            ei = entropy(sr[by == i])
            cond_entr[i] = ei
        cond_entr = (cond_entr * d).sum()
    
        return entr - cond_entr

    第一个参数是label列,第二个参数是特征列

  • 相关阅读:
    [Leetcode] 221. Maximal Square
    [翻译] TensorFlow Programmer's Guide之Frequently Asked Questions(问得频率最多的几个问题)
    [Kaggle] dogs-vs-cats之模型训练
    [Kaggle] dogs-vs-cats之建立模型
    [Kaggle] dogs-vs-cats之制作数据集[1]
    Linux虚拟机Centos 设置固定的静态IP
    linux IP动态变动之后 , 需要做的杂项操作
    GitBlit (1)-- 在linux 安装 GitBlit 并运行
    Linux 安装SVN
    微信开发(3) -- 支付后接收回调信息测试
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/14443646.html
Copyright © 2020-2023  润新知