深入解析ID3算法:信息熵驅動的決策樹構建基石

本文來自「大千AI助手」技術實戰系列,專注用真話講技術,拒絕過度包裝。

ID3(Iterative Dichotomiser 3) 是機器學習史上的里程碑算法,由Ross Quinlan于1986年提出。它首次將信息論引入決策樹構建,奠定了現代決策樹的理論基礎。本文將深入剖析其數學本質與實現細節。


往期文章推薦:

  • 20.用Mermaid代碼畫ER圖:AI時代的數據建模利器
  • 19.ER圖:數據庫設計的可視化語言 - 搞懂數據關系的基石
  • 18.決策樹:被低估的規則引擎,80%可解釋性需求的首選方案
  • 17.實戰指南:用DataHub管理Hive元數據
  • 16.一鍵規范代碼:pre-commit自動化檢查工具實戰指南
  • 15.如何數據的永久保存?將信息以加密電磁波形式發射至太空實現永久保存的可行性說明
  • 14.NLP已死?大模型時代誰在悄悄重建「語言巴別塔」
  • 13.撕掉時序圖復雜度:Mermaid可視化極簡實戰指南
  • 12.動手實踐:LangChain流圖可視化全解析
  • 11.LangChain LCEL:三行代碼構建AI工作流的秘密
  • 10.LangChain執行引擎揭秘:RunnableConfig配置全解析
  • 9.避坑指南:Windows下pygraphviz安裝全攻略
  • 8.Python3安裝MySQL-python踩坑實錄:從報錯到完美解決的實戰指南
  • 7.Git可視化革命:3分鐘學會用Mermaid+AI畫專業分支圖
  • 6.vscode常用快捷命令和插件
  • 5.AI制圖新紀元:3分鐘用Mermaid畫出專業類圖
  • 4.3分鐘搞定數據可視化:Mermaid餅圖終極指南
  • 3.5分鐘玩轉Swagger UI:Docker部署+靜態化實戰
  • 2.記錄下blog的成長過程
  • 1.再說一說LangChain Runnable接口

一、核心思想:用信息增益量化特征價值

核心問題:如何選擇最優劃分特征?
ID3的答案:選擇能使信息增益最大化的特征

信息熵(Entropy):混亂度的度量

定義系統 S S S中樣本類別的混亂程度:
E n t r o p y ( S ) = ? ∑ i = 1 c p i log ? 2 p i Entropy(S) = -\sum_{i=1}^{c} p_i \log_2 p_i Entropy(S)=?i=1c?pi?log2?pi?

  • c c c:類別總數(如二分類時c=2)
  • p i p_i pi?:類別 i i i S S S中的比例

熵值解讀

  • 熵=0:所有樣本屬于同一類(完全純凈)
  • 熵=1(二分類時):兩類樣本各占50%(最混亂)

示例:硬幣正反面概率均為0.5時, E n t r o p y = ? ( 0.5 log ? 2 0.5 + 0.5 log ? 2 0.5 ) = 1 Entropy = - (0.5\log_20.5 + 0.5\log_20.5) = 1 Entropy=?(0.5log2?0.5+0.5log2?0.5)=1

信息增益(Information Gain)

定義特征 A A A對數據集 S S S的劃分效果:
G a i n ( S , A ) = E n t r o p y ( S ) ? ∑ v ∈ V a l u e s ( A ) ∣ S v ∣ ∣ S ∣ E n t r o p y ( S v ) Gain(S, A) = Entropy(S) - \sum_{v \in Values(A)} \frac{|S_v|}{|S|} Entropy(S_v) Gain(S,A)=Entropy(S)?vValues(A)?SSv??Entropy(Sv?)

  • V a l u e s ( A ) Values(A) Values(A):特征 A A A的取值集合(如“天氣”的特征值={晴,雨,陰})
  • S v S_v Sv? A A A取值為 v v v的子集

決策規則:選擇使 G a i n ( S , A ) Gain(S, A) Gain(S,A)最大的特征作為當前節點


二、算法運作機制:步步拆解

輸入與輸出
  • 輸入:離散型特征數據集(ID3不支持連續特征)
  • 輸出:一棵多叉決策樹(每個分支對應特征的一個取值)
