信息熵是一種用於衡量系統內部信息量的度量。在信息論中,信息是系統有序程度的一種度量。html
信息是肯定性的增長,不肯定性的減小(香農定理)。而信息熵是系統無序程度的一種度量,是系統不肯定性的量度。二者絕對值相等,但符號相反。一個系統的信息熵越小,該系統所含的信息量越大。python
信息熵被普遍用於計算機編碼,通訊理論,博弈論等與「信息量」和「不肯定性」相關的理論模型中。git
熵權法就是一個經過信息熵理論肯定系統中各指標權值的賦值方法,可以較爲精確客觀地判斷系統中各指標對總評價的貢獻大小。github
• 單調性,即發生機率越高的事件,其所攜帶的信息熵越低。極端案例就是「太陽從東方升起」,由於爲肯定事件,因此不攜帶任何信息量。從信息論的角度,認爲這句話沒有消除任何不肯定性。app
• 非負性,即信息熵不能爲負。這個很好理解,由於負的信息,即你得知了某個信息後,卻增長了不肯定性是不合邏輯編碼
• 累加性,即多隨機事件同時發生存在的總不肯定性的量度是能夠表示爲各事件不肯定性的量度的和。spa
熵最早由香農引入信息論,目前已經在工程技術、社會經濟等領域獲得了很是普遍的應用。.net
熵權法的基本思路是根據指標變異性的大小來肯定客觀權重。excel
熵權法相對於其餘打分評價模型來講,具備精確客觀的優勢。基於信息熵所計算得出的權重可以較爲精確地反應不一樣指標間的差異。可是相對應的,因爲該模型的本質是用有限個決策樣本去「估計」指標的信息熵,在樣本量過少的狀況下,基於熵權法所計算得出的權重則有可能出現較大偏差。通常來說,樣本決策數必須大於等於指標數。code
通常來講,若某個指標的信息熵越小,代表指標值得變異程度越大,提供的信息量越多,在綜合評價中所能起到的做用也越大,其權重也就越大。相反,某個指標的信息熵越大,代表指標值得變異程度越小,提供的信息量也越少,在綜合評價中所起到的做用也越小,其權重也就越小。
將各個指標的數據進行標準化處理。
假設給定了k個指標,其中。假設對各指標數據標準化後的值爲,那麼。
根據信息論中信息熵的定義,一組數據的信息熵 ,
(近似寫爲:,n取e爲底數) ,其中 。
,若是 則定義 再帶入。
根據信息熵的計算公式,計算出各個指標的信息熵爲。經過信息熵計算各指標的權重:。
某醫院爲了提升自身的護理水平,對擁有的11個科室進行了考覈,考覈標準包括9項總體護理,並對護理水平較好的科室進行獎勵。下表是對各個科室指標考覈後的評分結果。
表1 11個科室9項總體護理評價指標得分表
可是因爲各項護理的難易程度不一樣,所以須要對9項護理進行賦權,以便可以更加合理的對各個科室的護理水平進行評價。
1.數據標準化
根據原始評分表,對數據進行標準化後能夠獲得下列數據標準化表
表2 11個科室9項總體護理評價指標得分表標準化表
2.求各指標的信息熵
根據信息熵的計算公式,能夠計算出9項護理指標各自的信息熵以下:
表3 9項指標信息熵表
3.計算各指標的權重
根據指標權重的計算公式,能夠獲得各個指標的權重以下表所示:
表4 9項指標權重表
4.對各個科室進行評分
根據計算出的指標權重,以及對11個科室9項護理水平的評分。設Zl爲第l個科室的最終得分,則 ,各個科室最終得分以下表所示:
表5 11個科室最終得分表
1 # -*- encoding=utf-8 -*-
2
3 import warnings 4 warnings.filterwarnings("ignore") 5 import pandas as pd 6 import numpy as np 7
8
9 def get_score(wi_list,data): 10 """
11 :param wi_list: 權重係數列表 12 :param data:評價指標數據框 13 :return:返回得分 14 """
15
16 # 將權重轉換爲矩陣
17
18 cof_var = np.mat(wi_list) 19
20 # 將數據框轉換爲矩陣
21 context_train_data = np.mat(data) 22
23 # 權重跟自變量相乘
24 last_hot_matrix = context_train_data * cof_var.T 25 last_hot_matrix = pd.DataFrame(last_hot_matrix) 26
27 # 累加求和獲得總分
28 last_hot_score = list(last_hot_matrix.apply(sum)) 29
30 # max-min 歸一化
31
32 # last_hot_score_autoNorm = autoNorm(last_hot_score)
33
34 # 值映射成分數(0-100分)
35
36 # last_hot_score_result = [i * 100 for i in last_hot_score_autoNorm]
37
38 return last_hot_score 39
40
41
42 def get_entropy_weight(data): 43 """
44 :param data: 評價指標數據框 45 :return: 各指標權重列表 46 """
47 # 數據標準化
48 data = (data - data.min())/(data.max() - data.min()) 49 m,n=data.shape 50 #將dataframe格式轉化爲matrix格式
51 data=data.as_matrix(columns=None) 52 k=1/np.log(m) 53 yij=data.sum(axis=0) 54 #第二步,計算pij
55 pij=data/yij 56 test=pij*np.log(pij) 57 test=np.nan_to_num(test) 58
59 #計算每種指標的信息熵
60 ej=-k*(test.sum(axis=0)) 61 #計算每種指標的權重
62 wi=(1-ej)/np.sum(1-ej) 63
64 wi_list=list(wi) 65
66
67 return wi_list 68
69
70
71 if __name__ == '__main__': 72
73
74 data0 = pd.read_excel("C:\\Users\\Oreo\\Desktop\\test2.xlsx", encoding='utf8') 75
76 data = data0.iloc[:, 1:10] 77 mm=data 78 wi_list=get_entropy_weight(data) 79 score_list=get_score(mm,wi_list) 80 mm['score']=score_list 81 mm['科室']=data0['科室'] 82 # 而後對數據框按得分從大到小排序
83 result = mm.sort_values(by='score', axis=0, ascending=False) 84 result['rank'] = range(1, len(result) + 1) 85
86 print(result) 87
88 # 寫出csv數據
89 result.to_csv('C:\\Users\\Oreo\\Desktop\\test2_result.csv', index=False)