Python · 決策樹(零)· 簡介

========== 2017.4.23 更新 ==========

比較完整、有條理的說明、實現可以參見這裡

========== 2017.1.11 更新 ==========

今天抽時間用 cv2 寫了一個決策樹的可視化

========== 分割線的說 ==========

(題圖來自 Wiki)

決策樹是聽上去比較厲害且又相對簡單的演算法,但在實現它的過程中可能會對編程本身有更深的理解、尤其是對遞歸的利用

我個人的習慣是先說明最終能幹什麼、然後再來說怎麼實現,這樣也能避免一些不必要的信息篩選。所以,這一部分主要用於讓已經知道一定的基礎知識的童鞋知道最後能走多遠,如果是想從頭開始學的話可以無視這一章直接看第一章

  1. ID3 和 C4.5(可以控制最大深度),CART 可能會在假期實現

  2. 可視化;比如在比較著名的蘑菇數據集上的最終結果為(隨機 5000 個訓練):

    正確率 100%(大概挺正常的……)。其中,每個 Node 最後那個括弧裡面,箭頭前面是特徵取值,箭頭後面或者是類別、或者是下一個選取的特徵的維度

    運用 cv2 的話可以畫出比較傳統的決策樹的可視化圖,效果大致如下:

    其中紅色數字標註了該 Node 選擇了數據的哪個維度,綠色字母表示該 Node 所屬的類別,白色字母代表著對應數據維度特徵的取值

    比如說如果樣本的第 4 維(從 0 開始計數)是 a、l 的話就判為類別 e,是 c、f、m、p、s、y 的話就判為類別 p,是 n 的話就再看樣本的第 7 維、以此類推

  3. 雖說我這個決策樹暫時不支持連續型特徵,但相對應的它有一個好處:你不用把離散型數據處理成數值形式、而可以直接把它輸入模型來訓練。據我所知,scikit-learn 的 DecisionTreeClassifier 還不支持這一點(自豪臉)(然而人家比你快 1~2 倍)

========== 分割線的說 ==========

我還沒實現 CART 和連續型輸入的情況(因為懶)(喂),假期可能會填坑吧……

個人認為決策樹的實現能相當體現出 Python 和遞歸的便利(認真

雖然這會帶來速度的減慢……不過我們重在學習(認真

要速度的話調用 sklearn 就好了嘛(喂

下一章開始就是從零起步了,具體而言會分為三種:

  1. Python 的基礎,這一部分文章的標題形如 「Python · ***」
  2. 實現的思想、原理及代碼,這一部分的標題就和這一章的類似,隨介紹的演算法不同而不同
  3. 數學的基礎,這一部分的標題也與這一章類似,只不過前綴改為 「數學 · *** · ***」

自然,1. 的知識是各機器學習演算法實現都共享的,2. 3. 的內容有一定相關性但分開來看不會有什麼問題(大概)(喂

希望觀眾老爺們能喜歡~

(猛戳我進入下一章!( σω)σ)


推薦閱讀:

刷臉進站+語音購票,AI 時代已經來臨
機器學習系列-廣義線性模型
MIT線性代數課程精細筆記[第九課]
[導讀]不平衡數據的解決之道
日誌分析的模式發現功能實現(2)

TAG:Python | 机器学习 | 决策树 |