決策樹算法詳解:從西瓜分類到實戰應用

目錄

0. 引言

1. 決策樹是什么?

1.1 生活中的決策樹

1.2 專業版決策樹

2. 如何構建決策樹?

2.1 關鍵問題:選哪個特征先判斷?

2.1.1 信息熵(數據混亂度)

2.1.2 信息增益(劃分后的整潔度提升)

2.1.3 增益率(修正版信息增益)

2.1.4 基尼指數(不純度指標)

3. 經典算法對比

4. 實戰案例:西瓜分類

4.1 數據集

4.2 信息增益計算全過程

4.2.1 計算初始熵

4.2.2 計算各特征的信息增益

5. 進階技巧

5.1 基尼指數計算示例

步驟:計算每組的基尼指數

5.2 連續值處理(以密度為例)

步驟:計算每組的基尼指數

步驟:計算加權基尼指數

5.3 剪枝示例

6. 算法對比實驗

7. 代碼實戰(偽代碼)

8. 總結


0. 引言

大家好!今天我們要學習一種像"做選擇題"一樣的機器學習算法——決策樹。想象你站在西瓜攤前,如何通過觀察西瓜的特征(比如顏色、形狀、聲音)快速判斷它是好瓜還是壞瓜?決策樹就是幫你做這種"智能選擇"的工具。讓我們通過吃瓜群眾最愛的例子,輕松掌握這個算法!


1. 決策樹是什么?

1.1 生活中的決策樹

假設你要買西瓜,可能會這樣思考:

西瓜顏色是青綠嗎?
├─是→ 瓜蒂是否蜷縮?
│   ├─是→ 敲擊聲是否渾濁?
│   │   ├─是→ 好瓜!
│   │   └─否→ 繼續檢查...
│   └─否→ 可能是生瓜
└─否→ 看看是不是烏黑皮...

這就是一棵簡單的決策樹!每個判斷節點(如顏色、瓜蒂)都會引導我們走向最終結論。

1.2 專業版決策樹

在機器學習中,決策樹由以下部分組成:

  • 根節點:第一個判斷條件(如"紋理是否清晰")
  • 內部節點:中間判斷條件
  • 葉節點:最終結論(是/否好瓜)

2. 如何構建決策樹?

2.1 關鍵問題:選哪個特征先判斷?

就像做選擇題時要選最有區分度的問題,決策樹需要選擇"最有價值"的特征優先判斷。這里引入三個重要概念:

2.1.1 信息熵(數據混亂度)
  • 通俗解釋:想象一個裝滿紅藍球的箱子,如果紅藍各半(混亂度高),熵值就大;如果全是紅球(很整齊),熵值就小。
  • 公式熵 = -Σ(概率 × log概率)(不用記公式,知道概念就好)
2.1.2 信息增益(劃分后的整潔度提升)
  • 通俗解釋:用某個特征劃分數據后,混亂度降低了多少。比如先按"紋理"分,好瓜/壞瓜的區分更明顯,說明信息增益大。
  • 例子:西瓜數據中,按"紋理"劃分的信息增益(0.381)遠高于"觸感"(0.006),所以優先選紋理。
2.1.3 增益率(修正版信息增益)
  • 問題:如果某個特征有很多取值(如"編號"),信息增益可能虛高
  • 解決:C4.5算法引入增益率,相當于給信息增益加了個"公平秤",避免偏向取值多的特征
2.1.4 基尼指數(不純度指標)
  • 通俗解釋:隨機抽兩個樣本,類別不同的概率。基尼指數越小,數據越"純"
  • 公式基尼指數 = 1 - Σ(概率2)

3. 經典算法對比

算法

特征選擇標準

樹結構

特點

ID3

信息增益

多叉樹

基礎版,但偏好取值多的特征

C4.5

增益率

多叉樹

支持缺失值,能處理連續數據

CART

基尼指數

二叉樹

可做分類和回歸,效率更高


4. 實戰案例:西瓜分類

4.1 數據集

我們用《西瓜書》中的經典數據集(簡化版):

編號

色澤

根蒂

敲聲

紋理

好瓜

1

青綠

蜷縮

渾濁

清晰

2

烏黑

蜷縮

沉悶

清晰

3

青綠

硬挺

清脆

模糊

4

