決策樹(回歸樹)全解析:原理、實踐與應用

文章目錄

  • 一、概述
    • 1.1 介紹
    • 1.2 回歸樹和分類樹區別
  • 二、重要參數、屬性及接口
    • 2.1 criterion(不純度衡量指標)
    • 2.2 回歸樹如何工作(核心流程拆解)
  • 三、用回歸樹擬合正弦曲線(實戰案例)
    • 3.1 繪制正弦曲線
    • 3.2 為正弦曲線添加噪聲
    • 3.3 實例化訓練模型
    • 3.4 測試集導入模型
    • 3.5 繪制圖像(對比真實與預測)
  • 總結

一、概述

1.1 介紹

回歸樹是決策樹家族中專攻連續型數值預測的模型,其運作邏輯可理解為 “把復雜回歸難題拆分成簡單小任務” 。打個比方,要預測房價(典型的連續數值),它會依據 “房屋面積>100㎡”“房齡<5 年” 這類規則,將整個數據集像切蛋糕一樣,分割成一個個葉節點。每個葉節點會計算對應子數據集的均值,以此作為該區域的預測輸出。整個過程就像樹狀結構那樣,從根節點開始逐層做決策,既直觀又高效,哪怕是非技術人員,也能輕松看懂模型的大致判斷邏輯。

1.2 回歸樹和分類樹區別

為了更清晰展現回歸樹與分類樹的不同,我們用表格對比:

對比維度回歸樹分類樹
預測目標聚焦連續型數值,像房價、溫度、股票收盤價這類可在一定區間內連續取值的數據預測針對離散型類別,比如貓狗分類、疾病診斷(是 / 否患病)、垃圾郵件識別(是 / 否垃圾郵件)等場景
葉節點輸出輸出子數據集的均值,是連續的數值結果,比如某葉節點對應房屋子數據的平均價格輸出子數據集的眾數,也就是出現頻率最高的類別標簽,像某葉節點里貓咪圖片占比最多,就輸出 “貓” 這個類別
不純度衡量用平方誤差(最小化預測值與真實值的偏差,公式為∑(yi?yˉ)2\sum(y_i - \bar{y})^2(yi??yˉ?)2 ),直接和回歸任務的預測目標掛鉤,清晰反映數值預測的誤差情況借助基尼系數(衡量類別混亂程度,數值越小越純凈)或者信息熵(反映信息不確定性,越小說明類別越集中),目標是降低類別混亂度

二、重要參數、屬性及接口

2.1 criterion(不純度衡量指標)

在回歸樹里,criterion 參數起著關鍵作用,它決定了模型如何挑選 “最佳分割特征以及對應的分割閾值” ,常用的參數有以下這些:

  • mse(均方誤差):這是默認且最常用的指標!它會計算分割后子節點的平方誤差,也就是把每個數據點的真實值與子節點均值的差做平方后求和(∑(yi?yˉ)2\sum(y_i - \bar{y})^2(yi??yˉ?)2)。模型訓練時,會努力找到讓這個誤差最小的分割方式,因為它直接關聯回歸任務的預測目標,計算簡單又高效,大多數常規回歸場景用它準沒錯。
  • mae(平均絕對誤差):計算方式是把每個數據點真實值與子節點均值的絕對差求和(∑∣yi?yˉ∣\sum |y_i - \bar{y}|yi??yˉ?)。相比 mse,它對異常值更 “寬容”(魯棒性強),因為平方運算會放大異常值的影響,而絕對值運算相對更平和。不過,它的計算速度稍慢一點,適合數據里噪聲大、異常值多的場景,能避免模型被異常值帶偏。

下面用 Python 的 sklearn 庫演示代碼:

from sklearn.tree import DecisionTreeRegressor
# 實例化模型,設置 mse 作為 criterion,追求最小化平方誤差
model_mse = DecisionTreeRegressor(criterion='mse')  
# 實例化模型,設置 mae 作為 criterion,應對噪聲數據更穩
model_mae = DecisionTreeRegressor(criterion='mae')  

