信息熵--(计算某个数据集的信息熵)

信息熵计算公式:

单个信息的熵为:

I(X)=-p(X)\log _{2}p(X)

数据集存在多个类别的信息,数据集的信息熵为:

H=-\sum_{i=1}^{n}p(X_{i})\log _{2}^{}p(X_{i})

n表示n个类别;p(X_{i})表示第i个类别出现的概率;

计算数据集信息熵

1.准备数据集 下载地址IRIS鸢尾花数据集(多种格式)-下载地址_鸢尾花数据集下载-CSDN博客

2.将数据集从文件中读取出来,分为特征集和标签集

3.创建一个数据字典,以标签为键,标签个数为对应值。如果找不到标签,就要扩建数据集字典,加入该键,并记录当前类别出现的次数;如果已有标签,就在原有基础上加1

4.按键遍历标签集,根据公式计算信息熵

import numpy as np
def calculate_entropy(data):
    # 统计每个值的出现次数
    freq = {}
    for val in data:
        #freq.get(val, 0)
        #如果val存在于字典freq则返回val对应的值,否则返回0
        freq[val] = freq.get(val, 0) + 1
    print("第1类:",freq[1])
    print("第2类:",freq[2])
    print("第3类:",freq[3])

    # 计算概率和信息熵
    entropy = 0.0
    total = len(data)
    print("total",total)
    for key in freq:
        prob = freq[key] / total
        entropy -= prob * math.log(prob,2)
    return entropy

ef file2matrix(filename):
    #打开文件
    fr = open(filename)
    #读取文件所有内容
    arrayOLines = fr.readlines()
    #得到文件行数
    numberOfLines = len(arrayOLines)
    #返回的NumPy矩阵,解析完成的数据:numberOfLines行,3列
    returnMat = np.zeros((numberOfLines,4))
    #返回的分类标签向量
    classLabelVector = []
    #行的索引值
    index = 0
    for line in arrayOLines:
        #s.strip(rm),当rm空时,默认删除空白符(包括'\n','\r','\t',' ')
        line = line.strip()
        #使用s.split(str="",num=string,cout(str))将字符串根据'\t'分隔符进行切片。
        listFromLine = line.split(' ')
        #打乱数据
        # listFromLine = shuffle_columns(listFromLine)
        #将数据1-4列提取出来,存放到returnMat的NumPy矩阵中,也就是特征矩阵
        returnMat[index,:] = listFromLine[1:5]
        #进行分类
        if listFromLine[-1] == '"setosa"':
            classLabelVector.append(1)
        elif listFromLine[-1] == '"versicolor"':
            classLabelVector.append(2)
        elif listFromLine[-1] == '"virginica"':
            classLabelVector.append(3)
        index += 1
    return returnMat, classLabelVector

# 示例数据
# 示例数据
filename = "iris.txt"
data,label = file2matrix(filename)
print(label)

# 计算信息熵
entropy = calculate_entropy(label)
print("信息熵: ", entropy)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值