日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python熵权法确定权重

發(fā)布時(shí)間:2023/12/31 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python熵权法确定权重 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

聲明:本文只是個(gè)人按照原理對(duì)熵權(quán)法的實(shí)現(xiàn),結(jié)果與手動(dòng)計(jì)算的結(jié)果一樣。如果有疑問,請(qǐng)多參考一些其他的資料。

熵權(quán)法賦權(quán)是一種客觀賦權(quán)方法, 在一些評(píng)價(jià)中, 通過對(duì)熵的計(jì)算確定權(quán)重, 就是根據(jù)各項(xiàng)評(píng)價(jià)指標(biāo)值的差異程度, 確定各評(píng)價(jià)指標(biāo)的權(quán)重。詳細(xì)介紹及計(jì)算公式可參考文獻(xiàn)[1]。

主要步驟包括(1)原始數(shù)據(jù)矩陣進(jìn)行標(biāo)準(zhǔn)化(2)定義熵(3)定義熵權(quán)。具體步驟也可參考https://blog.csdn.net/wangh0802/article/details/53981356。這里不再贅述。這里通過Python實(shí)現(xiàn)計(jì)算步驟。

借用上面博客中的數(shù)據(jù),下表是對(duì)各個(gè)科室指標(biāo)考核后的評(píng)分結(jié)果。Xi為指標(biāo),ABCD..K為科室。

科室X1X2X3X4X5X6X7X8X9ABCDEFGHIJK
100901008490100100100100
10010078.610090100100100100
7510085.710090100100100100
10010078.61009010094.4100100
100901001001009010010080
1001001001009010010085.7100
10010078.61009010055.6100100
87.510085.7100100100100100100
10010092.910080100100100100
10090100100100100100100100
10010092.910090100100100100

將上述數(shù)據(jù)保存到Excel表格中,并用xlrd讀取。

Python程序如下

import numpy as np import xlrd#讀數(shù)據(jù)并求熵 path=u'K:\\選指標(biāo)的.xlsx' hn,nc=1,1 #hn為表頭行數(shù),nc為表頭列數(shù) sheetname=u'Sheet3' def readexcel(hn,nc):data = xlrd.open_workbook(path)table = data.sheet_by_name(sheetname)nrows = table.nrowsdata=[]for i in range(hn,nrows):data.append(table.row_values(i)[nc:])return np.array(data) def entropy(data0):#返回每個(gè)樣本的指數(shù)#樣本數(shù),指標(biāo)個(gè)數(shù)n,m=np.shape(data0)#一行一個(gè)樣本,一列一個(gè)指標(biāo)#下面是歸一化maxium=np.max(data0,axis=0)minium=np.min(data0,axis=0)data= (data0-minium)*1.0/(maxium-minium)##計(jì)算第j項(xiàng)指標(biāo),第i個(gè)樣本占該指標(biāo)的比重sumzb=np.sum(data,axis=0)data=data/sumzb#對(duì)ln0處理a=data*1.0a[np.where(data==0)]=0.0001 # #計(jì)算每個(gè)指標(biāo)的熵e=(-1.0/np.log(n))*np.sum(data*np.log(a),axis=0) # #計(jì)算權(quán)重w=(1-e)/np.sum(1-e)recodes=np.sum(data0*w,axis=1)return recodes data=readexcel(hn,nc) grades=entropy(data)

計(jì)算的結(jié)果為:

In[32]:grades Out[32]: array([95.7069621 , 93.14062354, 93.17273781, 92.77037549, 95.84064938,98.01005572, 90.20508545, 95.17203466, 95.96929203, 97.80841298,97.021269 ])

上面的程序計(jì)算得分時(shí)用了標(biāo)準(zhǔn)化前的值×權(quán)重,這對(duì)于原始評(píng)分量綱相同時(shí)沒有什么問題。

按照論文上的公式,計(jì)算得分時(shí)應(yīng)該用標(biāo)準(zhǔn)化后的值×權(quán)重,這對(duì)于原始數(shù)據(jù)量綱不同時(shí)應(yīng)該這樣做,因此按照論文的公式計(jì)算的程序如下:

import numpy as np import xlrd#讀數(shù)據(jù)并求熵 path=u'K:\\選指標(biāo)的.xlsx' hn,nc=1,1 #hn為表頭行數(shù),nc為表頭列數(shù) sheetname=u'Sheet3' def readexcel(hn,nc):data = xlrd.open_workbook(path)table = data.sheet_by_name(sheetname)nrows = table.nrowsdata=[]for i in range(hn,nrows):data.append(table.row_values(i)[nc:])return np.array(data) def entropy(data0):#返回每個(gè)樣本的指數(shù)#樣本數(shù),指標(biāo)個(gè)數(shù)n,m=np.shape(data0)#一行一個(gè)樣本,一列一個(gè)指標(biāo)#下面是歸一化maxium=np.max(data0,axis=0)minium=np.min(data0,axis=0)data= (data0-minium)*1.0/(maxium-minium)##計(jì)算第j項(xiàng)指標(biāo),第i個(gè)樣本占該指標(biāo)的比重sumzb=np.sum(data,axis=0)data=data/sumzb#對(duì)ln0處理a=data*1.0a[np.where(data==0)]=0.0001 # #計(jì)算每個(gè)指標(biāo)的熵e=(-1.0/np.log(n))*np.sum(data*np.log(a),axis=0) # #計(jì)算權(quán)重w=(1-e)/np.sum(1-e)recodes=np.sum(data*w,axis=1)return recodes data=readexcel(hn,nc) grades=entropy(data)

結(jié)果如下:

In[34]:grades Out[34]: array([0.08767219, 0.07639727, 0.08342572, 0.07555273, 0.08920511,0.11506703, 0.06970125, 0.09550656, 0.09852824, 0.10232353,0.10662037])

完。

參考文獻(xiàn):

[1] 倪九派, 李萍, 魏朝富,等. 基于AHP和熵權(quán)法賦權(quán)的區(qū)域土地開發(fā)整理潛力評(píng)價(jià)[J]. 農(nóng)業(yè)工程學(xué)報(bào), 2009, 25(5):202-209.

總結(jié)

以上是生活随笔為你收集整理的Python熵权法确定权重的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。