2.2 回歸樹如何工作(核心流程拆解)

回歸樹構建是個層層遞進的過程,就像剝洋蔥一樣,把復雜問題逐步拆解,主要分這 4 步:

  1. 特征 & 閾值遍歷:模型會逐個遍歷每個特征,比如預測房價時的房屋面積、房齡、樓層等特征。對于每個特征,還會遍歷所有可能的分割閾值,像房屋面積可能嘗試 80㎡、90㎡、100㎡ 等作為分割點,看看怎么分能讓后續預測更準。
  2. 誤差計算:依靠選定的 criterion(比如 mse),計算按照當前分割方式,分割后子節點的誤差總和。然后從眾多分割可能里,找出能讓誤差下降最多的那個分割,把它作為當前的最佳分割。
  3. 遞歸分割:完成一次分割后,會生成新的子節點。接著,對子節點重復前面 “遍歷特征 - 計算誤差 - 找最佳分割” 的流程,不斷細分數據,直到觸發停止條件。常見停止條件有樹的深度達到預設最大值(比如限制樹只能長 5 層深),或者某個節點里的數據樣本太少(比如只剩 10 個數據點就不再分割)。
  4. 葉節點賦值:當無法再繼續分割(觸發停止條件)時,葉節點就確定下來。葉節點的預測值,就是對應子數據集的均值,用這個均值代表該區域數據的預測結果。

三、用回歸樹擬合正弦曲線(實戰案例)

目標:借助回歸樹學習 y=sin?(x)y = \sin(x)y=sin(x) 這條曲線的規律,處理帶有噪聲的模擬數據,驗證模型在曲線擬合這類回歸任務里的能力,同時看看怎么調整參數優化效果。

3.1 繪制正弦曲線

先通過代碼生成純凈的正弦曲線數據,直觀感受它的形態:

import numpy as np
import matplotlib.pyplot as plt# 設置中文字體,SimHei 為 Windows 下的中文黑體,可根據系統調整(如 macOS 可用 'PingFang SC' 等 )
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解決負號顯示為方塊的問題(可選,若繪圖有負號時需要 )
plt.rcParams['axes.unicode_minus'] = False# 生成 x 數據,在 0 到 2π 區間均勻取 200 個點,構建連續的 x 軸
x = np.linspace(0, 2 * np.pi, 200)
# 根據正弦函數計算對應的 y 值,得到純凈的正弦曲線數據
y = np.sin(x)# 繪制曲線,設置標簽和顏色,方便后續圖例展示
plt.plot(x, y, label='純凈正弦曲線', color='blue')
# 顯示圖例,讓曲線含義清晰
plt.legend()
# 展示繪制的圖像
plt.show()

運行后,會看到一條平滑的、在 -1 到 1 之間周期性波動的藍色正弦曲線,這是理論上純凈無干擾的曲線形態。

3.2 為正弦曲線添加噪聲

實際數據采集時,難免會有各種干擾,所以給純凈數據添加隨機噪聲,模擬真實場景:

# 加噪聲(設置隨機種子為 0,保證每次運行生成相同噪聲,方便復現結果;均值 0,方差 0.1 的正態分布噪聲)
np.random.seed(0)  
# 給純凈正弦曲線 y 的每個點,加上隨機噪聲,得到帶噪聲的 y_noise
y_noise = y + np.random.normal(0, 0.1, size=len(x))  # 繪制帶噪聲的數據點,用橙色小散點展示;同時繪制純凈曲線作為參考
plt.scatter(x, y_noise, label='帶噪聲數據', color='orange', s=10)
plt.plot(x, y, label='純凈曲線', color='blue')
# 顯示圖例,區分噪聲點和純凈曲線
plt.legend()
# 展示圖像,能看到噪聲讓原本平滑的曲線變得“凹凸不平”
plt.show()