遞歸構建流程
def ID3(S, features):if 所有樣本屬于同一類別C:return 葉節點(類別C)if 特征集為空:return 葉節點(S中最多的類別)# 核心步驟:計算每個特征的信息增益best_feature = argmax_{A ∈ features} [Gain(S, A)]創建節點Node(標注best_feature)# 遍歷最佳特征的每個取值for value in values(best_feature):Sv = S中best_feature=value的子集if Sv為空:添加葉節點(標注S中最多的類別)else:子節點 = ID3(Sv, features - {best_feature})  # 遞歸調用Node添加分支(value → 子節點)return Node

三、實例推演:天氣預報數據集

天氣溫度濕度風力是否打球
正常
步驟1:計算根節點熵值
  • 總樣本數:5
  • 打球(是):3,不打球(否):2
  • E n t r o p y ( S ) = ? ( 3 5 log ? 2 3 5 + 2 5 log ? 2 2 5 ) ≈ 0.971 Entropy(S) = -(\frac{3}{5}\log_2\frac{3}{5} + \frac{2}{5}\log_2\frac{2}{5}) ≈ 0.971 Entropy(S)=?(53?log2?53?+52?log2?52?)0.971
步驟2:計算各特征信息增益

以“天氣”為例

  • 晴:2個樣本 → 全部“否” → E n t r o p y ( S 晴 ) = 0 Entropy(S_{晴}) = 0 Entropy(S?)=0
  • 陰:1個樣本 → 全部“是” → E n t r o p y ( S 陰 ) = 0 Entropy(S_{陰}) = 0 Entropy(S?)=0
  • 雨:2個樣本 → 全部“是” → E n t r o p y ( S 雨 ) = 0 Entropy(S_{雨}) = 0 Entropy(S?)=0
  • G a i n ( S , 天氣 ) = 0.971 ? [ 2 5 × 0 + 1 5 × 0 + 2 5 × 0 ] = 0.971 Gain(S, 天氣) = 0.971 - [\frac{2}{5}×0 + \frac{1}{5}×0 + \frac{2}{5}×0] = 0.971 Gain(S,天氣)=0.971?[52?×0+51?×0+52?×0]=0.971

同理計算其他特征:

  • G a i n ( S , 溫度 ) ≈ 0.571 Gain(S, 溫度) ≈ 0.571 Gain(S,溫度)0.571
  • G a i n ( S , 濕度 ) ≈ 0.971 Gain(S, 濕度) ≈ 0.971 Gain(S,濕度)0.971
  • G a i n ( S , 風力 ) ≈ 0.020 Gain(S, 風力) ≈ 0.020 Gain(S,風力)0.020

選擇“天氣”或“濕度”作為根節點(增益均為0.971)


四、ID3的局限性:算法缺陷深度分析

  1. 多值特征偏好問題

    • 極端案例:若用“ID編號”作為特征
    • 每個樣本獨占一個分支 → E n t r o p y ( S v ) = 0 Entropy(S_v)=0 Entropy(Sv?)=0
    • G a i n ( S , I D ) = E n t r o p y ( S ) Gain(S, ID)=Entropy(S) Gain(S,ID)=Entropy(S)(增益最大)
      → 導致毫無泛化能力的過擬合樹
  2. 連續特征處理缺失
    無法直接處理如“溫度=25°C”的連續值,需先離散化

  3. 缺失值敏感
    未定義特征缺失時的處理機制

  4. 剪枝功能缺失
    原始ID3不提供防止過擬合的剪枝策略

重要結論:這些缺陷直接催生了改進算法C4.5(引入信息增益率和剪枝)


五、Python實現核心代碼

