随笔 - 384  文章 - 0  评论 - 35  阅读 - 142万

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

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

1.信息熵(entropy)

 

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

复制代码
def entropy(sr):
    """计算信息熵,以一个明细的观测点序列为输入  \n

    参数:
    ----------
    sr: series, 一列明细数据,非统计好的各类别占比  \n

    返回值:
    ----------
    entr: float, 变量的熵"""
    p = sr.distribution()
    e = p.binPct * np.log(p.binPct)
    return -e.sum()
复制代码

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

复制代码
def distribution(self, sort='index'):
    """计算单个变量的分布, 返回的数据框有两列:cnt(个数)、binPct(占比) \n

    参数:
    ----------
    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):
    """计算基尼不纯度, 以一列明细观测为输入。  \n

    参数:
    ----------
    sr: series, 一列明细数据  \n

    返回值:
    ----------
    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.  \n

    参数:
    ----------
    sr: series, 一列明细数据,非统计好的各类别占比  \n
    by: series, 与 sr 等长,条件明细数据。将按 by 取不同的值分组,计算各组内 sr 的熵,再加权求和  \n

    返回值:
    ----------
    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列,第二个参数是特征列

 

 

 

posted on   小小喽啰  阅读(4219)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示