R語言——熵值和信息增益的計算

今天對著教材自己寫了一段代碼,用來計算分類變量的信息熵,至於信息增益,其實熵值出來後減一下就有了,所以一起放上

R語言——熵值和信息增益的計算

先放出完整代碼:

#導入數據
Table #計算熵的function
Entropy ycol if(x == 0){
PYi En else
{xcol Temp Ti LPXi EnXi En return(En) }
#因變量y投入熵計算
EnY #自變量x對於因變量y的熵計算
Xnames EnX #各x在y下的信息增益
Gain

整個代碼邏輯的解釋如下:

read.csv先導入數據表,表結構見圖

R語言——熵值和信息增益的計算

這裡指定的計算任務是用表中的幾個非連續變量,像是block、floor、decoration、GroupNo1來推測最後一列的LikeOrNot,此時,我們的熵值計算出現了兩種情況

一種是單獨計算目標列y的熵值,此時只有一列向量參與運算

還有一種是各自變量x的分類相對於y的分類產生的熵值,即便每次只計算一列x對y,table函數產生的至少是個二維表,且最後合併計算結果時還要多做一次加權和

為把兩種計算放在一個統一的function裡,我使用了三個輸入參數,自變量x(列名稱),因變量y(也是列名稱),以及它們所屬的源表Data

R語言——熵值和信息增益的計算

其中自變量x給了個默認值0

然後,真正在function內部區分出兩種算法用的是if(條件) {執行步驟1} else {執行步驟2}這樣一個結構,說起來算是比較簡單的

R語言——熵值和信息增益的計算

ycol和xcol的兩行用於按照列名稱找到其所在的列號,if函數中的條件x==0是自變量無輸入導致取默認值的情況,此時只計算一列因變量的熵值,分解步驟如下:

R語言——熵值和信息增益的計算

而當自變量x有輸入時,假設我們現在取第6列的decoration,它對應在LikeOrNot下的熵值計算大概是這樣:

R語言——熵值和信息增益的計算

這兩部分算法合起來成為一個完整的Entropy,然後分別代入自變量和因變量

R語言——熵值和信息增益的計算

有了x和y的所有熵值,信息增益即為EnY-EnX,為了做得好看點,在輸出結果上加了個自變量名稱

R語言——熵值和信息增益的計算

搞定收工~~


分享到:


相關文章: