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