這一章主要打算用大白話說一下決策樹是什麽,然後介紹一個算法中的核心輔助結構——Cluster 的實現(我也不知道中文叫什麽我也不知道為什麽當初腦子裏第一個蹦出來的就是這個名字)(逃)
決策樹,顧名思義,就是用來決策的樹(廢話)。可以這樣去想一個決策樹的決策過程:
-
輸入一個數據
-
根據數據的某個特征來把數據分成好幾份
-
如果分完數據後發現
-
某堆數據裏麵某一個類別的數據占相當大多數,就不再分隔這堆數據、直接輸出類別
-
某堆數據還很“混亂無序”,那麽就這堆數據就要繼續分下去(轉第 2. 步)
-
大概就這三步。可以發現,大部分時間都是根據某個“準則”來進行操作的,所以怎樣選擇這個準則就成了至關重要的問題
美女直播全婐APP免费下载同時還可以發現,這個過程是個遞歸過程。通俗點來說,就是整個過程都是對同一類物體做的同一係列操作
以上兩個發現對應著兩個核心。這一章美女直播全婐APP免费下载就先講第一個核心——準則
常見的準則有兩種,分別是熵和 Gini 係數。這裏就主講實現(Again,我會先講一個相對樸素的實現,而把支持樣本權重的版本放在後麵):
-
預處理數據,準備好接下來可能要用到的變量
-
-
輸入的 data 是 n x d 維的;n 代表有 n 個數據,d 代表有 d 個維度
-
輸入的 labels 是標簽向量
-
Counter 是內置庫的功能,用於數 labels 中各個類別的出現次數
-
base 是計算熵的時候對數的底,基本可以不管
-
-
熵與條件熵
-
利用 labels 和 counters 計算
這裏支持用戶自己輸入各類別的出現次數;如果沒有輸入,就用內置的類別次數代替
eps 則是為了數值穩定-
利用上述 ent 函數計算相對熵(建議先知道定義是什麽再看……)
看上去很複雜,其實就四點:
-
獲取指定維度數據的所有特征
-
根據這些特征將原數據切分成若幹份
-
將這幾份數據分別喂給一個 Cluster 並利用上麵第 1. 步定義的 ent 函數算出熵
-
把這些熵按定義弄出一個條件熵
-
-
-
Gini 係數,這個實現起來比較方便、因為形式比較簡單

同樣支持用戶自己輸入各類別的出現次數
-
信息增益。這是決策樹生長的重點,但有了上麵兩個函數之後,根據定義的話、直接條件熵減去熵就行(或者更寬泛地說、是混亂程度減去條件混亂程度),最多再做一些小的改動。相信聰明的觀眾老爺們可以輕鬆地完成最樸素的實現,所以在這裏我就不細講怎麽定義 info_gain 了,等到講比較複雜的模型時再補吧~
順便也可以當做作業和練習呢~
其實主要是因為懶呢~(被 pia 飛)
========== 更新 ==========
這裏提供一個根據 ID3 算法的信息增益實現,C4.5 和 CART 的話會在後麵講~

掃一掃獲取最新精彩內容與學習資料
星空人工智能美女福利导航網 倡導尊重與保護知識產權。如發現本站文章存在版權等問題,煩請30天內提供版權疑問、身份證明、版權證明、聯係方式等發郵件至1851688011@qq.com美女直播全婐APP免费下载將及時溝通與處理。!:首頁 > 大數據 » 從零開始學星空人工智能(13)--Python · 決策樹(一)· 準則