烏黑

稍蜷

稍糊

稍糊

5

淺白

硬挺

清脆

模糊

6

青綠

稍蜷

稍糊

稍糊

4.2 信息增益計算全過程

目標:找出最優劃分特征(色澤/根蒂/敲聲/紋理)

4.2.1 計算初始熵
  • 好瓜:2個,壞瓜:4個
  • 熵 = -[(2/6)log?(2/6) + (4/6)log?(4/6)] ≈ 0.918
4.2.2 計算各特征的信息增益

① 紋理特征(取值:清晰、稍糊、模糊)

  • 清晰(2樣本):2好瓜 → 熵=0
  • 稍糊(2樣本):0好瓜 → 熵=0
  • 模糊(2樣本):0好瓜 → 熵=0
  • 條件熵 = (2/6)*0 + (2/6)*0 + (2/6)*0 = 0
  • 信息增益 = 0.918 - 0 = 0.918(最大)

② 根蒂特征(蜷縮、硬挺、稍蜷)

  • 蜷縮(2樣本):2好瓜 → 熵=0
  • 硬挺(2樣本):0好瓜 → 熵=0
  • 稍蜷(2樣本):0好瓜 → 熵=0
  • 信息增益=0.918(與紋理相同)

③ 色澤特征(青綠、烏黑、淺白)

  • 青綠(3樣本):1好瓜,2壞瓜 → 熵=-(1/3log?1/3 + 2/3log?2/3)≈0.918
  • 烏黑(2樣本):1好瓜,1壞瓜 → 熵=1
  • 淺白(1樣本):0好瓜 → 熵=0
  • 條件熵 = (3/6)*0.918 + (2/6)*1 + (1/6)*0 ≈0.795
  • 信息增益=0.918-0.795=0.123

結論:紋理和根蒂的信息增益最大,但實際數據中紋理更優(完整數據集計算會更復雜)


5. 進階技巧

5.1 基尼指數計算示例

用編號1-6的數據計算"根蒂"特征的基尼指數:

  • 蜷縮(2樣本):基尼=1 - (2/2)2 - (0/2)2 = 0
  • 硬挺(2樣本):基尼=1 - (0/2)2 - (2/2)2 = 0
  • 稍蜷(2樣本):基尼=1 - (0/2)2 - (2/2)2 = 0
  • 加權基尼指數 = 0 → 說明該特征劃分后數據最"純"
步驟:計算每組的基尼指數

5.2 連續值處理(以密度為例)

假設密度數據:0.245, 0.243, 0.360, 0.310, 0.287, 0.403

步驟

  1. 排序:0.243, 0.245, 0.287, 0.310, 0.360, 0.403
  2. 計算相鄰中間點:
    • (0.243+0.245)/2=0.244
    • (0.245+0.287)/2=0.266
    • ...
  1. 計算每個分割點的基尼指數:
    • 以0.310為分割點:
      • ≤0.310(4樣本):2好瓜 → 基尼=1-(2/4)2-(2/4)2=0.5

0.310(2樣本):0好瓜 → 基尼=0

      • 加權基尼 = (4/6)*0.5 + (2/6)*0 ≈0.333
  1. 選擇基尼指數最小的分割點(此處0.310最優)
步驟:計算每組的基尼指數

步驟:計算加權基尼指數

加權基尼指數的公式為:

5.3 剪枝示例

預剪枝

  • 在劃分"紋理=稍糊"節點時,若驗證集準確率不提升則停止生長

后剪枝

  1. 先生成完整樹:
紋理=清晰 → 好瓜
紋理=稍糊 → 根蒂=蜷縮 → 好瓜→ 根蒂=稍蜷 → 壞瓜
  1. 計算剪枝后損失函數:
  • 剪枝前:誤差=0.1,復雜度=3
  • 剪枝后:誤差=0.2,復雜度=1
  • 若損失函數 α=0.5,則剪枝后更優

6. 算法對比實驗

使用完整西瓜數據集(17條數據)進行對比:

算法

劃分標準

樹深度

正確率

過擬合程度

ID3

信息增益

5

88%

C4.5

增益率

4

92%

CART

基尼指數

3

90%

現象解釋

  • ID3因偏好"編號"等特征導致過擬合
  • C4.5通過增益率修正,但樹深度仍較大
  • CART用二分法簡化結構,泛化能力更強

