目錄
第一代裁判:ID3 與信息增益的 “偏愛”
第二代裁判:C4.5 用 “增益率” 找平衡
第三代裁判:CART 的 “基尼指數” 新思路
遇到連續值?先 “砍幾刀” 再說
給決策樹 “減肥”:剪枝的學問
動手試試:決策樹的 “調參” 小技巧
最后想說
決策樹的 “成長記”:從分錯到分巧的進化
? ? 上次琢磨決策樹時,總覺得 “選哪個特征當節點” 像猜謎 —— 直到今天才算摸到了門道。原來決策樹也在 “進化”,從最初的 ID3 到后來的 C4.5、CART,每一步都在解決上一代的小麻煩。這就像給分類問題找裁判,一代比一代更懂 “公平” 和 “高效”。
第一代裁判:ID3 與信息增益的 “偏愛”
? ? 最早的決策樹算法 ID3,選節點靠的是 “信息增益”—— 哪個特征能讓數據的 “混亂度”(熵)降得最多,就選哪個。這思路挺直接,比如用 “天氣” 劃分打球數據時,信息增益最大,那就讓 “天氣” 當根節點。
? ? 但 ID3 有個小毛病:特別喜歡 “選項多” 的特征。比如給數據加個 “編號” 特征(1 到 7 號),每個編號對應唯一結果,用它劃分時信息增益肯定最大 —— 但這顯然沒意義,因為它根本沒抓住規律,純屬 “抬杠式劃分”。就像裁判偏愛話多的選手,哪怕說的都是廢話。
第二代裁判:C4.5 用 “增益率” 找平衡
? ? 為了治 ID3 的 “偏愛”,C4.5 算法站了出來。它不直接用信息增益,而是用 “信息增益率”—— 信息增益除以這個特征自身的熵。
? ? 這么一來,“選項多” 的特征(比如編號)自身熵很高,就算信息增益大,增益率也可能變低,從而被 “勸退”。比如用 “天氣” 和 “編號” 比,天氣的自身熵低,信息增益率反而更突出,這就避免了 “抬杠式劃分”。相當于裁判學會了 “聽質量” 而非 “聽數量”,更公平了。
第三代裁判:CART 的 “基尼指數” 新思路
? ? 后來又出現了 CART 算法,它換了個衡量標準 ——“基尼指數”。這東西說的是:從數據里隨機抽兩個樣本,類別不一樣的概率。概率越低,說明數據越純(比如全是 “去打球” 或全是 “不去”)。
? ? 和熵相比,基尼指數計算更簡單(不用算對數),但效果類似:純度越高,基尼指數越小。CART 用它來選節點,相當于裁判換了把更輕便的 “尺子”,效率更高了。
遇到連續值?先 “砍幾刀” 再說
? ? 現實中的數據不全是 “晴天 / 陰天” 這種離散值,更多是 “溫度 30 度”“收入 125K” 這種連續數。決策樹怎么處理呢?答案是:把連續值變成 “選擇題”。
? ? 比如 “收入” 這個特征,有 60K、70K、85K… 我們可以用 “貪婪算法” 找分界點:先把所有值排序,然后在每兩個相鄰值中間 “砍一刀”(比如 60 和 70 之間砍成 “≤65” 和 “>65”),算每個分界點的信息增益(或基尼指數),選最好的那個。這其實就是把連續值 “離散化”,讓決策樹能看懂。
給決策樹 “減肥”:剪枝的學問
? ? 決策樹有個壞毛病:學太細容易 “鉆牛角尖”。比如把訓練數據里的每個小例外都當成規律,結果換個新數據就錯得離譜(過擬合)。這時候就得 “剪枝”—— 給樹瘦瘦身。
預剪枝是 “邊長邊剪”:比如限制樹的最大深度(最多問 5 個問題就得出結論),或者規定葉子節點至少得有 10 個樣本才繼續分。就像家長提前說 “不許挑食”,從一開始就避免壞習慣。
后剪枝是 “長完再剪”:先讓樹長得枝繁葉茂,再回頭看哪些分支是 “多余的”。判斷標準是 “損失函數”:自身的基尼指數(或熵)加上 α 乘以葉子節點數。α 越大,越鼓勵少用葉子(簡化樹);α 越小,越允許復雜但精準的劃分。就像考完試回頭改錯題,把沒必要的步驟刪掉。
? ? 比如有個分支,剪枝前在驗證集上正確率 57%,剪枝后反而升到 71%—— 顯然這分支是 “畫蛇添足”,該剪!
動手試試:決策樹的 “調參” 小技巧
? ? 實際用決策樹時,代碼里有幾個關鍵參數得留意:
-
criterion
:選 “gini”(基尼指數)還是 “entropy”(信息熵),看數據特點; -
max_depth
:樹別太深,5-20 層通常夠了,太深容易過擬合; -
splitter
:“best” 是找最優切分點,“random” 是隨機找,后者快但可能稍欠精準。
? ? 比如用決策樹預測泰坦尼克號幸存者時,調對這些參數,就能讓模型更準 —— 畢竟不是越復雜的樹,越能看透 “生存規律”。
最后想說
? ? 決策樹的進化,其實是人類在教機器 “怎么更聰明地分類”。從 ID3 的直接,到 C4.5 的平衡,再到 CART 的高效,每一步都在逼近 “簡單又準確” 的目標。就像我們自己做決策,既要抓住重點,又不能鉆牛角尖 —— 原來機器學習和生活智慧,道理相通。
? ? 下次再用決策樹時,或許會忍不住想:這一步劃分,是 ID3 會喜歡,還是 C4.5 更認可?這種 “與算法對話” 的感覺,還挺奇妙的。