熵权法计算权重原理&python实现

信息熵越大,信息量到底是越大还是越小?权重和信息熵的大小到底是正相关还是负相关?
网上有一些相反的说法。
有些说:熵越大,方差越大,包含的信息越多,权重越大。
另一些说:熵越小,不确定性越小,提供的信息越大,权重越大。
今天复盘一下熵权法计算权重的原理,并python实现。

熵权法计算权重原理

信息熵计算

熵是对混乱程度的一种度量。混乱程度越大,熵就越大,包含的信息量越大;混乱程度越小,熵就越小,包含的信息量就越小。

计算公式:
在这里插入图片描述
这里的p是指标 j 中值为 i 的样本数占总样本数量的比例
比如,共有2个样本,当指标 j 取值分别为0,1,那么p(j=0)=1/2,p(j=1)=1/2,带入公式可得e=1。
当2个样本取值分别为1/2,1/2时,p只有一个,p(j=1/2)=1,带入公式得e=0。
由此可知,方差越大,熵越大,包含的信息越多,权重应当越大。
那么,为什么会有一些地方说,熵越小,信息量越大,权重越大呢?

熵权法计算

这个问题要从熵权法计算权重的公式说起:

  1. 归一化
    对于不同量纲的指标比较信息熵显然没有意义,需要先进行归一化。
    同时,需要对负向指标正向化处理,处理后的指标均为正向指标。
    在这里插入图片描述

  2. 计算熵值
    在这里插入图片描述
    需要注意的是,这里的p不再是每个取值的数量所占的比例,而是该取值的大小除以该指标所有取值的总和
    比如,共有2个样本,当指标 j 取值分别为0,1,那么p1=0/(0+1),p2=1/(0+1),带入公式可得e=0。
    当2个样本取值分别为1/2,1/2时,p1=1/2/(1/2+1/2)=1/2,p2=1/2/(1/2+1/2),带入公式可得e=1。

  3. 计算信息熵冗余度(差异):
    在这里插入图片描述

  4. 计算各项指标的权重:
    在这里插入图片描述

  5. 计算各样本的综合得分:
    在这里插入图片描述
    注意,这里的xij是归一化后的取值,即第一步的结果。

熵权悖论的解释

由此可知,权重与信息熵冗余度d正相关,与信息熵e是负相关的。也就是说,方差越大,熵越小,包含的信息越多,权重应当越大
这里与前面的结论相悖的原因就在于熵权法计算熵的公式中,p不是各取值的比例,而是各个取值的相对大小。公式不一样,结论自然不一样了。

Python实现信息熵求权重

import pandas as pd
import numpy as np
import math


def nml(series):  # 正向指标归一化 减最小值的min-max方法
    l = []
    for i in series:
        l.append((i - series.min()) / (series.max() - series.min()))
    return pd.Series(l, name=series.name)

def nml_max(series): #负向指标归一化
    l = []
    for i in series:
        l.append((series.max() - i) / (series.max() - series.min()))
    return pd.Series(l, name=series.name)


def nmlzt(df): #归一化函数,对正负向指标分别调用nml()和nml_max()
    dfn = pd.DataFrame()
    for i in df.columns:
        if (i=='D'):
            dfn = pd.concat([dfn, nml_max(df[i])], axis=1)
        else:
            dfn = pd.concat([dfn, nml(df[i])], axis=1)
    # dfn为归一化的数据
    return dfn


def pij(df):  #求信息熵公式中的p,这里直接用取值除以取值总和,而不是数量的比例
    D = df.copy()
    for i in range(D.shape[1]):  # 列
        sum = D.iloc[:, i].sum()
        for j in range(D.shape[0]):  # 行
            D.iloc[j, i] = D.iloc[j, i] / sum
            # 算pij
    return D


def entropy(series):	#计算信息熵
    _len = len(series)

    def ln(x):
        if x > 0:
            return math.log(x)
        else:
            return 0

    s = 0
    for i in series:
        s += i * ln(i)
    return -(1 / ln(_len)) * s


def _result(dfij):	#求e、d、w并返回
    dfn = dfij.copy()
    w = pd.DataFrame(index=dfn.columns, dtype='float64')
    l = []
    for i in dfn.columns:
        l.append(entropy(dfn[i]))
    w['熵'] = l
    w['差异性系数'] = 1 - np.array(l)
    sum = w['差异性系数'].sum()
    l = []
    for i in w['差异性系数']:
        l.append(i / sum)
    w['权重'] = l
    return w