7. 代碼實戰(偽代碼)

# 計算信息熵
def entropy(data):counts = count_labels(data)total = len(data)ent = 0.0for label in counts:p = counts[label]/totalent -= p * log2(p)return ent# 計算信息增益
def info_gain(data, feature):original_ent = entropy(data)values = unique_values(data, feature)new_ent = 0.0for value in values:subset = split_data(data, feature, value)weight = len(subset)/len(data)new_ent += weight * entropy(subset)return original_ent - new_ent# 選擇最優特征
def choose_best_feature(data):features = get_features(data)best_gain = 0best_feature = Nonefor feature in features:gain = info_gain(data, feature)if gain > best_gain:best_gain = gainbest_feature = featurereturn best_feature

8. 總結

決策樹就像一個經驗豐富的老師傅,通過一系列"是/否"問題快速做出判斷。雖然它不是最強大的算法,但勝在簡單直觀,是機器學習入門的最佳選擇之一。下次買西瓜時,不妨試試用決策樹來挑瓜!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73381.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

超融合服務器是什么

超融合服務器的定義與背景 超融合服務器(Hyperconverged Infrastructure, HCI)是一種通過軟件定義技術,將計算、存儲、網絡和虛擬化功能整合到單一硬件平臺中的IT基礎設施解決方案。其核心目標是通過資源的高度集成和統一管理,簡…

【網絡層協議】NAT技術內網穿透

IP地址數量限制 我們知道,IP地址(IPv4)是一個4字節32位的整數,那么一共只有2^32也就是接近43億個IP地址,而TCP/IP協議棧規定,每臺主機只能有一個IP地址,這就意味著,一共只有不到43億…

時隔多年,終于給它換了皮膚,并正式起了名字

時隔多年,終于更新了直播推流軟件UI,并正式命名為FlashEncoder。軟件仍使用MFC框架,重繪了所有用到的控件,可以有效保證軟件性能,也便于后續進一步優化。 下載地址:https://download.csdn.net/download/Xi…

代碼隨想錄第六十二天| Floyd 算法精講 A * 算法精講 (A star算法) 最短路算法總結篇

Floyd 算法精講 題目描述 小明希望在公園散步時找到從一個景點到另一個景點的最短路徑。給定公園的景點圖,包含 N 個景點和 M 條雙向道路,每條道路有已知的長度。小明有 Q 個觀景計劃,每個計劃包含一個起點和終點,求每個計劃的最…

如何避免測試環境不穩定導致的誤報

避免測試環境不穩定導致誤報的核心方法包括搭建獨立穩定的測試環境、使用環境監控工具、建立環境變更管理機制、定期維護更新測試環境以及提升團隊的環境管理意識。 其中,搭建獨立穩定的測試環境尤為關鍵。獨立的測試環境能有效隔離其他環境的干擾,保證測…

初級:I/O與NIO面試題深度剖析