import numpy as np
from collections import Counterdef entropy(y):"""計算信息熵"""hist = np.bincount(y)ps = hist / len(y)return -np.sum([p * np.log2(p) for p in ps if p > 0])def information_gain(X, y, feature_idx):"""計算指定特征的信息增益"""parent_entropy = entropy(y)# 按特征取值劃分數據集unique_vals = np.unique(X[:, feature_idx])child_entropy = 0for val in unique_vals:mask = X[:, feature_idx] == valchild_y = y[mask]weight = len(child_y) / len(y)child_entropy += weight * entropy(child_y)return parent_entropy - child_entropyclass ID3Node:def __init__(self, feature=None, children=None, label=None):self.feature = feature    # 劃分特征索引self.children = children  # 字典:{特征值: 子節點}self.label = label        # 葉節點的類別標簽def id3(X, y, features):# 終止條件1:所有樣本同類別if len(np.unique(y)) == 1:return ID3Node(label=y[0])# 終止條件2:無可用特征if len(features) == 0:majority_label = Counter(y).most_common(1)[0][0]return ID3Node(label=majority_label)# 選擇最佳劃分特征gains = [information_gain(X, y, feat) for feat in features]best_idx = np.argmax(gains)best_feat = features[best_idx]# 創建新節點node = ID3Node(feature=best_feat, children={})# 遞歸構建子樹remaining_feats = [f for f in features if f != best_feat]for val in np.unique(X[:, best_feat]):mask = X[:, best_feat] == valX_sub, y_sub = X[mask], y[mask]if len(X_sub) == 0:  # 子集為空majority_label = Counter(y).most_common(1)[0][0]node.children[val] = ID3Node(label=majority_label)else:node.children[val] = id3(X_sub, y_sub, remaining_feats)return node

六、歷史意義與現代應用

劃時代貢獻

  1. 首次將信息論引入機器學習特征選擇
  2. 奠定決策樹遞歸分割的框架范式
  3. 啟發后續C4.5/CART等里程碑算法

現代應用場景

  • 醫學診斷系統(癥狀→疾病路徑清晰可解釋)
  • 金融反欺詐規則提取(符合監管透明度要求)
  • 工業故障樹分析(物理意義明確的決策邏輯)

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術!

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

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

相關文章

Java解析audio時長

