python信息熵与信息增益
发布时间
阅读量:
阅读量
前言
最近正在研读多篇华为杯获奖优秀论文涉及的数据预测相关领域具体来说属于时间序列预测问题发现在数据预处理阶段发现了非常有意思的'信息熵'概念此前曾在周志华教授的《机器学习》教材中学习过决策树剪枝相关内容而至于降维技术则是我首次深入接触的内容此外在这篇文献中也提到了'信息增益'这一概念我会将这两篇文献加入我的参考文献库以供感兴趣的研究者查阅
信息熵与信息增益
在这里所涉及的数据均为连续型数据,并非基于类别特征的频数统计。这些内容可作为参考查阅。

在数据处理过程中,这两部分的作用存在显著差异。其中,信息熵更多地被用作降维后的验证手段,而信息增益则主要承担着直接缩减维度的任务。
代码实现——信息熵计算
import pandas as pd
import numpy as np
file_path = '2012年.xls'
data = pd.read_excel(file_path, header=0)
data_array = data.values
def cal_weight(value):
n_features = value.shape[1] # 特征的数量
n_samples = value.shape[0] # 样本的数量
# 初始化熵增益数组
g = np.zeros(n_features)
p = np.zeros_like(data_array, dtype=np.float64)
e = np.copy(p)
# 计算每个特征的熵
summ=np.sum(data_array,axis = 0)
for j in range(n_samples):
for i in range(n_features):
p[j][i] = value[j][i] / summ[i]
p[j][i] = np.where(p[j][i] == 0, 1e-9, p[j][i])
e[j][i]=(p[j][i] * np.log(p[j][i]))
ee = np.sum(e,axis = 0)
for i in range(n_features):
g[i] = 1 - ee[i]
w = g / np.sum(g)
return w
# 计算权重
w = cal_weight(data_array)
feature_names = data.columns # 示例特征名
w_df = pd.DataFrame(w, index=feature_names, columns=['权重'])
print("#######权重:#######")
print(w_df.sort_values(by="权重", ascending=False))
python

论文中提供的代码并未实现(出现大量错误),而中间的算法推导部分我又耗时许久方才完成(即使公式较为基础),主要原因是过于依赖语言大模型而导致无法独立进行思考,在实际操作过程中遇到了诸多问题:
- 在原始数据处理阶段发现存在nan值现象,请教相关方法后了解到:
偏移加1法:将所有数值转换为相对于最小值的偏移量后再加1(如最小值+1),以确保所有数据均为非负值(例如原始最小值为-5,则将每个数转换为x+6的形式)。
归一化处理:通过将数据减去最小值并除以最大值与最小值之差的方法将其标准化至0到1区间(虽然这会改变绝对数值但保证了正数属性)。
对称化方法:当数据呈均值附近对称分布时可选择均值作为基准点并计算相对于均值的偏差形式再进行后续计算。 - 信息熵计算中的第三项在实际操作中可以通过简化公式来提高效率。
最终得到的结果与论文参考代码一致如图所示

参考
两篇优秀论文均源自2022年华为杯E题,在内容上均涉及信息论的相关研究。具体而言,第一篇论文提到了信息熵这一概念,并给出了其对应的编号为E22103350038;第二篇论文则着重讨论了信息增益这一指标,并将其编号确定为E22103040108。值得注意的是,这两篇论文分别位于第几页的位置有所不同:第一篇位于第几页的位置有所不同:第一篇位于第几页的位置有所不同:第一篇位于第几页的位置有所不同:第一篇位于第几页的位置有所不同:第一篇位于第几页的位置有所不同:第一篇位于第几页的位置有所不同:第一篇位于第几页的位置有所不同:第一篇位于第几页的位置有所不同:第一篇位于第几页的位置有所不同:第一篇位于第几页的位置有所不同:第一篇章节安排如下
全部评论 (0)
还没有任何评论哟~