此時圖像里,藍色平滑曲線是純凈正弦曲線,橙色小點點是疊加噪聲后的模擬真實數據,能直觀看到噪聲對數據的影響。

3.3 實例化訓練模型

sklearn 里的 DecisionTreeRegressor 來訓練模型,過程如下:

from sklearn.tree import DecisionTreeRegressor# 數據格式轉換(sklearn 的模型要求特征數據是二維數組,所以把一維的 x 轉成列向量形式)
x_reshape = x.reshape(-1, 1)  # 實例化模型,這里設置 max_depth=5 控制樹的深度,criterion 選常用的 'mse';也可調整參數看效果變化
model = DecisionTreeRegressor(max_depth=5, criterion='squared_error')  
# 用帶噪聲的數據訓練模型,讓模型學習 x 和 y_noise 之間的關系
model.fit(x_reshape, y_noise)  

這里 max_depth 是重要參數,控制樹的深度,深度設置會影響模型對曲線的擬合程度,后續可調整探索。

3.4 測試集導入模型

用訓練好的模型,對測試數據(這里直接用和訓練數據同范圍的 x 生成測試集,也可換新的獨立數據)做預測:

# 用同樣 x 范圍生成測試集(也可準備全新數據;保持和訓練數據同結構,轉成二維)
x_test = np.linspace(0, 2 * np.pi, 200).reshape(-1, 1)  
# 用訓練好的模型預測測試集的 y 值
y_pred = model.predict(x_test)  

模型會依據訓練時學到的分割規則,對每個測試數據點 x_test,找到對應的葉節點,用葉節點均值給出預測結果 y_pred

3.5 繪制圖像(對比真實與預測)

把純凈曲線、帶噪聲數據、模型預測曲線放一起對比,直觀看擬合效果:

plt.figure(figsize=(10,6))
# 繪制帶噪聲數據點,展示原始數據分布
plt.scatter(x, y_noise, label='帶噪聲數據', color='orange', s=10)  
# 繪制純凈正弦曲線,用虛線展示理論形態,方便對比
plt.plot(x, y, label='純凈正弦曲線', color='blue', linestyle='--')  
# 繪制回歸樹預測曲線,用紅色實線突出模型預測結果
plt.plot(x_test, y_pred, label='回歸樹預測', color='red', linewidth=2)  # 顯示圖例,說明各條線、點的含義
plt.legend()
# 設置標題,清晰展示圖表主題
plt.title('回歸樹擬合正弦曲線')
# 標注 x 軸、y 軸含義
plt.xlabel('x')
plt.ylabel('y')
# 展示圖像
plt.show()

效果說明

  • max_depth 很小時(比如設為 2),曲線會比較 “平”,模型對曲線的擬合不足,出現欠擬合,因為樹太淺,沒辦法捕捉曲線的波動細節。
  • 隨著 max_depth 增大(比如設為 10),曲線會越來越貼合帶噪聲的數據,甚至可能過度學習噪聲,出現過擬合,曲線變得 “崎嶇”,在新數據上預測效果變差。
    實際應用中,需要調整參數平衡欠擬合和過擬合問題。常用做法是用交叉驗證(比如 GridSearchCV 工具),自動篩選合適的 max_depthcriterion 等參數,找到在驗證集上表現最好的模型配置。

總結

現過擬合,曲線變得 “崎嶇”,在新數據上預測效果變差。
實際應用中,需要調整參數平衡欠擬合和過擬合問題。常用做法是用交叉驗證(比如 GridSearchCV 工具),自動篩選合適的 max_depthcriterion 等參數,找到在驗證集上表現最好的模型配置。

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

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

相關文章

【盤古100Pro+開發板實驗例程】FPGA學習 | HDMI 回環實驗

