Implementação do método de peso de entropia

método de peso de entropia

De um modo geral, se a probabilidade de um indicador for maior, o grau de incerteza é menor, a entropia da informação é menor, o grau de dispersão do indicador é maior, a quantidade de informação fornecida é maior e o papel que pode desempenhar na Quanto maior for a avaliação abrangente, maior será o seu peso. Pelo contrário, quanto menor a probabilidade de um determinado indicador, menor o grau de incerteza e maior a entropia da informação, indica que o valor do indicador é menos discreto, a quantidade de informação fornecida é menor, e o papel desempenhado na avaliação global também é maior: quanto menor for, menor será o seu peso.

O método do peso da entropia está no campo da estatística, o que é diferente da interpretação da entropia no campo da informática. Em suma, no domínio da estatística, quando os dados estão mais dispersos, quanto menor for o valor da entropia, pode-se considerar que os dados contêm mais informação, pelo que o peso é maior, o que é também a explicação do método do peso da entropia; enquanto no campo da informática, quanto mais dispersos os dados, menor o valor da entropia do cálculo e menos confiáveis ​​​​são as informações dos dados, pode-se dizer que os dados contêm menos informações.

Etapas do algoritmo

Suponha que haja mmm assuntos,nnn indicadores:
i = 1 , 2 , … , m , j = 1 , 2 , … , ni=1,2,\dots,m,j=1,2,\dots,neu=1 ,2 ,,eu ,j=1 ,2 ,,n
X = [ x 11 x 12 ⋯ x 1 nx 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋱ ⋮ xm 1 xm 2 ⋯ xmn ] X=\begin{bmatriz} {x_{11}}&{x_{12}} &{\cdots}&{x_{1n}}\\ {x_{21}}&{x_{22}}&{\cdots}&{x_{2n}}\\ {\vdots}&{\vdots} &{\ddots}&{\vdots}\\ {x_{m1}}&{x_{m2}}&{\cdots}&{x_{mn}}\\ \end{bmatrix}X= x11x21xm 1x12x22xm 2x1n _x2n _xhomem

Os indicadores são padronizados.

Para indicadores positivos: xij = xij − min ⁡ ( xj ) max ⁡ ( xj ) − min ⁡ ( xj ) x_{ij}=\frac{x_{ij}-\min(x_j)}{\max(x_j) - \min(x_j)}xeu=m a x ( xj) m eu n ( xj)xeum eu n ( xj).Para
indicadores negativos: xij = max ⁡ ( xj ) − xij max ⁡ ( xj ) − min ⁡ ( xj ) x_{ij}=\frac{\max(x_j)-x_{ij}}{\max(x_j ) -\min(x_j)}xeu=m a x ( xj) m eu n ( xj)m a x ( xj) −x _eu.

Calcule o iiO jjth sob o i objeto de pesquisaA proporção do índice j pij p_{ij}peu

pij = xij ∑ imxij p_{ij}=\frac{x_{ij}}{\sum\limits_{i}^mx_{ij}}peu=eueuxeuxeu

Calcule o valor de entropia do j-ésimo índice

ej = − k ∑ impij ln ⁡ pij e_j=-k\sum\limits_i^mp_{ij}\ln p_{ij}ej=-k _eueupeuEmpeuk = 1 ln ⁡ mk=\frac{1}{\ln m}k=eu neu1

Calcule o jjésimoO coeficiente de diferença gj g_jíndice jgj

Quanto maior o coeficiente de diferença, melhor, indicando que o índice desempenha um papel maior no objeto de pesquisa e que o índice é melhor.
gj = 1 − ej g_j=1-e_jgj=1-ej

Dê peso ao índice, defina o peso wj w_jcj

wj = gj ∑ jngj w_j=\frac{g_j}{\soma\limites_j^ng_j}cj=jnãogjgj

Calcular o valor de avaliação da amostra por peso, iiO jjth sob o i objeto de pesquisaO valor de avaliação do índice j é:

F ij = ajxij F_{ij}=a_jx_{ij}Feu=ajxeu

Parte IIO valor global de avaliação do objeto de investigação é:

F i = ∑ jn F ij F_i=\soma\limites_j^nF_{ij}Feu=jnãoFeu

dados./data.csv:

Modelo, consumo de combustível, potência, custo, segurança, facilidade de manutenção, operabilidade
Honda, 5, 1,4, 6, 3, 5
, 7 Audi, 9, 2, 30, 7, 5, 9
Santana, 8, 1,8, 11, 5, 7,5Buick
,12,2,5,18,7,5,5

programa:

#!/usr/bin/env python
# coding: utf-8
import numpy as np
import pandas as pd

#定义数据标准化函数。为了避免求熵值时对数无意义,对数据进行平移,对标准化后的数据统一加了常数0.001
def std_data(value,flag):
    for i in range(len(indicator)):
        #print(flag[i])
        if flag[i]=='+':
            value[:,i]=(value[:,i]-np.min(value[:,i],axis=0))/(np.max(value[:,i],axis=0)-np.min(value[:,i],axis=0))+0.001
        elif flag[i]=='-':
            value[:,i]=(np.max(value[:,i],axis=0)-value[:,i])/(np.max(value[:,i],axis=0)-np.min(value[:,i],axis=0))+0.001
    return value
#定义熵值法函数、熵值法计算变量的权重
def cal_weight(indicator,project,value):
    p= np.array([[0.0 for i in range(len(indicator))] for i in range(len(project))])                    
    print(p)
    for j in range(len(indicator)):
        p[:,j]=value[:,j]/np.sum(value[:,j],axis=0)#沿轴
    print(p)
    e=-1/np.log(len(project))*sum(p*np.log(p))      #计算熵值
    g=1-e     # 计算一致性程度
    w=g/sum(g)     #计算权重
    return w
if __name__ == '__main__':
    ##读取数据
    data=pd.read_csv('./data.csv',encoding='utf-8',index_col=0)
    data.dropna()
    indicator=data.columns.tolist()   ##指标个数
    project=data.index.tolist()    ##方案数、评价主体
    value=data.values
    print(indicator)
    print(project)
    print(value)
    print(data.head())
    ##数据标准化
    flag=["-","+","-","+","+","+"]  ##表示指标为正向指标还是反向指标
    std_value=std_data(value,flag)
    std_value.round(3)
    ##结果
    w=cal_weight(indicator,project,std_value)
    w=pd.DataFrame(w,index=data.columns,columns=['权重'])
    print("#######权重:#######")
    print(w)
    score=np.dot(std_value,w).round(2)
    score=pd.DataFrame(score,index=data.index,columns=['综合得分']).sort_values(by =['综合得分'],ascending = False)
    print(score)




Vantagens e desvantagens do método de peso de entropia

1. Vantagens
Em primeiro lugar, o método do peso de entropia é um método para determinar objetivamente o peso, que tem certa precisão em comparação com métodos subjetivos como o AHP; em segundo lugar, o peso
determinado por este método pode ser modificado, determinando assim a sua adaptabilidade. características.
2. Desvantagens
O âmbito de aplicação deste método é limitado e só é adequado para cálculo de pesos.

referência:

https://www.zhihu.com/question/274997106/answer/1222518795
https://blog.csdn.net/ziyin_2013/article/details/116496411

Acho que você gosta

Origin blog.csdn.net/philosophyatmath/article/details/129176222
Recomendado
Clasificación