決策樹剪枝及數據處理

一、核心決策樹算法(3 類主流算法)

  1. 1. ID3 算法:用 “信息增益” 選屬性

    ID3 是決策樹的 “開山鼻祖” 之一,它的核心邏輯是 “選能讓數據最‘純’的屬性”—— 這里的 “純” 用 “信息增益” 衡量。
    簡單說,“信息增益” 就是 “劃分前的混亂度(熵)減去劃分后的混亂度”,增益越大,說明用這個屬性劃分后,數據從 “雜亂無章” 到 “類別分明” 的提升越明顯。
    比如 PPT 里的例子:用 “天氣、溫度、濕度、是否多云” 這 4 個屬性,預測 “是否出去玩”。ID3 會計算每個屬性的信息增益,選增益最大的那個先劃分(比如先按 “天氣” 分,再按 “溫度” 分)。

    但 ID3 有個明顯的缺點:偏愛 “取值多的屬性”。比如如果數據里有 “編號” 這種每個樣本都不同的屬性,ID3 會覺得它的信息增益最大(畢竟每個編號對應一個樣本,劃分后完全 “純”),但這顯然沒意義 —— 相當于用 “身份證號” 做決策,對新數據毫無泛化能力。

    2. C4.5 算法:用 “信息增益率” 補坑

    為了修復 ID3 的 bug,C4.5 算法橫空出世。它在 “信息增益” 的基礎上,加了一個 “屬性自身的熵” 作為分母,得到 “信息增益率”。
    為什么這么做?因為取值多的屬性,自身的熵通常更大,除以它之后,就能平衡對 “多取值屬性” 的偏好。比如 “編號” 的信息增益高,但自身熵也極高,算出來的增益率反而可能很低,這樣就不會被誤選為劃分屬性了。

    PPT 里還是用 “是否出去玩” 的數據集,C4.5 會通過信息增益率,避開不合理的屬性,選出更有實際意義的劃分依據(比如優先選 “天氣”,而不是 “編號”)。

    3. CART 算法:用 “基尼指數” 兼顧分類與連續值

    CART 算法更靈活,它既能做分類,也能做回歸,這里我們先看分類場景。它用 “基尼指數” 衡量數據純度:基尼指數越小,說明數據越純(比如隨機從數據里抽兩個樣本,類別不一樣的概率越低)。

    最實用的是,CART 能處理 “連續值” 屬性 —— 比如 PPT 里的 “應稅收入”(125K、100K、70K…),它會用 “貪婪算法” 先給連續值排序,再找最優分界點(比如把 “應稅收入” 分成 “≤97.5K” 和 “>97.5K”),本質就是把連續值 “離散化”,再按分類邏輯劃分。這一點比 ID3 和 C4.5 更貼近真實數據(畢竟現實中很多特征是連續的,比如年齡、身高)。

二、決策樹剪枝策略(解決過擬合)

剪枝原因
決策樹理論上能完全分割數據,但易因 “過度貼合訓練數據” 導致過擬合,需通過剪枝降低復雜度、提升泛化能力。

1. 預剪枝:邊建邊剪,高效實用

預剪枝的思路很直接:在構建決策樹的過程中,就提前設定 “停止條件”,不讓樹長太 “胖”。
比如設定 “樹的最大深度不超過 10”“葉子節點至少有 5 個樣本才繼續劃分”“信息增益小于 0.1 就不劃分”—— 這些條件能從源頭限制樹的復雜度,避免過擬合。
預剪枝的優點是 “高效”,不用等樹建完再改;缺點是可能 “剪太狠”,導致欠擬合(樹太簡單,沒學到足夠的規律),所以參數需要反復調試。

2. 后剪枝:先建全樹,再 “砍枝”

后剪枝則是 “先把樹建完整,再回頭看哪些分支沒必要”。它的核心是 “計算損失”:
最終損失 = 分支自身的基尼系數(擬合效果) + α× 葉子節點數量(復雜度)
這里的 α 是 “平衡系數”:α 越大,越看重簡化樹(減少葉子節點),越能避免過擬合;α 越小,越看重擬合效果,可能保留更多分支。判斷是否剪枝的關鍵是 “驗證集精度”。
后剪枝的優點是 “效果更穩”,不容易欠擬合;缺點是 耗時

三、實踐

