一、熵權法介紹
熵最先由申農引入信息論,目前已經在工程技術、社會經濟等領域得到了非常廣泛的應用。
熵權法的基本思路是根據各個特征和它對應的值的變異性的大小來確定客觀權重。
一般來說,若某個特征的信息熵越小,表明該特征的值得變異(對整體的影響)程度越大,提供的信息量越多,在綜合評價中所能起到
的作用也越大,其權重也就越大。相反,某個特征的信息熵越大,表明指標值得變異(對整體的影響)程度越小,提供的信息量也越少,
在綜合評價中所起到的作用也越小,其權重也就越小。
二、熵權法賦權步驟
1. 數據標准化(數據歸一化)
將各個指標的數據進行標准化(歸一化)處理。
假設給定了k個特征,其中
(每個特征的值表示)。假設對各特征數據(值)標准化后的值為
,那么
。
i 表示特征序列,j 表示 i 特征序列對應的各個具體的值的序列,所謂的序列就是起到標號的作用,方便人們理解公式的運行過程。
2. 求各指標的信息熵
根據信息論中信息熵的定義,一組數據的信息熵。其中
,如果
,則定義
。
3. 確定各指標權重
根據信息熵的計算公式,計算出各個特征的信息熵為 。通過信息熵計算各指標的權重:
。
4. 對各個特征進行評分
import xlrd import numpy as np #讀數據並求熵 path=u"D:\\LearningResource\\myLearningData\\hostital.xls" hn,nc=1,1 #hn為表頭行數,nc為表頭列數 sheetname=u'Sheet1' def readexcel(hn,nc): data = xlrd.open_workbook(path) table = data.sheet_by_name(sheetname) nrows = table.nrows data=[] for i in range(hn,nrows): data.append(table.row_values(i)[nc:]) return np.array(data) def entropy(data0): #返回每個樣本的指數 #樣本數,指標個數 n,m=np.shape(data0) #一行一個樣本,一列一個指標 #下面是歸一化 maxium=np.max(data0,axis=0) minium=np.min(data0,axis=0) data= (data0-minium)*1.0/(maxium-minium) ##計算第j項指標,第i個樣本占該指標的比重 sumzb=np.sum(data,axis=0) data=data/sumzb #對ln0處理 a=data*1.0 a[np.where(data==0)]=0.0001 # #計算每個指標的熵 e=(-1.0/np.log(n))*np.sum(data*np.log(a),axis=0) print(e) # #計算權重 w=(1-e)/np.sum(1-e) recodes=np.sum(data0*w,axis=1) return recodes data=readexcel(hn,nc) grades=entropy(data) print(grades)
原數據集