萌新學習筆記(三)信息熵、熵值法的概念、測算和代碼實現

這是一隻讀研狗的學習日常,撰寫這個筆記的目的是自我復習和勉勵,還有能獲得網上大佬們的指點和支持。

萌新初來乍到,如果有哪邊寫錯瞭還請各位大佬不吝賜教~

文章主要用於自己復習使用和知識分享,並非完全原創。

0.信息熵的概念

0.1 信息量

信息量是對信息多少的度量,即當我們觀察到一件事情的發生時,我們接收瞭多少信息?

信息量的大小與事情發生的概率有關,概率越小的事情產生的信息量越多,概率越大的事情產生的信息量越少。比如得知瞭班上成績倒數第一的學渣期末考試全年級第一,這個事情發生的很小,所以一旦發生瞭,產生的信息量就很大。又比如得知瞭班上的學霸考瞭年級第一,這個高概率事件給你帶來的信息量就很小。

一個事件的信息量隨其發生概率的上升而下降,並且信息量恒大於0

關於測度:如果有兩個互不相關的事件a和事件b,那麼a和b同時發生時獲得的信息量等於單獨發現a和單獨發現b事件獲得的信息量之和:

h(a,b)=h(a)+h(b)

又由a和b互不相關可知: p(a,b)=p(a)*p(b)

取概率的負對數可得: h(a)=-log_{a}p(a) ,取負號是為瞭使概率越大,信息量越少,並且使得值大於1,對數自然也恒為正數瞭。

0.2 信息熵

信息量度量的是事件a發生時所接收到的信息,信息熵是指事件a發生之前所有可能產生的信息量的數學期望。

H(x)=-sum_{i}^{}{(p(x_{i})log_{a}p(x_{i}))}

H(x)就是信息熵。

信息熵越大,信息量越大。一個熵為0的系統永遠隻是一個狀態,怎麼能承載很多信息呢?越確定的事件,信息熵越小,信息量越少。

不要把信息熵和信息量劃等號,信息熵是表示事件a的不確定性,而信息量就相當於對這種不確定性減少的大小,相當於信息熵減少的大小。信息熵本身不是對信息量大小的度量,而是對事件不確定性大小的度量。

0.3信息學中的信息熵和統計學中的熵值法的聯系和區別

信息學和統計學在信息量的概念上有很大區別,信息學講幹擾,統計學講概率。信息學裡離散程度大代表數據信息量小,統計學裡離散程度大代表數據信息量大。

信息學關心的是信息能否正常傳遞,比如說有一個確定無疑的數據源,離散程度為0,從數據源發送信息,受到幹擾之後,離散程度越大,說明信息越不可靠,信息量越小,熵值越小,不確定性越大。為瞭衡量最終接收數據方獲得的信息與原始信息相比不確定性的大小,信息學傢香農提出信息熵的概念。

統計學中不存在單個確定的數據源,往往從多個主題、多個時間、多個地點出發,最終得到一組離散值,在這種情況下,離散程度越大,說明數據影響能力越強(統計學認為影響能力和離散程度成正比),信息量越大,熵值越小,權重越大。所以在計算熵值法的權重(2.5)時要用1減去熵值計算差異系數,這樣差異系數就可以和權重成正比瞭。統計學中熵值法使用瞭信息熵的模型,但本質不同,本質上是評價數據的離散程度。

本部分參考劉志剛的文章,這位答主詳細地解釋瞭不同學科之間的信息熵比較。

1. 熵值法的概念

1.1. 簡介

熵值法是指用來判斷某個指標的離散程度的數學方法。離散程度越大,該指標對綜合評價的影響越大。可以用熵值判斷某個指標的離散程度。

1.2. 基本原理

在信息論中,熵是對不確定性的一種度量。信息量越大,不確定性就越小,熵也就越小;信息量越小,不確定性越大,熵也越大。根據熵的特性,我們可以通過計算熵值來判斷一個事件的隨機性及無序程度,也可以用熵值來判斷某個指標的離散程度,指標的離散程度越大,該指標對綜合評價的影響越大(權重越大,熵值越小)。

例子:設有n個樣本,m個評價指標,形成原始數據矩陣。

指標1 指標2 指標3 指標4 指標j 指標m
個體1 X11 X12 X13 X14 X1j X1m
個體i Xi1 Xi2 Xi3 Xi4 Xi5 Xij Xim
個體n Xn1 Xnj Xnm

對某項指標 x_{j} ,指標值 x_{ij} 的差距越大,則該指標在綜合評價中所起的作用越大;如果某項指標的指標值全部相等,則該指標在綜合評價中不起作用。

2. 面板熵值法的測算

為瞭克服以往的熵值法隻能處理截面數據,而不同的年份之間無法比較的缺點,可以采用楊麗與孫之淳(2015)改進後的面板熵值法,具體步驟如下:

2.1指標選取

指標選取n個省 直轄市,m個指標,則 x_{ijk} 表示第i年,第j個省份,第k個指標的值。

2.2 原始數據標準化(歸一化)

2.3計算第j個省份,第i年占k指標的比重 P_{ijk}

2.4計算第k個指標的熵值 S_{k}

2.5 計算第k個指標的差異系數(判斷離散程度,從而確定權重):

2.6 對差異系數歸一化,計算第k項的權重 W_{k }

2.7 計算綜合得分 h_{ij}

3.代碼實現

********************定義求熵值程序********************

capture program drop shangzhi

program shangzhi

args var statue rn //var:待處理的變量statue=1表示正向指標,statue=-1表示負向指標, rn:r年與n個觀測值的乘積

quietly{

*step1 歸一化 `var'_sd

sum `var'

scalar min=r(min)

scalar max=r(max)

g `var'_sd=(`var'-min)/(max-min)

if `statue'==-1{

noisily dis as error "負向指標"

replace `var'_sd=1-`var'_sd

}

*step2 計算占比 `var'_sdw

g `var'_sds= `var'_sd+0.00000001 //註:添加偏移量0.00000001,可自行修改

egen `var'_sds_sum=sum(`var'_sds) //計算`var'_sds的總和

g `var'_sdw=`var'_sds / `var'_sds_sum //計算`var'_sds的占比

*step3 計算熵值 `var'_s

g `var'_sij=-1*`var'_sdw*ln(`var'_sdw)/ln(`rn') //`var'_sij

egen `var'_s=sum(`var'_sij) //熵值`var'_s

*step4 計算信息效用 `var'_g

g `var'_g=1-`var'_s

*step5 清除多餘變量:隻保留`var'_sd,`var'_g

drop `var'_sds `var'_sdw `var'_sds_sum `var'_sij `var'_s

}

end

***********************************

*【1】求`var'_g

/*調用shangzhi程序,依次輸入三個參數,

要處理的變量var,正向指標或者負向指標(1 or -1),r*n的數值(本文:14*30=420,14年,30個省市)

註:負向指標會提示文字,正向則不會*/

*註,以下代碼可按需要修改

shangzhi a1 1 420

shangzhi a2 1 420

shangzhi a3 1 420

*【2】求權重wi

g sum_g=a1_g+a2_g+a3_g

forvalues i=1/3{

g w`i'=a`i'_g/sum_g

}

drop sum_g

list w* in 1 //展示權重

*【3】求最終得分hij

g h=a1_sd*w1+a2_sd*w2+a3_sd*w3

drop *_*

赞(0)