參數名作用說明
criterion選擇純度衡量標準:gini(基尼指數)、entropy(信息熵)
splitter選擇切分點方式:best(全特征找最優)、random(部分特征找,適合大數據)
max_features劃分時考慮的最大特征數:None(用全部)、sqrt(根號下總特征數)、log2 等
max_depth樹的最大深度:推薦 5-20,太深易過擬合,太淺易欠擬合

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

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

相關文章

Ansible 角色管理

環境準備# 創建一個叫web的文件夾并進入&#xff08;相當于新建一個工作目錄&#xff09;[lykcontroller ~]$ mkdir web && cd web?# 創建Ansible的配置文件ansible.cfg[lykcontroller web]$ cat > ansible.cfg <<EOF[defaults]remote_user lykinventory .…

Java面試準備指南!

現在已經是8月中旬了&#xff0c;秋招馬上就要開始了&#xff0c;不知道大家準備好了嗎&#xff1f;現階段找工作真的是千軍萬馬過獨木橋&#xff0c;沒有真本事&#xff0c;真的會被淘汰掉&#xff0c;現實就是如此的殘酷&#xff01; 為了能夠幫助到大家在秋招Java面試中脫穎…

Encoder-Decoder Model編碼器-解碼器模型

Encoder-Decoder編碼器-解碼器是一種深度學習模型&#xff0c;應用于圖像處理、語音識別、自然語言處理等領域。主要由編碼器和解碼器兩部分組成&#xff0c;這種結構能夠處理序列到序列的任務。編碼器-解碼器模型具備獨特的雙階段處理&#xff0c;先對輸入信息進行編碼&#x…

Python函數總結

目錄 一、普通函數 1.1 函數的定義與調用 1.2 函數的說明文檔 1.3 函數的參數 1.4 函數的返回值 二、函數的作用域和關鍵字 2.1 局部作用域 2.2 全局作用域 2.4 global關鍵字和nonlocal關鍵字的使用 三、函數的遞歸與嵌套 3.1 嵌套函數 3.2遞歸函數 四、函數名的應…

sqlite-gui:一款開源免費、功能強大的SQLite開發工具

sqlite-gui 是一個輕量級的 SQLite 編輯器&#xff0c;基于 C/mingw64/WinAPI 開發&#xff0c;支持 Windows 平臺。 sqlite-gui 是一個免費開源的項目&#xff0c;代碼托管在 GitHub&#xff1a; https://github.com/little-brother/sqlite-gui 功能特性 支持 SQL 語法高亮…

Ethan獨立開發新品速遞 | 2025-08-19

每日精選Product Hunt上最值得關注的獨立產品&#xff0c;發現全球創新靈感&#xff0c;助力你的產品成長。 下面挑選出對獨立開發者最有參考價值的 10 個項目&#xff0c;側重開發工具、AI 工具、SaaS 和創業支持類產品&#xff0c;去除娛樂、小眾垂直和大公司產品。每條保留原…

從 Hive 數倉出發,全面剖析 StarRocks、MySQL、HBase 的使用場景與區別

以 Hive 數倉為底座,深入理解 StarRocks、MySQL 和 HBase 的區別與使用場景 一、前言 在現代大數據架構中,Hive 通常作為離線數倉的核心底座,負責批量數據的接入、清洗、計算與存儲。然而,為了滿足 實時計算、低延遲查詢、業務交互型操作和高并發存儲 等不同需求,我們往…

低延遲、跨平臺與可控性:直播SDK的模塊化價值解析

引言 音視頻直播已經從單純的娛樂應用&#xff0c;成長為產業級的實時交互基礎設施。無論是安防監控的秒級告警聯動、工業巡檢的遠程可視化操作&#xff0c;還是智慧教育中的多終端互動課堂、遠程醫療里的超低延遲手術協作&#xff0c;都離不開一條低延遲、高穩定性、跨平臺可…

JVM參數優化

JVM 參數優化是提升 Java 應用性能、減少 GC 停頓、避免 OOM&#xff08;內存溢出&#xff09;等問題的核心手段。優化的核心目標是平衡內存使用、GC 效率與應用響應速度&#xff0c;需結合應用類型&#xff08;如 Web 應用、批處理應用&#xff09;、業務場景&#xff08;如高…

pytest高級用法之插件開發