前提需要電腦上先安裝后ffmpeg public long parseDuration(String audioPath) {long durationMs -1;try {Process process Runtime.getRuntime().exec("ffprobe " audioPath);// InputStream is process.getInputStream();InputStream is process.getErrorStrea…

python學智能算法(十五)|機器學習樸素貝葉斯方法進階-CountVectorizer多文本處理

【1】引言 前序學習進程中,已經學習CountVectorizer文本處理的簡單技巧,先相關文章鏈接為: python學智能算法(十四)|機器學習樸素貝葉斯方法進階-CountVectorizer文本處理簡單測試-CSDN博客 此次繼續深入&#xff0…

AiPy 監控視頻智能監察:人像一鍵抽取+可反復執行程序落地

兄弟們,不知道你們有沒有過查監控的經歷,雖然現在監控攝像頭是越來越多,硬盤越塞越滿,但真出了事兒,回放查錄像堪比大海撈針!純人工一幀幀的去找,能把眼睛盯瞎還是人影都找不到。不過我最近搞了…

期貨反向跟單-終止盤手合作原則(二)

在期貨反向跟單的領域中,數據就是實打實的真金白銀,是策略能否持續盈利的核心價值所在。然而,許多團隊在實際運營過程中,都遭遇了相似的困境:期初策略運轉良好,可隨著時間推移,數據表現卻每況愈…

【Unity】MiniGame編輯器小游戲(三)馬賽克【Mosaic】

更新日期:2025年6月17日。 項目源碼:后續章節發布 索引 馬賽克【Mosaic】一、游戲最終效果二、玩法簡介三、正式開始1.定義游戲窗口類2.規劃游戲窗口、視口區域3.地圖方塊陣列①.定義方塊結構體②.生成方塊陣列③.計算九宮格黑色方塊數量④.排除任意九宮…

基于深度學習的智能圖像質量評估系統:技術與實踐

前言 在數字圖像處理和計算機視覺領域,圖像質量評估(Image Quality Assessment, IQA)是一個重要的研究方向。圖像質量評估的目標是通過算法自動評估圖像的質量,包括清晰度、對比度、噪聲水平等。傳統的圖像質量評估方法主要依賴于…

【Golang面試題】Go語言實現請求頻率限制

Go語言實現請求頻率限制:從計數器到令牌桶的完整指南 在實際開發中,接口被惡意刷請求是常見問題。本文將深入探討Go語言中四種主流的請求限流方案,從簡單到復雜逐步深入,助你構建高可用服務。 一、基礎方案:計數器法…

11Labs 增長負責人分享:企業級市場將從消費級或開發者切入丨Voice Agent 學習筆記

本文摘自 Founder Park AI 產品如何做增長,ElevenLabs的案例很值得學習。 專注于 AI 語音生成的獨角獸企業 ElevenLabs 可以說一直在高速增長。在今年 1 月完成 1.8 億美元 C 輪融資后,ElevenLabs 的估值突破 30 億,直指 33 億美元。2024 年…

Linux 命令:grep

概述 在Linux系統里,grep是一款十分實用的命令行工具,它主要用于在文件或者輸入流中搜索符合特定模式的文本。下面為你詳細介紹它的用法。資料已經分類整理好:https://pan.quark.cn/s/26d73f7dd8a7 基本語法 grep [選項] 搜索模式 [文件..…

Java八股文——MySQL「架構篇」

MySQL主從復制了解嗎 面試官您好,我了解MySQL的主從復制。它是構建高可用、高可擴展數據庫架構的核心基石。 1. 主從復制的核心原理與流程 整個主從復制的過程,就是一場圍繞 binlog(二進制日志) 的“接力賽”。這個過程主要可以…

ubuntu下python版本升級導致pyqt不能正常運行解決

最終解決方案 ubuntu下多python版本pyqt兼容性問題解決 python3.9 -m pip install --upgrade --force-reinstall --prefer-binary pyqt5)嘗試解決方案一(失敗) 系統默認python版本可以,其他版本不行 sudo apt install pyqt5-dev-tools嘗試解決方案二(失敗) 一直…

AIGC工具平臺-VideoRetalking音頻對口型數字人

唇形合成技術正逐漸成為AIGC內容生產領域的重要工具,能夠實現音視頻數據的高度融合。基于VideoRetalking模塊的可視化界面降低了技術門檻,使非技術背景的用戶也能便捷體驗唇形驅動數字人合成的流程。 本文重點解析該模塊的使用方式及開發流程&#xff0…

前端項目如何部署為https

如何為項目部署設置HTTPS 設置HTTPS是保護網站數據傳輸安全的重要步驟。以下是設置HTTPS的主要方法: 1. 獲取SSL/TLS證書 免費證書選項 Let’s Encrypt:最流行的免費證書頒發機構Cloudflare:提供免費SSL和CDN服務ZeroSSL:另一…

nginx 配置 系統升級頁面

默認80端口配置如下: server {listen 80; # 指定端口號server_name 192.168.2.96; # 替換為實際域名或IP# 全局重定向到升級頁面(排除自身防循環)if ($request_uri !~* "/upgrade.html") {return 307 /upgrade.html; # 臨時重定…

計算機基礎(一)——設計模式

一、設計模式 設計模式(Design Patterns)是軟件開發中反復出現問題的解決方案的通用描述。 它是經過總結、提煉的高效代碼結構和設計方案,幫助開發者寫出更靈活、可維護和可擴展的代碼。 優點注意點規范代碼結構,提高開發效率設…

Mac電腦 磁盤檢測和監控工具 DriveDx

DriveDx Mac 一款不監視驅動器的內置S.M.A.R.T.狀態的先進驅動器運行狀況診斷和監測工具。 還分析了所有驅動器健康密切相關的指標, SSD或硬盤驅動器故障(像SSD磨損 /耐久性,壞扇區重新分配,離線壞道,未定扇形區&…

頻繁操作Json嵌套數據PostgreSQL配合JSON操作工具類+sql

文章目錄 1.工具類2.依賴3.sql 本文檔只是為了留檔方便以后工作運維,或者給同事分享文檔內容比較簡陋命令也不是特別全,不適合小白觀看,如有不懂可以私信,上班期間都是在得 背景:因為頻繁操作json嵌套數據 PostgreSQL得…

京東云 centos vim有操作混亂的問題

centos云服務器 安裝micro編輯器可以解決 yum install micro

限流系列之二:TDMQ CKafka 版限流方案詳解及最佳實踐

導語 在當今大數據和實時通信的時代,消息隊列在分布式系統中扮演著至關重要的角色。CKafka 作為一種高性能、高可靠的消息中間件,被廣泛應用于各種業務場景中。然而,隨著業務的增長和數據流量的增加,CKafka 在生產者和消費者以極…

消息隊列的基本概念

文章目錄 為什么需要消息隊列?🤔🎯 核心價值📋 使用場景 🏗? 架構層面的基本概念整體架構圖📦 核心組件詳解1. Broker(消息代理)2. Topic(主題)3. Partition…