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

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

掃一掃獲取最新精彩內(nèi)容與學(xué)習(xí)資料
星空人工智能技術(shù)網(wǎng) 倡導(dǎo)尊重與保護知識產(chǎn)權(quán)。如發(fā)現(xiàn)本站文章存在版權(quán)等問題,煩請30天內(nèi)提供版權(quán)疑問、身份證明、版權(quán)證明、聯(lián)系方式等發(fā)郵件至1851688011@qq.com我們將及時溝通與處理。?。?a href="/">首頁 > 大數(shù)據(jù) » 從零開始學(xué)星空人工智能(13)--Python · 決策樹(一)· 準則