df = pd.read_csv('Blues_D.csv')	#读取你需要计算的文件
df=df[['D','GTI']]	#选取需要计算的属性列
dfn = nmlzt(df) #归一化
dfij = pij(dfn) #求p
w = _result(dfij)	#求权重
w.to_excel('weight_info_entropy.xlsx', sheet_name='权重')#输出结果
dfn = dfn.set_index(df.index, drop=True)
print(dfn)

function weights = EntropyWeight(R) R=[11362.52 0.09 0.16 0.46 248826.93 61764.00 1175.46 13945.94 0.09 0.12 0.46 366749.75 67492.00 2006.30 6494.10 0.09 0.18 0.46 575484.13 55450.00 3179.81 2786.58 0.09 0.37 0.46 240453.22 47127.00 1007.70 3652.31 0.09 0.31 0.46 75097.81 56304.00 327.20 6912.91 0.09 0.16 0.46 644265.29 62325.00 3026.29 2935.47 0.09 1.53 0.46 58023.36 36317.00 524.05 2391.79 0.09 0.50 0.46 85780.50 37608.00 648.44 7819.17 0.09 0.78 0.46 177058.92 33394.00 1017.59 1853.59 0.09 0.53 0.46 111322.02 38794.00 602.38 1808.17 0.09 0.57 0.46 190963.75 40598.00 602.52 2589.79 0.09 0.46 0.46 21279.54 42350.00 193.81 3376.00 0.09 0.47 0.46 36360.11 33247.00 186.12 2579.29 0.09 0.59 0.46 47103.23 35117.00 170.41 2619.82 0.09 0.54 0.46 39441.33 33878.00 173.00 1891.67 0.09 0.62 0.46 26745.35 35603.00 89.49 9801.85 0.09 0.54 0.33 46605.99 68322.00 477.37 2086.82 0.09 0.54 0.33 46392.12 59776.00 214.72 4778.78 0.09 0.54 0.33 46602.17 81910.00 476.95 3513.29 0.09 0.54 0.33 46524.19 59876.00 370.50 3403.71 0.09 0.54 0.33 46441.96 80160.00 276.55 1868.82 0.09 0.54 0.33 46337.36 65905.00 153.04 13158.74 0.09 0.54 0.33 46670.46 65627.00 793.26 14141.25 0.09 0.54 0.33 46726.57 65660.00 905.81 9218.84 0.09 0.54 0.33 46601.10 64136.00 706.10 12796.40 0.09 0.54 0.33 46687.52 59946.00 826.54 5986.84 0.09 0.54 0.33 46725.63 61338.00 932.11 4530.30 0.09 0.54 0.33 46532.35 53579.00 569.98 16752.88 0.09 0.54 0.33 50614.56 77166.00 7292.01 7057.39 0.09 0.54 0.33 46497.62 57925.00 517.08 5511.34 0.09 0.54 0.33 46540.33 59071.00 566.65 2281.52 0.09 0.54 0.33 46428.45 50660.00 443.35 34128.95 0.08 1.01 0.36 18758.94 21599.00 142.45 34741.39 0.08 1.01 0.36 18759.61 21599.00 142.45 24750.51 0.08 1.01 0.36 18757.34 21599.00 142.45 35925.81 0.08 1.01 0.36 18752.49 21599.00 142.45 24405.34 0.08 1.01 0.36 18756.66 21599.00 142.45 40710.14 0.08 1.01 0.36 18760.75 21599.00 142.45 46971.87 0.08 1.01 0.36 18756.38 21599.00 142.45 33221.32 0.08 1.01 0.36 18755.51 21599.00 142.45 24023.14 0.08 2.69 0.36 12855.70 21661.00 170.99 30590.70 0.08 0.76 0.36 32293.26 23120.00 229.68 15652.29 0.08 1.24 0.36 21935.16 21937.00 124.78 14916.38 0.08 0.98 0.36 11623.95 21577.00 88.29 22973.37 0.08 0.71 0.36 7892.65 19603.00 69.68 21458.16 0.08 0.44 0.36 11196.69 20781.00 80.61 19155.98 0.08 0.44 0.36 10356.69 19741.00 102.79 18941.57 0.08 0.48 0.36 15122.14 21256.00 141.40 20675.96 0.08 3.18 0.36 18487.01 22390.00 192.74 22612.26 0.08 0.49 0.36 22001.18 20367.00 164.87 18318.47 0.08 0.97 0.36 26521.92 22325.00 163.90 33541.61 0.04 0.85 0.35 33855.71 24735.00 292.51 27040.05 0.04 0.66 0.35 18876.03 24520.00 233.79 20489.79 0.03 0.85 0.31 28068.29 20545.00 178.80 27140.40 0.09 0.88 0.36 24801.21 20298.00 166.90 35900.02 0.09 0.91 0.36 21534.93 20050.00 155.00 27251.66 0.09 0.93 0.36 18269.22 19803.00 143.11 15143.84 0.10 0.96 0.36 15008.83 19555.00 131.21 16351.72 0.09 1.17 0.36 14168.86 18531.00 105.00 17837.20 0.09 0.90 0.36 16056.77 19988.00 147.15 25991.64 0.09 0.75 0.36 11501.53 21044.00 147.86 13648.25 0.09 0.72 0.36 10888.90 18835.00 113.01 12772.75 0.09 0.87 0.36 11375.24 16883.00 111.60 41941.21 0.09 1.13 0.36 11873.96 22350.00 183.13 10432.26 0.09 0.41 0.36 17618.56 17581.00 94.02 35564.24 0.09 0.62 0.36 17875.61 17845.00 93.64 20762.02 0.09 0.82 0.36 18136.38 18110.00 93.27 22089.70 0.09 1.03 0.36 18398.57 18374.00 92.89 18384.29 0.09 1.23 0.39 18656.43 18639.00 92.51 16824.37 0.09 1.44 0.39 18919.83 18903.00 92.14 13857.14 0.09 0.51 0.39 10358.63 19212.00 88.65 8712.90 0.09 0.61 0.39 3931.13 18264.00 41.97 10800.31 0.09 0.52 0.39 9950.91 18665.00 47.97 9815.43 0.09 0.71 0.39 2976.86 17366.00 25.69 8765.56 0.09 0.82 0.39 10452.28 21363.00 76.10 8437.01 0.09 0.83 0.41 6894.72 16625.00 40.63 14200.33 0.09 1.53 0.41 6617.49 18893.00 67.65 15355.90 0.09 1.34 0.41 5375.72 20796.00 66.54 19694.06 0.09 1.27 0.41 11843.69 22027.00 115.03 14524.43 0.09 1.30 0.41 13185.32 21891.00 93.58 13915.71 0.09 0.95 0.41 6578.46 20627.00 75.59 15002.81 0.09 0.83 0.41 3888.06 21750.00 48.92 26875.82 0.09 0.84 0.41 5516.55 22427.00 57.36 17270.00 0.09 0.86 0.41 7131.54 23104.00 65.82 28461.40 0.09 0.87 0.41 8752.89 23780.00 74.28 17462.28 0.09 0.88 0.41 10377.55 24457.00 82.74 9584.35 0.09 0.89 0.41 12001.96 25134.00 91.21 20661.31 0.09 1.03 0.41 27222.89 23300.00 157.11 13223.84 0.09 1.22 0.41 13171.20 23778.00 87.25 24004.08 0.09 1.19 0.41 17142.58 24447.00 119.48 11964.47 0.09 1.16 0.41 21120.92 25117.00 151.71 31521.15 0.09 1.13 0.41 25090.65 25786.00 183.94 25748.12 0.09 1.10 0.41 29062.75 26456.00 216.16 64098.05 0.09 1.08 0.32 33039.35 27125.00 248.39 40595.71 0.09 1.05 0.32 37016.57 27794.00 280.62 92481.81 0.09 1.02 0.32 40982.50 28464.00 312.85 42747.30 0.09 0.99 0.32 44960.00 29133.00 345.07 30212.83 0.09 1.44 0.32 34264.08 27574.00 266.78 38703.82 0.09 0.98 0.32 23858.67 26679.00 231.36 55126.42 0.09 1.53 0.32 20080.43 28890.00 323.43 27766.68 0.09 1.13 0.32 33748.45 26726.00 284.99 35325.51 0.03 1.01 0.32 35028.65 28329.00 430.80 64724.68 0.07 1.75 0.32 52218.37 29861.00 778.65 25183.91 0.09 1.47 0.32 42626.49 28675.00 569.06 31261.57 0.09 1.19 0.32 33039.59 27490.00 359.47 20184.92 0.09 0.91 0.32 23453.39 26304.00 149.89 13603.83 0.09 0.95 0.32 16285.64 25481.00 94.11 30375.86 0.09 0.89 0.32 26044.01 31134.00 137.81 11886.79 0.09 1.07 0.32 26671.14 27409.00 108.27 13504.87 0.09 1.12 0.32 30758.77 27671.00 161.75 37169.03 0.09 0.97 0.32 12626.07 30010.00 85.48 31276.35 0.04 1.61 0.38 41929.52 31565.00 299.70 43333.13 0.05 1.01 0.34 45599.36 32398.00 445.10 20406.04 0.09 1.05 0.36 40563.31 29869.00 382.17 34238.25 0.09 1.10 0.36 35531.95 27340.00 319.24 14120.59 0.09 1.14 0.36 30495.98 24811.00 256.31 10873.24 0.09 1.18 0.36 25465.47 22282.00 193.38 14448.28 0.09 1.23 0.36 20431.18 19753.00 130.45 9076.50 0.09 1.27 0.36 15394.59 17224.00 67.55 8036.60 0.09 0.67 0.36 7758.83 11647.00 36.76 10114.31 0.09 0.55 0.36 17879.54 22059.00 102.86 6075.27 0.09 0.86 0.36 19239.31 14462.00 62.52 13764.62 0.09 0.91 0.36 19721.86 19919.00 84.36 11573.04 0.09 0.60 0.36 10486.33 19863.00 54.22 13626.06 0.09 2.52 0.36 10891.81 17190.00 68.84 10830.84 0.09 0.98 0.36 13608.16 19879.00 49.83 6841.56 0.09 1.01 0.36 20008.54 21020.00 65.39 10521.20 0.09 0.97 0.36 19015.13 16976.00 100.56 6037.35 0.09 1.14 0.36 23596.68 15138.00 53.59 9275.53 0.09 0.89 0.36 23308.27 19578.00 68.77 9057.86 0.09 1.17 0.36 11604.69 18721.00 42.75 8923.55 0.09 0.80 0.36 9537.00 17553.00 40.66 13761.91 0.09 0.90 0.36 21148.07 23724.00 79.90 21268.47 0.04 0.57 0.33 38793.99 25678.00 199.94 13363.37 0.04 0.66 0.31 56555.92 21081.00 245.14 14453.60 0.03 0.63 0.31 19953.36 18820.00 100.48 11829.70 0.05 0.81 0.31 25918.16 22456.00 117.61 42106.02 0.09 0.79 0.35 20710.88 23063.00 143.40 39036.31 0.09 0.77 0.35 15510.26 23671.00 169.20 17448.52 0.09 0.75 0.35 10312.59 24278.00 194.99 22126.41 0.09 0.75 0.35 17698.17 24370.00 155.29 20331.93 0.09 1.48 0.35 16303.14 24154.00 121.54 9421.45 0.09 0.73 0.35 13905.69 18593.00 38.50 15151.44 0.09 0.98 0.35 6178.98 20689.00 134.43 21301.02 0.09 0.70 0.35 16627.69 24393.00 140.47 12718.77 0.09 0.79 0.35 12064.65 22451.00 92.67 13941.15 0.09 0.66 0.35 9286.81 22364.00 73.81 16282.98 0.09 0.77 0.35 20645.03 21077.00 165.22 22383.11 0.09 0.81 0.35 3183.80 22771.00 84.82 17067.94 0.04 0.70 0.35 23174.98 23088.00 170.60 35053.31 0.06 0.74 0.35 63517.72 26003.00 406.74 28555.88 0.04 0.71 0.34 28140.10 24690.00 213.42 16641.66 0.03 0.76 0.37 25640.67 24302.00 215.61 16935.67 0.09 0.88 0.39 23386.75 22016.00 147.95 11584.39 0.09 1.00 0.39 21138.10 19730.00 80.30 10563.10 0.09 1.04 0.39 9866.77 14252.00 47.92 13502.05 0.09 0.97 0.39 9416.34 15026.00 40.86 10535.47 0.09 1.00 0.39 13169.64 17009.00 46.84 17123.04 0.09 1.01 0.39 21080.59 19711.00 92.63 10125.69 0.09 0.99 0.39 21605.53 17745.00 98.09 13593.04 0.09 1.20 0.39 19453.01 18648.00 122.12 9836.46 0.09 1.00 0.39 9859.09 17787.00 55.22 14690.64 0.09 1.30 0.39 19927.82 22880.00 88.20 13076.99 0.04 1.19 0.34 20086.00 17666.00 111.69 16422.92 0.09 1.59 0.33 16774.12 18830.00 109.92 17859.30 0.09 1.99 0.33 13468.03 19993.00 108.16 18747.08 0.61 2.40 0.33 10159.22 21157.00 106.40 15159.39 0.09 1.38 0.33 7830.20 17528.00 57.35 12845.10 0.09 2.45 0.33 13588.20 19032.00 76.58 9188.39 0.09 1.02 0.33 5956.94 16774.00 28.32 9036.53 0.09 1.29 0.33 14774.03 18745.00 83.16 6525.98 0.09 1.50 0.33 15053.83 17868.00 43.03 7644.43 0.09 1.28 0.33 30219.57 20374.00 49.37 13572.81 0.09 0.68 0.33 30130.54 19564.00 172.96 7907.85 0.09 1.62 0.33 13964.61 17662.00 54.00 8809.85 0.09 0.92 0.33 4204.58 16545.00 22.25 6884.81 0.09 0.63 0.33 4395.32 17906.00 41.94 8451.63 0.09 0.73 0.33 9975.39 17799.00 51.96 6860.03 0.09 1.47 0.33 12573.16 16592.00 62.02 17084.94 0.09 0.44 0.43 24736.75 20923.00 116.02 8757.34 0.09 0.44 0.43 11789.12 18564.00 56.52 11177.14 0.04 0.87 0.43 16002.85 17613.00 86.64 28221.33 0.03 1.12 0.43 26836.63 22040.00 198.69 21430.99 0.09 0.99 0.43 22229.78 22619.00 189.80 22511.88 0.09 0.87 0.43 17626.13 23198.00 180.91 38587.94 0.09 0.75 0.43 13019.17 23776.00 172.02 18652.20 0.09 0.63 0.43 8416.53 24355.00 163.13 26649.48 0.07 0.51 0.43 3808.58 24934.00 154.25 7903.55 0.09 0.76 0.43 9380.44 20937.00 114.25 15837.99 0.09 0.50 0.36 9487.30 24743.00 133.14 7446.30 0.09 0.69 0.36 15728.01 20089.00 130.47 28856.62 0.09 0.84 0.36 18659.60 14343.00 200.37 19235.99 0.09 0.79 0.36 27623.27 24992.00 212.31 11655.61 0.09 0.68 0.36 8179.83 17943.00 89.23 13067.49 0.09 0.91 0.36 14362.08 23357.00 215.03 15548.11 0.09 0.84 0.36 5396.09 12744.00 64.97 14707.39 0.09 0.84 0.36 13146.07 19238.00 96.00 13035.52 0.09 0.73 0.36 4508.10 15931.00 72.36 14001.60 0.09 0.69 0.36 9622.65 18250.00 96.76 6848.03 0.09 0.72 0.36 12581.10 20001.00 137.44 11884.95 0.09 0.71 0.36 10642.14 20372.00 114.32 39681.91 0.03 2.49 0.36 43859.16 26861.00 453.98 ] [rows,cols]=size(R);%计算原始指标数据矩阵的行列数 K=1/log(rows); %计算K值 P=zeros(rows,cols);%初始化矩阵 sumBycols=sum(R,1); for i=1:rows %进行循环 for j=1:cols P(i,j)=R(i,j)./sumBycols(1,j); end end lnPij=zeros(rows,cols); for i=1:rows for j=1:cols if P(i,j)==0 lnPij(i,j)=0; else lnPij(i,j)=log(P(i,j)); end end end Hj=-K*(sum(P.*lnPij,1)); % 计算熵值Hj weights=(1-Hj)/(cols-sum(Hj)); end
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值