背景 pytest&#xff0c;python全功能測試框架&#xff08;用某句名言&#xff0c;甩unittest幾條街&#xff09;&#xff0c;鉤子函數、pytest插件、pytest裝飾器都能擴展pytest。 提及pytest高級用法&#xff0c;不得不說pytest插件&#xff0c;例如assert斷言失敗繼續斷言…

cesium中實時獲取鼠標精確坐標和高度

/*** 獲取鼠標位置的三維坐標(包含高度信息)* @param {Cesium.Cartesian2} position 鼠標位置* @returns {Cesium.Cartesian3|null} 三維坐標*/ function getMousePosition(position) {if (!position) return null;

Netty 集成 protobuf

什么是 Protobuf Protobuf(Protocol Buffers)是 Google 開發的一種高效、語言中立、平臺中立的序列化協議,用于在不同系統或語言之間傳輸結構化數據。開發者通過 .proto 文件定義消息結構,再使用生成的類進行序列化(轉為緊湊的二進制數據)和反序列化(還原為對象),相比…

程序調用 AI 大模型 -- Java

程序調用 AI 大模型 – Java 1、SDK 接入 安裝阿里云百煉SDK_大模型服務平臺百煉(Model Studio)-阿里云幫助中心 <dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><!-- 請將 the-latest-version 替…

VMware 虛擬機完全使用教程:從基礎到高級應用

VMware 虛擬機完全使用教程&#xff1a;從基礎到高級應用 一、引言 在當今數字化時代&#xff0c;計算機技術的飛速發展使得硬件性能不斷提升&#xff0c;但同時也帶來了資源浪費和管理復雜等問題。虛擬機技術應運而生&#xff0c;它能夠在一臺物理計算機上模擬出多臺獨立的計…

函數對象 vs 函數指針 vs lambda:該用哪個才高效?

博主介紹&#xff1a;程序喵大人 35 - 資深C/C/Rust/Android/iOS客戶端開發10年大廠工作經驗嵌入式/人工智能/自動駕駛/音視頻/游戲開發入門級選手《C20高級編程》《C23高級編程》等多本書籍著譯者更多原創精品文章&#xff0c;首發gzh&#xff0c;見文末&#x1f447;&#x…

Java團隊項目開發規范——對象分層規范

分層與對象命名規范如上圖所示&#xff0c;系統劃分成3個層&#xff1a;Controller層&#xff0c;Service層&#xff0c;Domain層 Controller層&#xff1a; Controller層是接入層&#xff0c;提供對外或者前端的接口&#xff0c;該層主要作用是提供對外接口的封裝。基于CQRS分…

低功耗模式

1. 什么是低功耗&#xff1f;低功耗模式&#xff1a;MCU 暫停部分時鐘/外設&#xff0c;降低電流消耗&#xff0c;等待外部事件&#xff08;中斷/復位/喚醒&#xff09;再恢復運行。應用場景&#xff1a;電池供電設備&#xff08;傳感器、手持設備、IoT 節點&#xff09;——延…

GPT-5 官方前瞻:它將如何重塑你的數字生活?

你是否曾想過&#xff0c;有一天你的瀏覽器不再是一個被動等待指令的工具&#xff0c;而是一個能主動為你分憂解難的智能伙伴&#xff1f;OpenAI 的 CEO Sam Altman 最近的發言&#xff0c;以及關于 GPT-5 的種種跡象&#xff0c;都預示著這個未來比我們想象的更近。這不僅是一…

驅動開發系列65 - NVIDIA 開源GPU驅動open-gpu-kernel-modules 目錄結構

一:OS相關部分 kernel-open/ 內核接口層 kernel-open/nvidia/ nvidia.ko 的接口層,負責GPU初始化,顯存管理,PCIe通信,中斷處理,電源管理等底層功能。 kernel-open/nvidia-drm/ nvidia-drm.ko 的接口層,提供標準圖形接口,讓Xorg、Wayland、Kwin、GNOME等桌面環境能夠通…

GPT-4.1旗艦模型:復雜任務的最佳選擇及API集成實踐

GPT-4.1旗艦模型&#xff1a;復雜任務的最佳選擇及API集成實踐 概述 GPT-4.1作為新一代旗艦大模型&#xff0c;憑借其卓越的智能表現、強大的跨領域問題解決能力&#xff0c;成為復雜任務處理的首選。本文將詳細解析GPT-4.1的核心能力、接口用法、計費方式、功能對比及API集成…