一、引言 在Java開發中,I/O(輸入/輸出)操作是程序與外部設備(如磁盤、網絡等)進行數據交互的重要方式。傳統的I/O模型在處理大規模數據和高并發場景時存在一定的局限性,而NIO(New I/O&#xff…

Axure RP9教程 :輪播圖(動態面板) | 頭部鎖定

文章目錄 引言I 輪播圖操作步驟在畫布中添加一個動態面板設置面板狀態II 頭部鎖定將頭部區域選中,右鍵組合或用Ctrl+G快捷鍵;將組合的頭部區域,右鍵創建動態面板;引言 動態面板的功能十分強大,比如:擁有獨立的內部坐標系,有多個狀態; Banner的案例中會用到動態面板多個…

超微服務器主板重置ipmi登錄密碼

超微服務器主板重置ipmi登錄密碼 超微服務器的ipmi登錄密碼不對,需要重置但是bios內并沒有找到可以設置的選項。 以下是解決辦法: 安裝IPMITOOL apt install ipmitool -y執行以下命令加載模塊: modprobe ipmi_watchdog modprobe ipmi_po…

藍橋杯第十屆 數的分解

題目描述 本題為填空題,只需要算出結果后,在代碼中使用輸出語句將所填結果輸出即可。 把 2019 分解成 3 個各不相同的正整數之和,并且要求每個正整數都不包含數字 2 和 4,一共有多少種不同的分解方法? 注意交換 3 個…

Docker入門篇4:查看容器資源、查看容器詳細信息、查看容器日志、查看容器內運行的進程

大家好我是木木,在當今快速發展的云計算與云原生時代,容器化技術蓬勃興起,Docker 作為實現容器化的主流工具之一,為開發者和運維人員帶來了極大的便捷 。下面我們一起開始入門第四篇:查看容器資源、查看容器詳細信息、…

基于數據挖掘的網絡入侵檢測關鍵技術研究

標題:基于數據挖掘的網絡入侵檢測關鍵技術研究 內容:1.摘要 隨著互聯網的迅速發展,網絡安全問題日益嚴峻,網絡入侵行為對個人、企業和國家的信息安全構成了巨大威脅。本文的目的是研究基于數據挖掘的網絡入侵檢測關鍵技術,以提高網絡入侵檢測…

中學數學幾百年重大錯誤:將無窮多各異假R誤為R——兩數集相等的必要條件

中學數學幾百年重大錯誤:將無窮多各異假R誤為R——兩數集相等的必要條件 黃小寧 設集A{x}表A各元均由x代表,相應變量x的變域是A。其余類推。本人多年前公開發表的論文中有定理: h定理(兩數集相等的必要條…

react-activation 實現頁面保活記錄

這里寫目錄標題 一、安裝插件(可選)1、react-activation (推薦)2、umi-plugin-keep-alive 二、AliveScope的兩種配置方式1、在src/app.ts 中配置2、在src/layout/index.tsx中配置 三、umi中的配置四、使用問題記錄1、drop使用不生…

STM32使用紅外避障傳感器

1.1 介紹: 該傳感器模塊對環境光適應能力強,其具有一對紅外線發射與接收管,發射管發射出一定頻率的紅外線,當檢測方向遇到障礙物(反射面)時,紅外線反射回來被接收管接收,經過比較器…

python tkinter 開發蓍草占卜系統

1. 項目概述 1.1 簡介 蓍草占卜是中國傳統的占卜方法,用于演算六十四卦。本系統通過現代編程技術,將傳統的蓍草占卜方法數字化,提供一個準確、便捷的占卜工具。 蓍草占卜,作為中國古代的一種傳統占卜方法,承載著深厚…

Linux搭建本地時間服務器及時間同步

搭建一個本地時間服務器,使得局域網內主機時間保持一致。 設置正確時間 # 設置系統時間 date -s "2025-03-25 17:31:00" # 將系統時間寫入硬件時鐘 hwclock --systohc時間服務器設置 系統應該預先安裝chronyd 要允許 所有客戶端 通過你的 chronyd 服務器…

2025-3-25算法打卡

一,走迷宮 1.題目描述: 給定一個 NMNM 的網格迷宮 GG。GG 的每個格子要么是道路,要么是障礙物(道路用 11 表示,障礙物用 00 表示)。 已知迷宮的入口位置為 (x1,y1)(x1?,y1?),出口位置為 (x…

力扣刷題39. 組合總和

39. 組合總和 - 力扣(LeetCode) 需要定義一個index變量用來記錄訪問數組的下標,每次遞歸進行傳參,在搜索過程中,因為為了避免重復數據,而且允許一個元素的重復出現,傳入index時傳入當前遍歷的i…

ISIS-3 LSDB鏈路狀態數據庫同步

上一章我們介紹了ISIS的鄰居建立關系以及ISIS的路由器角色有哪些,在不同的網絡類型當中建立鄰居關系有什么不同,并且以實驗案例抓包的形式給大家進一步介紹了建立的過程。 這一章我們來介紹ISIS中是如何實現鏈路狀態數據庫同步的,與OSPF的鏈路狀態同步有什么不同,在不同網絡類…

Opencv計算機視覺編程攻略-第三節 圖像顏色處理

第三節 圖像顏色處理 1.顏色比較2.GrabCut分割圖像3.色調、飽和度以及亮度 1.顏色比較 主要實現逐像素的顏色比較,其中注意BGR顏色空間不連續,不利于顏色提取和區分,轉換到Lab空間: int getColorDistance(const cv::Vec3b& c…