Python程式設計入門:接地氣的決策樹演算法基礎講解
決策樹算是比較常見的資料探勘演算法了,最近也想寫點演算法的東西,想著這期的 Python程式設計入門 就先寫個決策樹吧。
一. 什麼是決策樹
決策樹是什麼,我們來“決策樹”這個詞進行分詞,那麼就會是 決策/樹 。大家不妨思考一下,重點是決策還是樹呢?其實啊,決策樹的關鍵點在 樹 上。
我們平時寫程式碼的那一串一串的If Else其實就是決策樹的思想了。看下面的圖是不是覺得很熟悉呢?
當然決策樹演算法比這複雜那麼一丟丟,所以在說決策樹之前,我們需要先了解一些基本知識,先來說說資訊理論中的資訊熵。
二.決策樹介紹
決策樹之所以叫決策樹,就是因為它的結構是樹形狀的,如果你之前沒了解過樹這種資料結構,那麼你至少要知道以下幾個名詞是什麼意思。
根節點:最頂部的那個節點
葉子節點:每條路徑最末尾的那個節點,也就是最外層的節點
非葉子節點:一些條件的節點,下面會有更多分支,也叫做分支節點
分支:也就是分叉
學過樹這種資料結構的同學可能一看就明白了,沒有學過也沒關係,我們可以用上面的圖來說明各部分分別是什麼。
三.資訊熵
要說決策樹,那資訊熵是繞不過去的一座山~
3.1 資訊熵是什麼?
假設你要知道一件未知的事情,比如明天會不會下雨。這時候你就需要去獲取一些資訊,比如空氣乾溼度,今天是萬里無雲還是多雲等等(假設沒有天氣預報)。這些資訊中,有的可以讓你能更加準確判斷明天會不會下雨(比如今天有沒有云),而有資訊些則不會(比如今天晚餐吃什麼)。如何度量這些資訊對你決策的幫助呢?這裡要使用到的就是資訊熵了,資訊熵正是對資訊量有效性的一種度量方法。
如果你還記得高中化學的知識的話,那對 熵 這個字應該不會陌生。 熵在化學中是表示分子的混亂程度,分子越混亂,它的熵就越大,而若分子越有序,熵值就越小 。
資訊熵也是一樣的,它能對資訊的不確定性進行恆量, 如果某個資訊讓我們的判斷更加有序,清晰,則它資訊熵越小,反之越大。
還是接上面的例子,現在你知道了空氣的溼度,那麼你就能更準確得判斷明天是否會下雨。你得到的資訊讓你的結論更加清晰,準確,所以它的熵值就比較小,因為它讓資訊更加準確。而對今天晚餐吃什麼這個資訊,顯然它對你判斷明天會不會下雨是沒什麼幫助的,所以它的資訊熵是比較大的,因為這個資訊和明天有沒有下雨沒有關係,它並沒有讓我們的判斷更加清晰,甚至讓我們的判斷趨於混亂。
計算資訊熵的公式如下:
其中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年發表這一相關論文後,決策樹演算法正式問世,並掀起一股決策樹演算法的研究熱潮。
那麼它被用在哪裡呢?
我們知道決策樹由許多屬性和分支組成,那麼如何決定哪個屬性在前,哪個在後呢。這裡就需要用到資訊熵了。
前面我們提到過資訊熵是對資訊不確定性的度量,既然資訊可以度量,那每次我們只要找到資訊熵的值最小,也就是讓決策更加清晰的那個屬性來作為根進行分支,那不就行了嗎?什麼,你說分支後怎麼辦,對樹處理的基本方法就是遞迴,分支後,每一分支節點都可以當作一棵新的樹,然後再來重複上面的步驟啦。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2652109/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python程式設計入門基礎語法詳解Python程式設計
- 【Python入門基礎】網路程式設計Python程式設計
- Python程式設計入門——基礎語法詳解(經典)Python程式設計
- Python基礎入門(6)- 物件導向程式設計Python物件程式設計
- Java入門之基礎程式設計Java程式設計
- 機器學習之決策樹詳細講解及程式碼講解機器學習
- Python網路程式設計(基礎總結入門經典)Python程式設計
- 好程式設計師Python培訓分享基礎入門Django程式設計師PythonDjango
- 好程式設計師Python培訓分享Python入門基礎知識程式設計師Python
- Linux-shell程式設計入門基礎Linux程式設計
- 程式設計熊講解LeetCode演算法《二叉樹》程式設計LeetCode演算法二叉樹
- 通俗地說決策樹演算法(一)基礎概念介紹演算法
- C#程式設計基礎入門教程pdfC#程式設計
- Python程式設計入門Python程式設計
- python程式設計基礎Python程式設計
- 決策樹演算法演算法
- [Python人工智慧] 一.神經網路入門及theano基礎程式碼講解Python人工智慧神經網路
- 通俗易懂--決策樹演算法、隨機森林演算法講解(演算法+案例)演算法隨機森林
- Android程式設計基礎 • 【第1章 Android程式入門】Android程式設計
- Python入門教程100天:Day08-物件導向程式設計基礎Python物件程式設計
- 《Python程式設計:從入門到實踐》 筆記(一)基礎知識Python程式設計筆記
- python 程式設計基礎案例Python程式設計
- 機器學習 Day 9 | 決策樹基礎機器學習
- 《機器學習:演算法原理和程式設計實踐》3:決策樹的發展機器學習演算法程式設計
- 人工智慧演算法小白入門- Jupyter notebook python 基礎入門人工智慧演算法Python
- 從萌新到大神必讀書籍 《Python快樂程式設計基礎入門》Python程式設計
- Python入門基礎—購物車小程式Python
- 【Python入門基礎】程式和執行緒Python執行緒
- Python入門基礎(8)Python
- Python 非同步程式設計入門Python非同步程式設計
- Python機器學習:決策樹001什麼是決策樹Python機器學習
- Python入門必知的知識點!Python基礎入門Python
- 程式設計入門,這763位老程式設計師有話講!程式設計師
- python入門,程式設計基礎概念介紹(變數,條件,函式,迴圈)Python程式設計變數函式
- 【面試考】【入門】決策樹演算法ID3,C4.5和CART面試演算法
- Java基礎008_程式設計入門_計算機史上的兩個鼻祖Java程式設計計算機
- 決策樹模型(3)決策樹的生成與剪枝模型
- 爬蟲入門基礎-Python爬蟲Python