熵权法 —— python
目錄
一、熵權(quán)法介紹
二、熵權(quán)法賦權(quán)步驟
1.指標(biāo)正向化
mapminmax介紹
2.數(shù)據(jù)標(biāo)準(zhǔn)化
3.計算信息熵
4.計算權(quán)重以及得分
四、實例分析
1.導(dǎo)入相關(guān)庫
2.讀取數(shù)據(jù)
?2.指標(biāo)正向化
2.1?越小越優(yōu)型處理
2.2?某點最優(yōu)型指標(biāo)處理
3.數(shù)據(jù)標(biāo)準(zhǔn)化
4.計算信息熵
?5.計算權(quán)重
?6.計算得分
?總結(jié)
一、熵權(quán)法介紹
熵權(quán)法是一種客觀賦值方法。在具體使用的過程中,熵權(quán)法根據(jù)各指標(biāo)的變異程度,利用信息熵計算出各指標(biāo)的熵權(quán),再通過熵權(quán)對各指標(biāo)的權(quán)重進(jìn)行修正,從而得到較為客觀的指標(biāo)權(quán)重。
一般來說,若某個指標(biāo)的信息熵指標(biāo)權(quán)重確定方法之熵權(quán)法越小,表明指標(biāo)值得變異程度越大,提供的信息量越多,在綜合評價中所能起到的作用也越大,其權(quán)重也就越大。
相反,若某個指標(biāo)的信息熵指標(biāo)權(quán)重確定方法之熵權(quán)法越大,表明指標(biāo)值得變異程度越小,提供的信息量也越少,在綜合評價中所起到的作用也越小,其權(quán)重也就越小。
二、熵權(quán)法賦權(quán)步驟
1.指標(biāo)正向化
這個步驟視情況自己決定把。。。。
????????不同的指標(biāo)代表含義不一樣,有的指標(biāo)越大越好,稱為越大越優(yōu)型指標(biāo)。有的指標(biāo)越小越好,稱為越小越優(yōu)型指標(biāo),而有些指標(biāo)在某個點是最好的,稱為某點最優(yōu)型指標(biāo)。為方便評價,應(yīng)把所有指標(biāo)轉(zhuǎn)化成越大越優(yōu)型指標(biāo)。
設(shè)有m個待評對象,n個評價指標(biāo),可以構(gòu)成數(shù)據(jù)矩陣?
設(shè)數(shù)據(jù)矩陣內(nèi)元素,經(jīng)過指標(biāo)正向化處理過后的元素為? (Xij)'
-
越小越優(yōu)型指標(biāo):C,D屬于此類指標(biāo)
其他處理方法也可,只要指標(biāo)性質(zhì)不變即可
-
某點最優(yōu)型指標(biāo):E屬于此類指標(biāo)
????????設(shè)最優(yōu)點為a, 當(dāng)a=90時E最優(yōu)。
? ? ? ? ??其他處理方法也可,只要指標(biāo)性質(zhì)不變即可
-
越大越優(yōu)型指標(biāo):其余所有指標(biāo)屬于此類指標(biāo)
? ?此類指標(biāo)可以不用處理,想要處理也可,只要指標(biāo)性質(zhì)不變
mapminmax介紹
最大最小值歸一化
語法
[Y,PS] = mapminmax(X,YMIN,YMAX)
[Y,PS] = mapminmax(X,FP)
Y = mapminmax('apply',X,PS)
X = mapminmax('reverse',Y,PS)
說明:
[Y,PS] = mapminmax(X,YMIN,YMAX)?mapminmax(X,YMIN,YMAX) 將矩陣的每一行壓縮到 [YMIN,YMAX],其中當(dāng)前行的最大值變?yōu)閅MAX,最小值變?yōu)閅MIN。PS為結(jié)構(gòu)體儲存相關(guān)信息,如最大最小值等
[Y,PS] = mapminmax(X,FP)?其中FP為結(jié)構(gòu)體類型,這時就是將矩陣的每一行壓縮到[?FP.ymin,?FP.ymax]中
Y = mapminmax('apply',X,PS)?可以將之前儲存的結(jié)構(gòu)體應(yīng)用到新的矩陣中,利用上一步得到的PS來映射X到Y(jié)
X = mapminmax('reverse',Y,PS)?可按照之前數(shù)據(jù)規(guī)律,反歸一化,利用歸一化后的Y和PS重新得到X
2.數(shù)據(jù)標(biāo)準(zhǔn)化
????????因為每個指標(biāo)的數(shù)量級不一樣,需要把它們化到同一個范圍內(nèi)再比較。標(biāo)準(zhǔn)化的方法比較多,這里僅用最大最小值標(biāo)準(zhǔn)化方法。
????????設(shè)標(biāo)準(zhǔn)化后的數(shù)據(jù)矩陣元素為rij,由上可得指標(biāo)正向化后數(shù)據(jù)矩陣元素為?(Xij)'
3.計算信息熵
????????為避免Pij零元素的出現(xiàn)出現(xiàn)計算錯誤,歸一化最低區(qū)間可以從0.002開始。如果某個指標(biāo)的信息熵Ej越小,就表明其指標(biāo)值的變異程度越大,提供的 信息量也越大,可以認(rèn)為該指標(biāo)在綜合評價起到作用也越大。
4.計算權(quán)重以及得分
權(quán)重為:
得分為:
四、實例分析
????????用一篇高引用的核心期刊論文[1]為例,針對各個銀行的資產(chǎn)收益率,費(fèi)用利潤率,逾期貸款率,非生息資產(chǎn)率,流動性比率,資產(chǎn)使用率,自有資本率指標(biāo)進(jìn)行評價。設(shè)資產(chǎn)收益率為A,費(fèi)用利潤率為B,逾期貸款率為C,非生息資產(chǎn)率為D,流動性比率為E,資產(chǎn)使用率為F,自有資本率為G。數(shù)據(jù)表格如下:
1.導(dǎo)入相關(guān)庫
#導(dǎo)入相關(guān)庫 import copy import pandas as pd import numpy as np2.讀取數(shù)據(jù)
#讀取數(shù)據(jù) data=pd.read_excel('D:\桌面\shangquan.xlsx') print(data)返回:
?在這里,我們可以看到讀取的數(shù)據(jù)中,有部分是我們不想要的,于是我們得做處理
首先,我們先提取一下變量名
label_need=data.keys()[2:] print(label_need)返回:
?
data=data(:,3:end) %只取指標(biāo)數(shù)據(jù)然后,我們提取變量名下的數(shù)據(jù)值
data1=data[label_need].values print(data1)返回:
?2.指標(biāo)正向化
#指標(biāo)正向 化處理后數(shù)據(jù)為data2 data2=data1 print(data2)2.1?越小越優(yōu)型處理
#越小越優(yōu)指標(biāo)位置,注意python是從0開始計數(shù),對應(yīng)位置也要相應(yīng)減1 index=[2,3] for i in range(0,len(index)):data2[:,index[i]]=max(data1[:,index[i]])-data1[:,index[i]] print(data2)返回:
2.2?某點最優(yōu)型指標(biāo)處理
#某點最優(yōu)型指標(biāo) index1=[4] a=90 #最優(yōu)型數(shù)值 for i in range(0,len(index1)):data2[:,index1[i]]=1-abs(data1[:,index1[i]]-a)/max(abs(data1[:,index1[i]]-a)) print(data2)返回:
3.數(shù)據(jù)標(biāo)準(zhǔn)化
#0.002~1區(qū)間歸一化 [m,n]=data2.shape data3=copy.deepcopy(data2) ymin=0.002 ymax=1 for j in range(0,n):d_max=max(data2[:,j])d_min=min(data2[:,j])data3[:,j]=(ymax-ymin)*(data2[:,j]-d_min)/(d_max-d_min)+ymin print(data3)返回:
4.計算信息熵
#計算信息熵 p=copy.deepcopy(data3) for j in range(0,n):p[:,j]=data3[:,j]/sum(data3[:,j]) print(p) E=copy.deepcopy(data3[0,:]) for j in range(0,n):E[j]=-1/np.log(m)*sum(p[:,j]*np.log(p[:,j])) print(E)返回:?
?5.計算權(quán)重
# 計算權(quán)重 w=(1-E)/sum(1-E) print(w)返回:
?6.計算得分
#計算得分 s=np.dot(data3,w) Score=100*s/max(s) for i in range(0,len(Score)):print(f"第{i}個評價對象得分為:{Score[i]}")返回:
?總結(jié)
#導(dǎo)入相關(guān)庫 import copy import pandas as pd import numpy as np #讀取數(shù)據(jù) data=pd.read_excel('D:\桌面\shangquan.xlsx') print(data)label_need=data.keys()[2:] print(label_need) data1=data[label_need].values print(data1)#指標(biāo)正向 化處理后數(shù)據(jù)為data2 data2=data1 print(data2)#越小越優(yōu)指標(biāo)位置,注意python是從0開始計數(shù),對應(yīng)位置也要相應(yīng)減1 index=[2,3] for i in range(0,len(index)):data2[:,index[i]]=max(data1[:,index[i]])-data1[:,index[i]] print(data2)#某點最優(yōu)型指標(biāo) index1=[4] a=90 #最優(yōu)型數(shù)值 for i in range(0,len(index1)):data2[:,index1[i]]=1-abs(data1[:,index1[i]]-a)/max(abs(data1[:,index1[i]]-a)) print(data2)#0.002~1區(qū)間歸一化 [m,n]=data2.shape data3=copy.deepcopy(data2) ymin=0.002 ymax=1 for j in range(0,n):d_max=max(data2[:,j])d_min=min(data2[:,j])data3[:,j]=(ymax-ymin)*(data2[:,j]-d_min)/(d_max-d_min)+ymin print(data3)#計算信息熵 p=copy.deepcopy(data3) for j in range(0,n):p[:,j]=data3[:,j]/sum(data3[:,j]) print(p) E=copy.deepcopy(data3[0,:]) for j in range(0,n):E[j]=-1/np.log(m)*sum(p[:,j]*np.log(p[:,j])) print(E)# 計算權(quán)重 w=(1-E)/sum(1-E) print(w)#計算得分 s=np.dot(data3,w) Score=100*s/max(s) for i in range(0,len(Score)):print(f"第{i}個評價對象得分為:{Score[i]}")總結(jié)
以上是生活随笔為你收集整理的熵权法 —— python的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3.x和python2.x唯
- 下一篇: 没有bug队——加贝——Python 练