今天我們開始介紹決策樹。它既可以用於分類,也可以用於回歸。這裡我們主要介紹更加常見的分類用法。
概念決策樹,顧名思義,它的形狀類似於一棵樹,我們可以簡單把它畫出來:
如上圖,最上面的乙個點我們叫它根節點(root node),最下面不再進行分類的點我們叫它葉節點(leaf node)。
決策樹的分類過程是這樣的:
從根節點開始,根據資料的某乙個特徵進行分類,那麼它的子節點中就儲存了分類後的結果;然後,在子節點中,從剩餘特徵中選擇乙個再進行分類,將結果儲存在子節點的子節點中;如此重複下去,直到子節點中的資料是「純淨」的,即只含有乙個類別,也就是到達了葉節點。此時,決策樹構建完成。
那麼問題隨之而來,資料有那麼多特徵,到底選擇哪個進行分類最合適呢?
別急,我們先介紹一些基本概念,隨後就會解答這個問題。
資訊量與熵·資訊量資訊理論的創始人夏農認為
資訊是用來消除隨機不確定性的東西。
那麼用什麼來衡量不確定性的大小呢?資訊量。
舉個例子,「太陽從東方公升起」,這句話的資訊量是0。因為太陽肯定從東方公升起,概率是1,並沒有消除不確定性,所以這句話沒有任何資訊量。
再比如說,「某一片沙漠下雨了」,這句話的資訊量就很大。為什麼呢?通常情況下,沙漠不下雨的概率比較大,而且沙漠下不下雨這個事件是隨機的,是不確定的。但這句話就消除了不確定性,而且是消除了很大的隨機性(因為下雨的概率很小)。
從上面的例子我們可以看出,資訊量好像和事件發生的概率成反比。也就是說,事件發生的概率越大,資訊量越低;概率越小,資訊量越大。
那資訊量到底該如何量化呢?有沒有什麼函式能表示呢?下面我們來一步一步構建它。
首先,資訊量h(x)和概率p(x)是有關係的,h(x)是因變數,p(x)是自變數。我們知道,自變數p(x)的取值是0-1的,而h(x)和p(x)又是反比的關係。那有沒有什麼函式在0-1的區間內是單調遞減的呢?
有很多函式都滿足,但我們最常見的就是-log()函式。它的影象是這樣的:
從圖中可以看出,-log()函式就是把我們熟悉的log()函式沿x軸「翻」上去的結果。而且,-log()函式不僅在0-1內是遞減的,還要保證它的值是大於0的。因為我們的資訊量不可能是負數。
因此,資訊量的大小可以表示為
·熵
上面我們介紹了單個事件的不確定性可以用資訊量來衡量。那如果有一堆事件,每個事件發生的概率不同,這些事件總體的不確定性該如何衡量呢?
我們一般用這些事件資訊量的期望來反應出事件的不確定性。
假設每個事件發生的概率為p(x),對應的資訊量為h(x),則總體的期望為
我們把上式就叫做隨機變數x的資訊熵,簡稱熵。熵同樣反映了隨機變數的不確定程度。
資訊增益讓我們回到文章開頭提出的問題,面對茫茫多的特徵,該怎麼選擇才能對資料集進行合適的分類呢?
一種方法就是使用資訊增益。
現在假設我們有乙個資料集,每乙個例項資料都對應了乙個類別d,那麼這些類別的資訊熵就是h(d)。現在選定乙個特徵a,在給定a的前提下,再觀察a中的類別d,此時其熵為h(d|a)。
那麼我們的資訊增益g(d,a)即可表示為
g(d,a)=h(d)-h(d|a)
為什麼可以這麼做呢?
我們來看,h(d)表示原始資料類別的不確定性;h(d|a)表示給定特徵a之後的類別的不確定性;那麼二者的差就表示這種不確定性減少了多少。我們總是希望減少的越多越好。
因此,在計算完資料中所有的特徵後,我們會選擇資訊增益最大的那個特徵來對根節點進行分類。
決策樹 資訊熵增益
from math import log import operator defcreatedateset dataset 青年 否 否 一般 否 青年 否 否 好 否 青年 是 否 好 是 青年 是 是 一般 是 青年 否 否 一般 否 中年 否 否 一般 否 中年 否 否 好 否 中年 是 是 ...
最大資訊熵增益 資訊熵與資訊增益
1.資訊熵 資訊熵就是指不確定性,熵越大,不確定性越大 2.關於資訊增益 資訊增益是針對乙個乙個的特徵而言的,就是看乙個特徵t,系統有它和沒它的時候資訊量各是多少,兩者的差值就是這個特徵給系統帶來的資訊量,即增益。系統含有特徵t的時候資訊量很好計算,就是剛才的式子,它表示的是包含所有特徵時系統的資訊...
最大資訊熵增益 資訊熵與資訊增益
前言 熵在機器學習中用的非常普遍,但這個又難以理解,經常忘記,寫一篇部落格記錄一下,也方便其他人學習了解。什麼是熵 一開始接觸熵是大二的資訊理論,非常難的一門課,當時學的時候不知道這個東西有什麼用,完全就不太想學,因為不知道幹嘛,也不知道學了有什麼用,但是現在很後悔,定義 熵也叫資訊熵,可以表徵隨機...