组合赋权法之python
目錄
1.簡(jiǎn)介
2.算法原理
2.1 指標(biāo)正向化
2.2 數(shù)據(jù)標(biāo)準(zhǔn)化
2.3 計(jì)算主觀權(quán)重
2.4 計(jì)算客觀權(quán)重
2.5 計(jì)算組合權(quán)重
2.6 計(jì)算的得分
3.實(shí)例分析
3.1 讀取數(shù)據(jù)
3.2 指標(biāo)正向化
3.3 數(shù)據(jù)范圍標(biāo)準(zhǔn)化
3.4 計(jì)算主觀權(quán)重
3.5 計(jì)算客觀權(quán)重
3.6 計(jì)算組合權(quán)重
3.7 計(jì)算得分
完整代碼
1.簡(jiǎn)介
????????主觀賦權(quán)法(AHP)在根據(jù)決策者意圖確定權(quán)重方面比客觀賦權(quán)法(熵權(quán)法)具有更大的優(yōu)勢(shì),但客觀性相對(duì)較差,主觀性相對(duì)較強(qiáng);
????????而采用客觀賦權(quán)法有著客觀優(yōu)勢(shì),但不能反映出參與決策者對(duì)不同指標(biāo)重視程度,并且會(huì)有一定的權(quán)重和與實(shí)際指標(biāo)相反的程度。
????????針對(duì)主客觀賦權(quán)方法的優(yōu)缺點(diǎn),我們還力求將主觀隨機(jī)性控制在一定范圍內(nèi),實(shí)現(xiàn)主客觀賦權(quán)中的中正??陀^方面。指標(biāo)賦權(quán)公正,實(shí)現(xiàn)了主客觀內(nèi)在統(tǒng)一,評(píng)價(jià)結(jié)果真實(shí)、科學(xué)、可信。
????????因此,在對(duì)指標(biāo)進(jìn)行權(quán)重分配時(shí),應(yīng)考慮指標(biāo)數(shù)據(jù)之間的內(nèi)在統(tǒng)計(jì)規(guī)律和權(quán)威值。給出了合理的決策指標(biāo)賦權(quán)方法,即采用主觀賦權(quán)法(AHP)和客觀賦權(quán)法(熵權(quán)法)相結(jié)合的組合賦權(quán)方法,以彌補(bǔ)單一賦權(quán)帶來(lái)的不足。將兩種賦權(quán)方法相結(jié)合的加權(quán)方法稱為組合賦權(quán)法。
注意:本文所介紹的組合權(quán)重法請(qǐng)大家結(jié)合實(shí)際情況慎重使用,因?yàn)檫@個(gè)方法不太好
2.算法原理
2.1 指標(biāo)正向化
這個(gè)步驟視情況自己決定把。。。。
????????不同的指標(biāo)代表含義不一樣,有的指標(biāo)越大越好,稱為越大越優(yōu)型指標(biāo)。有的指標(biāo)越小越好,稱為越小越優(yōu)型指標(biāo),而有些指標(biāo)在某個(gè)點(diǎn)是最好的,稱為某點(diǎn)最優(yōu)型指標(biāo)。為方便評(píng)價(jià),應(yīng)把所有指標(biāo)轉(zhuǎn)化成越大越優(yōu)型指標(biāo)。
設(shè)有m個(gè)待評(píng)對(duì)象,n個(gè)評(píng)價(jià)指標(biāo),可以構(gòu)成數(shù)據(jù)矩陣?
設(shè)數(shù)據(jù)矩陣內(nèi)元素,經(jīng)過(guò)指標(biāo)正向化處理過(guò)后的元素為? (Xij)'
-
越小越優(yōu)型指標(biāo):C,D屬于此類指標(biāo)
其他處理方法也可,只要指標(biāo)性質(zhì)不變即可
-
某點(diǎn)最優(yōu)型指標(biāo):E屬于此類指標(biāo)
????????設(shè)最優(yōu)點(diǎn)為a, 當(dāng)a=90時(shí)E最優(yōu)。
? ? ? ? ??其他處理方法也可,只要指標(biāo)性質(zhì)不變即可
-
越大越優(yōu)型指標(biāo):其余所有指標(biāo)屬于此類指標(biāo)
? ?此類指標(biāo)可以不用處理,想要處理也可,只要指標(biāo)性質(zhì)不變
2.2 數(shù)據(jù)標(biāo)準(zhǔn)化
?因?yàn)槊總€(gè)指標(biāo)的數(shù)量級(jí)不一樣,需要把它們化到同一個(gè)范圍內(nèi)再比較。標(biāo)準(zhǔn)化的方法比較多,這里僅用最大最小值標(biāo)準(zhǔn)化方法。
????????設(shè)標(biāo)準(zhǔn)化后的數(shù)據(jù)矩陣元素為rij,由上可得指標(biāo)正向化后數(shù)據(jù)矩陣元素為?(Xij)'
2.3 計(jì)算主觀權(quán)重
- 得到最大特征值對(duì)應(yīng)特征向量
- 得到權(quán)重向量
2.4 計(jì)算客觀權(quán)重
- 計(jì)算信息熵
- 得到權(quán)重
2.5 計(jì)算組合權(quán)重
主客觀組合權(quán)重是:指標(biāo)的綜合權(quán)數(shù)?Wj :
αj?——層次分析法計(jì)算所得的權(quán)重
βj ?——熵值法計(jì)算所得權(quán)重
層次分析法
熵值法
2.6 計(jì)算的得分
3.實(shí)例分析
3.1 讀取數(shù)據(jù)
data = pd.read_excel('D:\桌面\zuhefuquan.xlsx') # print(data) label_need=data.keys()[1:]#提取變量名 # print(label_need) data1=data[label_need].values #只提取數(shù)據(jù) print(data1)返回:
3.2 指標(biāo)正向化
本實(shí)例中P1、P3屬于此類指標(biāo)
因此負(fù)向指標(biāo)正向化:
#越小越優(yōu)指標(biāo)位置,注意python是從0開始計(jì)數(shù),對(duì)應(yīng)位置也要相應(yīng)減1 data2 = data1 index=[1,3] for i in range(0,len(index)):data2[:,index[i]]=max(data1[:,index[i]])-data1[:,index[i]] print(data2)返回:
在對(duì)剩余正向指標(biāo)數(shù)據(jù)可以不做處理
3.3 數(shù)據(jù)范圍標(biāo)準(zhǔn)化
為什么不做0,1的標(biāo)準(zhǔn)化呢,因?yàn)橐粯?biāo)準(zhǔn)化有不少數(shù)據(jù)變成了0,對(duì)結(jié)果起到副作用
#0.002~1區(qū)間歸一化 [m,n]=data2.shape #查看行數(shù)和列數(shù) data3=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)返回:
3.4 計(jì)算主觀權(quán)重
#求特征值和特征向量 V,D = np.linalg.eig(data3) # print('特征值:') # print(V) # print('特征向量:') # print(D) #最大特征值 tzz = np.max(V) # print(tzz) #最大特征向量 k=[i for i in range(len(V)) if V[i] == np.max(V)] tzx = -D[:,k] # print(tzx) # #賦權(quán)重 quan=np.zeros((n,1)) for i in range(0,n):quan[i]=tzx[i]/np.sum(tzx) a=quan.T print(a)返回:
3.5 計(jì)算客觀權(quán)重
#計(jì)算信息熵 p=data3 for j in range(0,n):p[:,j]=data3[:,j]/sum(data3[:,j]) # print(p) E=data3[0,:] for j in range(0,n):E[j]=-1/np.log(m)*sum(p[:,j]*np.log(p[:,j])) # print(E) # 計(jì)算權(quán)重 b=(1-E)/sum(1-E) print(b)返回:
3.6 計(jì)算組合權(quán)重
#計(jì)算組合權(quán)重 w=b sum=0 for i in range(n):sum = sum + np.sqrt(a[i]*b[i]) # print(sum) for i in range(n):w[i] = np.sqrt(a[i]*b[i])/sum print(w)返回:
3.7 計(jì)算得分
#計(jì)算得分 s=np.dot(data3,w) Score=100*s/max(s) for i in range(0,len(Score)):print(f"方案{i}百分制評(píng)分為::{Score[i]}")返回:
完整代碼
#導(dǎo)入相關(guān)庫(kù) import pandas as pd import numpy as np #讀取數(shù)據(jù) data = pd.read_excel('D:\桌面\zuhefuquan.xlsx') # print(data) label_need=data.keys()[1:]#提取變量名 # print(label_need) data1=data[label_need].values #只提取數(shù)據(jù) print(data1)#越小越優(yōu)指標(biāo)位置,注意python是從0開始計(jì)數(shù),對(duì)應(yīng)位置也要相應(yīng)減1 data2 = data1 index=[1,3] for i in range(0,len(index)):data2[:,index[i]]=max(data1[:,index[i]])-data1[:,index[i]] print(data2)#0.002~1區(qū)間歸一化 [m,n]=data2.shape #查看行數(shù)和列數(shù) data3=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)#求特征值和特征向量 V,D = np.linalg.eig(data3) # print('特征值:') # print(V) # print('特征向量:') # print(D) #最大特征值 tzz = np.max(V) # print(tzz) #最大特征向量 k=[i for i in range(len(V)) if V[i] == np.max(V)] tzx = -D[:,k] # print(tzx) # #賦權(quán)重 quan=np.zeros((n,1)) for i in range(0,n):quan[i]=tzx[i]/np.sum(tzx) a=quan.T print(a)#計(jì)算信息熵 p=data3 for j in range(0,n):p[:,j]=data3[:,j]/sum(data3[:,j]) # print(p) E=data3[0,:] for j in range(0,n):E[j]=-1/np.log(m)*sum(p[:,j]*np.log(p[:,j])) # print(E) # 計(jì)算權(quán)重 b=(1-E)/sum(1-E) print(b)#計(jì)算組合權(quán)重 w=b sum=0 for i in range(n):sum = sum + np.sqrt(a[i]*b[i]) # print(sum) for i in range(n):w[i] = np.sqrt(a[i]*b[i])/sum print(w)#計(jì)算得分 s=np.dot(data3,w) Score=100*s/max(s) for i in range(0,len(Score)):print(f"方案{i}百分制評(píng)分為::{Score[i]}")總結(jié)
以上是生活随笔為你收集整理的组合赋权法之python的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ado.net mysql 连接池_AD
- 下一篇: 组合赋权法之matlab