本原創文章由深圳市小眼睛科技有限公司創作,版權歸本公司所有,如需轉載,需授權并注明出處(www.meyesemi.com) 1. 實驗簡介 實驗目的: 完成 HDMI 回環實驗 實驗環境: Window11 PDS2022.2-SP6.4 硬件環境…

鴻蒙系統PC安裝指南

鴻蒙系統PC安裝指南一、安裝DevEco Studio集成開發環境二、下載鴻蒙系統PC三、啟動鴻蒙系統及使用一、安裝DevEco Studio集成開發環境首先訪問華為官網上,注冊并登錄華為賬號,以開始下載所需的軟件。若尚未注冊,請先注冊一個。在官網頁面中&a…

三十九、【擴展工具篇】Allpairspy 組合用例生成器:智能設計高效測試集

三十九、【擴展工具篇】Allpairspy 組合用例生成器:智能設計高效測試集 前言 準備工作 第一部分:后端實現 - `allpairspy` API 1. 創建 `allpairspy` 服務 2. 創建 `allpairspy` API 視圖 3. 注冊 API 路由 第二部分:前端實現 - `Allpairspy` 工具界面 1. 創建 API 服務 (`s…

ZooKeeper 深度實踐:從原理到 Spring Boot 全棧落地

在 Kubernetes 為主流注冊發現的今天,給出如何在 Spring Boot 中基于 ZooKeeper 實現服務注冊/發現、分布式鎖、配置中心以及集群協調的完整代碼與最佳實踐。所有示例均可直接復制運行。 1. ZooKeeper 架構與核心原理 1.1 角色 Leader:處理寫請求&…

可驗證隨機函數-VRF

可驗證隨機函數(Verifiable Random Function, VRF)是一種結合密碼學技術的偽隨機數生成器,其核心特點是生成的隨機數可被公開驗證,且具有不可預測性和唯一性。以下是VRF的詳細解析:1. 基本定義與核心特性 可驗證性&…

極客大挑戰2020(部分wp)

Roamphp1-Welcome 405請求方法不允許,改一下請求方法 數組繞過,在頁面搜索flag即可!本題:就是知道了405是請求方法不允許! Roamphp2-Myblog(zip協議加文件包含) 首先進來就是一個博客頁面&…

ESP32 外設驅動開發指南 (ESP-IDF框架)——GPIO篇:基礎配置、外部中斷與PWM(LEDC模塊)應用

目錄 一、前言 二、GPIO 2.1 GPIO簡介 2.2 GPIO函數解析 2.3 LED驅動 2.4 KEY驅動 三、EXIT 3.1 EXIT簡介 3.2 EXIT函數解析 3.3 EXIT驅動 四、LEDC 4.1 PWM原理解析 4.2 ESP32的LED PWM控制器介紹 4.3 LEDC函數解析 4.3.1 SW_PWM 4.3.2 HW_PWM 4.4 LEDC驅動 …

鴻蒙 ArkWeb 加載優化方案詳解(2025 最佳實踐)

適用平臺:HarmonyOS NEXT / API 10 關鍵詞:ArkWeb、WebviewController、NodeController、預加載、預連接、預渲染、性能優化一、前言:為什么必須優化 ArkWeb 加載?在鴻蒙生態中,ArkWeb 是系統級的 Web 容器引擎&#x…

JavaScript案例(乘法答題游戲)

項目概述 使用原生JavaScript實現一個乘法答題游戲,隨機生成乘法題目,判斷答案正誤并記錄分數,通過localStorage實現分數持久化存儲。 核心功能需求 隨機題目生成:動態生成1-10之間的乘法題答題交互:輸入答案并提交…

EXCEL刪除數據透視表

wps版 點擊紅框內任意區域 在頂部工具欄選擇刪除Excel 版 1.點擊紅框內任意區域2. 點擊Enable Selection,再按住鍵盤上的Delete鍵,記住不是Backspace鍵

Python 飛機大戰:從零開發經典 2D 射擊游戲

引言:重溫經典游戲開發 飛機大戰作為經典的 2D 射擊游戲,承載了許多人的童年回憶。使用 Python 和 Pygame 開發這樣一款游戲不僅能重溫經典,更是學習游戲開發絕佳的實踐項目。本文將帶你從零開始,一步步實現一個完整的飛機大戰游…

Vue項目中實現瀏覽器串口通信:Web Serial API完整指南

前言 在現代Web開發中,隨著IoT設備和硬件交互需求的增長,瀏覽器與串口設備的通信變得越來越重要。本文將詳細介紹如何在Vue項目中使用Web Serial API實現串口通信功能,為開發者提供一個完整的解決方案。 技術背景 傳統方案的局限性 傳統的串口…

Github怎么只下載某個目錄文件?(Git稀疏檢出、GitZip for Github插件、在線工具DownGit)Github下載目錄

文章目錄**方法一:使用 Git 的稀疏檢出(Sparse Checkout)**(略)**步驟:****方法二:使用 SVN 下載特定目錄**(略)**步驟:****方法三:使用瀏覽器插件…

把“多視圖融合、深度傳感”組合在一起,今天分享3篇3D傳感技術干貨

關注gongzhonghao【計算機sci論文精選】3D傳感技術起源于工業領域高精度測量需求,早期以激光三角測量、結構光等技術為主,主要服務于制造業的零部件檢測與形變分析。隨著消費電子智能化升級,蘋果iPhone X的Face ID將結構光技術推向大眾市場&a…

dubbo源碼之消費端啟動的高性能優化方案

一、序言 dubbo作為一款最流行的服務治理框架之一,在底層做了很多的優化,比如消費端在啟動的時候做了很多性能提升的設計,接下來從連接的層面、序列化功能的層面進行介紹下。 二、優化點 1、消費端在服務啟動的時候會調用DubboProtocol類的protocolBindingRefer方法來創建…

zookeeper常見命令和常見應用

前言 ZooKeeper自帶一個交互式命令行工具(通過zkCli.sh或zkCli.cmd啟動),提供了一系列操作ZooKeeper數據節點的命令 下面我們對zookeeper常用命令進行介紹 使用prettyZoo命令行窗口 使用prettyZoo客戶端鏈接zookeeper 打開zookeeper命令…

前端異步任務處理總結

一、異步任務常見場景網絡請求:fetch()、axios 等 API 調用定時操作:setTimeout、setInterval用戶交互:事件監聽回調資源加載:圖片/腳本動態加載Web Workers:后臺線程計算二、核心處理方案1. Promise(ES6&a…

機器學習第三課之邏輯回歸(二)LogisticRegression

目錄 簡介 一.分類評估?法 1.混淆矩陣 2.精確率(Precision)與召回率(Recall) 3.F1-score 4.分類評估報告api 2.正則化懲罰 3.?擬合和過擬合 4.K折交叉驗證 5.代碼分析 簡介 接上一篇博客最后 機器學習第二課之邏輯回歸(一)LogisticRegres…

基于ELK Stack的實時日志分析與智能告警實踐指南

基于ELK Stack的實時日志分析與智能告警實踐指南 一、業務場景描述 在生產環境中,服務實例數量眾多,日志量激增,傳統的文本 grep 或 SSH 登錄方式已無法滿足實時監控與故障定位需求。我們需要搭建一個可擴展、低延遲的日志收集與分析平臺&…

需求變更過程中出現的團隊資源沖突問題處理的一些小技巧

??一、資源沖突的典型場景?? ??技術資源爭奪??:多個需求同時需要同一開發人員或技術專家支持 ??人力資源過載??:突發需求導致團隊成員工作量超負荷(如同時處理3個緊急需求) ??設備/環境沖突??:測試服務器資源不足或特定開發工具許可證被占用 ??跨團隊協…