원문: https://mp.weixin.qq.com/s/vPNPdbZy11q1qsfEz9etZQ
1 엔트로피 가중치 방법 소개
엔트로피는 변화의 능력을 의미하는 그리스어 '변화'에서 유래되었으며 , 독일의 물리학자 클라우지우스는 열역학 제2법칙을 정립하기 위해 엔트로피 개념을 도입했습니다.
엔트로피의 개념은 열역학에서 유래하며 프로세스를 설명하는 데 사용되는 되돌릴 수 없는 현상입니다. 나중에 섀넌(Shannon)이 처음으로 정보 이론에 엔트로피를 도입했는데, 정보 이론에서는 엔트로피를 사물 발생의 불확실성을 표현하는 데 사용하고, 엔트로피는 불확실성의 척도로 사용 합니다 .
엔트로피 가중치법은 각 지표 조사 데이터 가 제공하는 정보량을 기초로 지표의 가중치를 결정하는 방식 으로, 기본 원리는 지표의 엔트로피 값이 작고 엔트로피 가중치가 클 경우 , 지표가 제공할 수 있는 정보의 양이 많을수록 의사결정에 있어서 그 역할이 커진다는 뜻이며, 반대로 지표의 엔트로피 값이 크고 엔트로피 가중치가 작을수록 지표가 제공 할 수 있는 정보가 많다는 의미입니다. 정보가 적고 의사결정에 더 큰 역할을 하지만 효과는 더 작을 것입니다.
엔트로피 가중치법은 데이터 자체의 불연속성에 의존하는 객관적인 할당 방법으로 , 여러 지표를 결합하여 샘플을 종합적으로 점수화하여 샘플 간 비교를 수행하는 데 사용됩니다 .
2 엔트로피 가중치 계산 단계
1) 데이터
선택 mm 선택m 지표, 총nn 개 샘플,X ij X_{ij}엑스나는 j为第IIi 의 jj 번째표본j 지표의 값:
2) 데이터 표준화 처리
각종 지표의 측정 단위와 방향이 균일하지 않은 경우 데이터의 표준화가 필요하며, 엔트로피 값을 계산할 때 의미 없는 로그를 피하기 위해 각 0 값에 0.01과 같이 더 작은 크기의 실수를 추가할 수 있습니다. .
- 긍정적인 지표의 경우(클수록 좋음)
- 부정적인 지표의 경우(작을수록 좋음)
3) jjth를 계산한다j 표시 아래의 항목ii이 지표를 설명하는 i 개 표본의 비율
4) jjth를 계산한다j 번째 지표
엔트로피가 클수록 시스템은 더 혼란스럽고 전달하는 정보는 적으며, 엔트로피가 작을수록 시스템은 더 질서 있고 더 많은 정보를 전달합니다.
Pij = 0 P_{ij}=0피나는 j=0 ,ej = 0 e_j=0이자형j=0 ;K = 1 ln (n ) K=\frac{1}{\ln (n)}케이=ln ( n )1, 여기서 nnn 은 샘플 수입니다.
5) jjth를 계산한다j 지수
지표의 정보효용가치는 지표의 정보엔트로피에 따라 달라집니다. ej e_j이자형j1과 1의 차이, 그 값은 가중치의 크기에 직접적인 영향을 미칩니다. 정보효용가치가 높을수록 평가의 중요성이 커지고 가중치도 커진다.
6) 평가지표의 가중치 계산
엔트로피법을 이용한 각 지표의 가중치 추정의 핵심은 지표정보의 차이계수를 이용하여 계산하는데, 차이계수가 높을수록 평가의 중요도가 높다(또는 가중치가 클수록 중요도가 높다). 평가 결과에 대한 기여).더 크게)
젭 _j 지표의 가중치:
7) 각 샘플의 종합 점수를 계산합니다.
3 파이썬 구현
import numpy as np
#输入数据
loss = np.random.uniform(1, 4, size=5)
active_number = np.array([2, 4, 5, 3, 2])
data = np.array([loss, active_number]) # 2个变量5个样本
print(data)
# 定义熵值法函数
def cal_weight(x):
'''熵值法计算变量的权重'''
# 正向化指标
#x = (x - np.max(x, axis=1).reshape((2, 1))) / (np.max(x, axis=1).reshape((2, 1)) - np.min(x, axis=1).reshape((2, 1)))
# 反向化指标
x = (np.max(x, axis=1).reshape((2, 1)) - x) / (np.max(x, axis=1).reshape((2, 1)) - np.min(x, axis=1).reshape((2, 1)))
#计算第i个研究对象某项指标的比重
Pij = x / np.sum(x, axis=1).reshape((2, 1))
ajs = []
#某项指标的熵值e
for i in Pij:
for j in i:
if j != 0:
a = j * np.log(j)
ajs.append(a)
else:
a = 0
ajs.append(a)
ajs = np.array(ajs).reshape((2, 5))
e = -(1 / np.log(5)) * np.sum(ajs, axis=1)
#计算差异系数
g = 1 - e
#给指标赋权,定义权重
w = g / np.sum(g, axis=0)
return w
w = cal_weight(data)
print(w)
결과:
[[1.57242561 1.12780429 2.24411338 2.36236155 2.37789035]
[2. 4. 5. 3. 2. ]]
[0.70534397 0.29465603]
참고:
https://blog.csdn.net/weixin_43425784/article/details/107047869
https://blog.csdn.net/mzy20010420/article/details/127327787