通俗地說決策樹算法(一)基礎概念介紹

決策樹算是比較常見的數據挖掘算法了,最近也想寫點算法的東西,就先寫個決策樹吧。html

一. 什麼是決策樹

決策樹是什麼,咱們來「決策樹」這個詞進行分詞,那麼就會是決策/樹。你們不妨思考一下,重點是決策仍是樹呢?其實啊,決策樹的關鍵點在上。java

咱們平時寫代碼的那一串一串的If Else其實就是決策樹的思想了。看下面的圖是否是以爲很熟悉呢?算法

常見的ifelse

固然決策樹算法比這複雜那麼一丟丟,因此在說決策樹以前,咱們須要先了解一些基本知識,先來講說信息論中的信息熵。編程

二.決策樹介紹

決策樹之因此叫決策樹,就是由於它的結構是樹形狀的,若是你以前沒了解過樹這種數據結構,那麼你至少要知道如下幾個名詞是什麼意思。數據結構

  • 根節點:最頂部的那個節點
  • 葉子節點:每條路徑最末尾的那個節點,也就是最外層的節點
  • 非葉子節點:一些條件的節點,下面會有更多分支,也叫作分支節點
  • 分支:也就是分叉

學過樹這種數據結構的同窗可能一看就明白了,沒有學過也不要緊,咱們能夠用上面的圖來講明各部分分別是什麼。併發

決策樹的各個部分

三.信息熵

要說決策樹,那信息熵是繞不過去的一座山~函數式編程

3.1 信息熵是什麼?

假設你要知道一件未知的事情,好比明天會不會下雨。這時候你就須要去獲取一些信息,好比空氣乾溼度,今天是萬里無雲仍是多雲等等(假設沒有天氣預報)。這些信息中,有的可讓你能更加準確判斷明天會不會下雨(好比今天有沒有云),而有信息些則不會(好比今天晚餐吃什麼)。如何度量這些信息對你決策的幫助呢?這裏要使用到的就是信息熵了,信息熵正是對信息量有效性的一種度量方法。
信息熵介紹函數

若是你還記得高中化學的知識的話,那對這個字應該不會陌生。熵在化學中是表示分子的混亂程度,分子越混亂,它的熵就越大,而若分子越有序,熵值就越小oop

信息熵也是同樣的,它能對信息的不肯定性進行恆量,若是某個信息讓咱們的判斷更加有序,清晰,則它信息熵越小,反之越大。大數據

仍是接上面的例子,如今你知道了空氣的溼度,那麼你就能更準確得判斷明天是否會下雨。你獲得的信息讓你的結論更加清晰,準確,因此它的熵值就比較小,由於它讓信息更加準確。而對今天晚餐吃什麼這個信息,顯然它對你判斷明天會不會下雨是沒什麼幫助的,因此它的信息熵是比較大的,由於這個信息和明天有沒有下雨沒有關係,它並無讓咱們的判斷更加清晰,甚至讓咱們的判斷趨於混亂。

計算信息熵的公式以下:

信息熵公式

其中U指的是某一信息,pi則是指信息中各類可能出現的結果的機率。

好比U爲空氣溼度,空氣溼度一共有3中(乾燥,微溼,溼潤),則能夠p1表示空氣乾燥的機率,p2表示空氣微溼的機率,p3表示空氣溼潤的機率,這些機率都是能夠經過樣本統計出來的。

而後空氣溼度的信息熵就能夠計算出來了:

H(空氣溼度) = p1 * log(p1) + p2 * log(p2) + p3 * log(p3)
咱們能夠舉吳軍老師的「數學之美」中的一個例子來解釋這條式子。

假設2018年,有32支球隊參加世界盃,每隻球隊最終得到冠軍的機率同樣。在世界盃以後,你去問別人世界盃冠軍是哪一個國家的?那我的不直接跟你說,讓你猜!而且每猜一次,你須要支付1塊錢,這時你怎麼才能花最少的錢呢?

學過算法的咱們天然知道能夠用二分法,把32支球隊分紅兩半,猜對猜錯以後天然知道球隊在哪一半,再二分再猜,這樣最終你須要猜5次,也就是須要支付5塊錢,沒錯吧。這樣一來,這條信息的價值就是5塊錢,而在計算機中,則用***bit***表示。假如一共有64支球隊,那咱們就須要多猜一次,這條信息的價格就變成了6。從這裏咱們就能夠看出信息的度量跟log有關,log32=5,log64=6嘛。

如今咱們來運用上面的公司,咱們讓p1,p2,p3...p32表示每支球隊獲勝的機率,運用公式,則
H(獲勝) = p1*logp1 + p2*logp2 + ... + p32*log32

這樣最終算出的結果正是等於5,就是說哪一個國家獲勝這條信息的信息熵是5。

3.2 信息熵與決策樹

信息熵最先是用在通訊領域的,而決策樹的誕生是緣於澳大利亞計算機科學家昆蘭,在一次研究生課程大做業中,引入了信息增益準則來改進程序。然後在1979年發表這一相關論文後,決策樹算法正式問世,並掀起一股決策樹算法的研究熱潮。

那麼它被用在哪裏呢?

咱們知道決策樹由許多屬性和分支組成,那麼如何決定哪一個屬性在前,哪一個在後呢。這裏就須要用到信息熵了。

前面咱們提到過信息熵是對信息不肯定性的度量,既然信息能夠度量,那每次咱們只要找到信息熵的值最小,也就是讓決策更加清晰的那個屬性來做爲根進行分支,那不就好了嗎?什麼,你說分支後怎麼辦,對樹處理的基本方法就是遞歸,分支後,每一分支節點均可以看成一棵新的樹,而後再來重複上面的步驟啦。

今天先介紹決策樹的一些基礎知識,後面咱們會經過一個實際的例子以及代碼來看看決策樹的運行原理。

以上~

推薦閱讀:
Scala 函數式編程指南(一) 函數式思想介紹
Actor併發編程模型淺析
大數據存儲的進化史 --從 RAID 到 Hadoop Hdfs
C,java,Python,這些名字背後的江湖!

相關文章
相關標籤/搜索