熵权法示例

作用

熵是指物质的分散程度,熵越大,说明物质越没有条理。同理,用在数据的指标上,当熵越大时,说明该数据越散乱,数据就越没有价值。
当给一组数据不同权重,让这组数据共同表示出该数据的特征时,该组数据的熵越大,说明数据越没有条理,对于指标的特征表示价值就越小。
因此通过熵权法对判定每组数据的每个类型权重是有一定指导作用的。

内容

  1. 将数据归一化处理,选择最常用的最大最小归一化,处理数据。
    在这里插入图片描述

  2. 将处理好的数据,分别求出该数据在该类型中的占比情况,形成占比矩阵
    在这里插入图片描述

  3. 利用求熵公式,分别求出每一类信息的熵
    在这里插入图片描述

    1. 该公式需要注意所有熵之和为1,即每个类型的熵相加=1,p值一纸,k值可求
      在这里插入图片描述
  4. 通过熵值,算出权重,即该类型数据在该比重中的占比
    在这里插入图片描述

代码实现

由于没有相关库,所以代码自己进行实现,其中代码利用了pandas、numpy对数据进行操作

def cal_weight(x):
    '''熵值法计算变量的权重'''
    # 归一化
    x = x.apply(lambda x: ((x - np.min(x)) / (np.max(x) - np.min(x))))

	# 对数据信息收集
    rows = x.index.size  # 行
    cols = x.columns.size  # 列

	# 计算k值
    k = 1.0 / math.log(rows)

	# 计算logm值
    lnf = [[None] * cols for i in range(rows)]
    x = array(x)
    lnf = [[None] * cols for i in range(rows)]
    lnf = array(lnf)
    for i in range(0, rows):
        for j in range(0, cols):
            if x[i][j] == 0:
                lnfij = 0.0
            else:
                p = x[i][j] / x.sum(axis=0)[j]
                lnfij = math.log(p) * p * (-k)
            lnf[i][j] = lnfij
    lnf = pd.DataFrame(lnf)
    E = lnf

    # 计算权重
    d = 1 - E.sum(axis=0)
    w = [[None] * 1 for i in range(cols)]
    for j in range(0, cols):
        wj = d[j] / sum(d)
        w[j] = wj
    w = pd.DataFrame(w)
    return w
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值