信息熵,信息增益,信息增益率的Python实现及其中用到的numpy,pandas函数

本文介绍了如何使用Python的pandas库处理数据集,包括定义数据集、信息熵函数、信息增益函数以及信息增益率函数的应用,以分析学历与类别之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 定义数据集

import numpy as np
import pandas as pd

data = pd.DataFrame(
    {'学历': ['专科', '专科', '专科', '专科', '专科', '本科', '本科', '本科', '本科', '本科', '研究生', '研究生', '研究生', '研究生', '研究生'],
     '婚否': ['否', '否', '是', '是', '否', '否', '否', '是', '否', '否', '否', '否', '是', '是', '否'],
     '是否有车': ['否', '否', '否', '是', '否', '否', '否', '是', '是', '是', '是', '是', '否', '否', '否'],
     '收入水平': ['中', '高', '高', '中', '中', '中', '高', '高', '很高', '很高', '很高', '高', '高', '很高', '中'],
     '类别': ['否', '否', '是', '是', '否', '否', '否', '是', '是', '是', '是', '是', '是', '是', '否']})
  • pandas.DataFrame()
print(data)
     学历 婚否 是否有车 收入水平 类别
0    专科  否    否    中  否
1    专科  否    否    高  否
2    专科  是    否    高  是
3    专科  是    是    中  是
4    专科  否    否    中  否
5    本科  否    否    中  否
6    本科  否    否    高  否
7    本科  是    是    高  是
8    本科  否    是   很高  是
9    本科  否    是   很高  是
10  研究生  否    是   很高  是
11  研究生  否    是    高  是
12  研究生  是    否    高  是
13  研究生  是    否   很高  是
14  研究生  否    否    中  否

2. 定义信息熵函数

信息熵的定义为:
信息熵的定义

#信息熵函数
def infor(data):
    a = pd.value_counts(data) / len(data)
    return -sum(np.log2(a) * a)
  • pandas.value_counts()
print(pd.value_counts(data["学历"]))
专科     5
本科     5
研究生    5
Name: 学历, dtype: int64

3. 定义信息增益函数

信息增益的定义为:
在这里插入图片描述

#信息增益函数
def gain(data, str1, str2):
    Ent_Dv = data.groupby(str1).apply(lambda x: infor(x[str2]))
    p1 = pd.value_counts(data[str1]) / len(data[str1])
    Ent_D_a = sum(p1 * Ent_Dv)
    Ent_D = infor(data[str2])
    return Ent_D - Ent_D_a
  • data.groupby()
for group in data.groupby("学历"):
    print(group)
('专科',    学历 婚否 是否有车 收入水平 类别
0  专科  否    否    中  否
1  专科  否    否    高  否
2  专科  是    否    高  是
3  专科  是    是    中  是
4  专科  否    否    中  否)
('本科',    学历 婚否 是否有车 收入水平 类别
5  本科  否    否    中  否
6  本科  否    否    高  否
7  本科  是    是    高  是
8  本科  否    是   很高  是
9  本科  否    是   很高  是)
('研究生',      学历 婚否 是否有车 收入水平 类别
10  研究生  否    是   很高  是
11  研究生  否    是    高  是
12  研究生  是    否    高  是
13  研究生  是    否   很高  是
14  研究生  否    否    中  否)
  • data.groupby().apply(lamda x: infor(x[str2]) )

分别对每个组进行infor(x[str2])操作

print(Ent_Dv)
学历
专科     0.970951
本科     0.970951
研究生    0.721928
dtype: float64

4. 定义信息增益率函数

信息增益率的定义为:
在这里插入图片描述

#信息增益率函数
def gainRatio(data, str1, str2):
    return gain(data, str1, str2) / infor(data[str1])
print("学历信息增益率:", gainRatio(data, "学历", "类别"))

学历信息增益率: 0.05237190142858302
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值