【scikit-learn基礎】--『監督學習』之 決策樹回歸

決策樹算法是一種既可以用于分類,也可以用于回歸的算法。

決策樹回歸是通過對輸入特征的不斷劃分來建立一棵決策樹,每一步劃分都基于當前數據集的最優劃分特征。
它的目標是最小化總體誤差或最大化預測精度,其構建通常采用自上而下的貪心搜索方式,通過比較不同劃分標準來選擇最優劃分。

決策樹回歸廣泛應用于各種回歸問題,如預測房價、股票價格、客戶流失等。

1. 算法概述

決策樹相關的諸多算法之中,有一種CART算法,全稱是?classification and regression tree(分類與回歸樹)。
顧名思義,這個算法既可以用來分類,也可以用來回歸,本篇主要介紹其在回歸問題上的應用。

決策樹算法的核心在于生成一棵決策樹過程中,如何劃分各個特征到樹的不同分支上去。
CART算法是根據基尼系數(Gini)來劃分特征的,每次選擇基尼系數最小的特征作為最優切分點。

其中基尼系數的計算方法:gini(p)=∑ni=1pi(1?pi)=1?∑ni=1p2igini(p)=∑i=1npi(1?pi)=1?∑i=1npi2

2. 創建樣本數據

這次的回歸樣本數據,我們用?scikit-learn?自帶的玩具數據集中的糖尿病數據集
關于玩具數據集的內容,可以參考:TODO

from sklearn.datasets import load_diabetes# 糖尿病數據集
diabetes = load_diabetes()
X = diabetes.data
y = diabetes.target

這個數據集中大約有400多條數據。

3. 模型訓練

訓練之前,為了減少算法誤差,先對數據進行標準化處理。

from sklearn import preprocessing as pp# 數據標準化
X = pp.scale(X)
y = pp.scale(y)

接下來分割訓練集測試集

from sklearn.model_selection import train_test_split# 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)

然后用scikit-learn中的DecisionTreeRegressor模型來訓練:

from sklearn.tree import DecisionTreeRegressor# 定義決策樹回歸模型
reg = DecisionTreeRegressor(max_depth=2)# 訓練模型
reg.fit(X_train, y_train)# 在測試集上進行預測
y_pred = reg.predict(X_test)

DecisionTreeRegressor的主要參數包括:

  1. criterion:用于衡量節點劃分質量的指標。可以選擇的值有'mse'(均方誤差)或'mae'(平均絕對誤差)。默認值為'mse',適用于大多數情況。
  2. splitter:用于決定節點如何進行劃分的策略。可以選擇的值有'best'(選擇最佳劃分)或'random'(隨機劃分)。默認值為'best'。
  3. max_depth:決策樹的最大深度。默認值為None,表示不限制最大深度。增加最大深度有助于更好地擬合訓練數據,但可能導致過擬合。
  4. random_state:用于設置隨機數生成器的種子。默認值為None,表示使用隨機數生成器。
  5. ccp_alpha:用于控制正則化強度的參數。默認值為None,表示不進行正則化。
  6. max_samples:用于控制每個節點最少需要多少樣本才能進行分裂。默認值為None,表示使用整個數據集。
  7. min_samples_split:用于控制每個節點最少需要多少樣本才能進行分裂。默認值為2,表示每個節點至少需要2個樣本才能進行分裂。
  8. min_samples_leaf:用于控制每個葉子節點最少需要多少樣本才能停止分裂。默認值為1,表示每個葉子節點至少需要1個樣本才能停止分裂。
  9. min_weight_fraction_leaf:用于控制每個葉子節點最少需要多少樣本的權重才能停止分裂。默認值為0.0,表示每個葉子節點至少需要0個樣本的權重才能停止分裂。
  10. max_features:用于控制每個節點最多需要考慮多少個特征進行分裂。默認值為None,表示使用所有特征。
  11. max_leaf_nodes:用于控制決策樹最多有多少個葉子節點。默認值為None,表示不限制葉子節點的數量。
  12. min_impurity_decrease:用于控制每個節點最少需要減少多少不純度才能進行分裂。默認值為0.0,表示每個節點至少需要減少0個不純度才能進行分裂。
  13. min_impurity_split:用于控制每個葉子節點最少需要減少多少不純度才能停止分裂。默認值為None,表示使用min_impurity_decrease參數。
  14. class_weight:用于設置類別權重的字典或方法。默認值為None,表示使用均勻權重。

最后驗證模型的訓練效果:

from sklearn import metrics# 在測試集上進行預測
y_pred = reg.predict(X_test)mse, r2, m_error = 0.0, 0.0, 0.0
y_pred = reg.predict(X_test)
mse = metrics.mean_squared_error(y_test, y_pred)
r2 = metrics.r2_score(y_test, y_pred)
m_error = metrics.median_absolute_error(y_test, y_pred)print("均方誤差:{}".format(mse))
print("復相關系數:{}".format(r2))
print("中位數絕對誤差:{}".format(m_error))# 運行結果
均方誤差:0.5973573097746598
復相關系數:0.5153160857515913
中位數絕對誤差:0.5496418600646286

從預測的誤差來看,訓練的效果還不錯
這里用DecisionTreeRegressor訓練模型時使用了參數max_depth=2
我從max_depth=1逐個嘗試到了max_depth=10,發現max_depth=2時誤差最小。

4. 總結

決策樹回歸具有直觀、易于理解、易于實現等優點。
生成的決策樹可以直觀地展示出輸入特征與輸出結果之間的關系,因此對于非專業人士來說也易于理解。
此外,決策樹回歸算法相對簡單,易于實現,且對數據的預處理要求較低。

然而,決策樹回歸也存在一些缺點。
首先,它容易過擬合訓練數據,特別是當訓練數據量較小時;
其次,決策樹的性能受劃分標準選擇的影響較大,不同的劃分標準可能會導致生成的決策樹性能差異較大;
此外,決策樹回歸在處理大規模數據時可能會比較耗時,因為需要遍歷整個數據集進行訓練和預測。

關注靈活就業新業態,了解更多程序員兼職項目,關注公賬號:賢才寶(賢才寶https://www.51xcbw.com)?

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

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

相關文章

解決安卓開發“No Android devices detected.”問題

解決安卓開發“No Android devices detected.”問題 ? 當我們插入移動設備的USB時,卻發現這并未顯示已連接到的設備 點擊右側的Assistant,根據提示打開移動設備開發者模式并啟用USB調試模式,然后發現我們未連接到移動設備的原因是ABD服務的原因 問題確定了&…

idea如何使用git

在 IntelliJ IDEA 中使用 Git 的詳細步驟如下,分為配置、基礎操作和高級功能,適合新手快速上手: ?一、配置 Git? ?安裝 Git? 下載并安裝 Git,安裝時勾選“Add to PATH”。驗證安裝:終端輸入 git --version 顯示版本…

軟件架構設計:MVC、MVP、MVVM、RIA 四大風格優劣剖析

MVC、MVP、MVVM 和 RIA 都是軟件架構中常見的設計風格,以下是對它們的詳細介紹: 一、MVC 架構風格(Model - View - Controller) 1.簡介:MVC 架構風格將軟件應用程序分為三個核心部分,通過這種劃分來分離不…

Centos/RedHat 7.x服務器掛載ISCSI存儲示例(無多路徑非LVM)

客戶讓幫忙掛載個ISCSI存儲,大概結構如下圖所示: ISCSI存儲為一臺安裝了truenas的X86服務器,提供存儲服務的IP地址為10.16.0.1 服務器的ETH1網卡配置與10.16.0.1同段網絡。 為了給客戶做個簡單培訓,整理了一下操作步驟。下面是配…

TV板卡維修技術【二】

【一】測量未知MOS引腳定義的好壞 TO-252封裝的MOS管子,上面的大焊盤是D極,下面的3個不同品牌的NMOS或者PMOS驗證了這個結論: 利用這個特性,可以在不知道MOS引腳定義的情況下測量出MOS的好壞,如下圖: 插件…

基于 cefpython 實現嵌入 Chromium (CEF)

CEF Python是一個開源項目,旨在為Chromium Embedded Framework提供Python綁定,許多流行的GUI工具包都提供了嵌入CEF瀏覽器,例如QT。 安裝 pip install cefpython366.1支持的Python版本: 實現打開網頁 from cefpython3 import…

MySQL-存儲引擎和索引

1.MySQL的基礎架構是什么? MySQL由連接器、分析器、優化器、執行器和存儲引擎這五部分構成。 一條SQL的執行流程: 通過連接器連接數據庫,檢查用戶名和密碼,以及權限校驗,是否有增刪改查的權限。在MySQL8.0之前&#…

安卓性能調優之-掉幀測試

掉幀指的是某一幀沒有在規定時間內完成渲染,導致 UI 畫面不流暢,產生視覺上的卡頓、跳幀現象。 Android目標幀率: 一般情況下,Android設備的屏幕刷新率是60Hz,即每秒需要渲染60幀(Frame Per Second, FPS&a…

【運維自動化-標準運維】職能化功能如何使用?

職能化功能主要用于一些固化的標準流程可以通過權限開放的方式給到那些負責固定職能的非運維人員,比如外包操作員來執行操作,如此可以釋放一些運維的人力,讓其可以專注流程的建設和優化。實操演示 新建職能化流程(運維角色操作&a…

游戲引擎學習第224天

回顧游戲運行并指出一個明顯的圖像問題。 回顧一下之前那個算法 我們今天要做一點預加載的處理。上周剛完成了游戲序章部分的所有剪輯內容。在運行這一部分時,如果觀察得足夠仔細,就會注意到一個問題。雖然因為視頻流壓縮質量較低,很難清楚…

【小沐學GIS】基于C++繪制三維數字地球Earth(QT5、OpenGL、GIS、衛星)第五期

🍺三維數字地球系列相關文章如下🍺:1【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第一期2【小沐學GIS】基于C繪制三維數字地球Earth(OpenGL、glfw、glut)第二期3【小沐學GIS】…

OpenAI 最新發布的 GPT-4.1 系列在 API 中正式上線

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

【力扣】day1

文章目錄 27.移除元素26. 刪除有序數組的重復項 27.移除元素 26. 刪除有序數組的重復項 我們仔細看一下這兩道題的最后的返回值,為什么第一題返回slow 而第二題返回slow1 最后的返回值該如何返回絕對不是憑感覺,我們自己分析一下第一個slow,從0位置開始, 遇到val值就開始和fas…

完全無網絡環境的 openEuler 系統離線安裝 ClamAV 的詳細步驟

準備工作(在外網機器操作) 1. 下載 ClamAV RPM 包及依賴 mkdir -p ~/clamav-offline/packages cd ~/clamav-offline/packages# 使用 yumdownloader 下載所有依賴包(需提前安裝 yum-utils) sudo dnf install yum-utils -y sudo y…

3.2.2.2 Spring Boot配置視圖控制器

在Spring Boot中配置視圖控制器可以簡化頁面跳轉跳邏輯。通過實現WebMvcConfigurer接口的addViewControllers方法,可以直接將URL映射到特定的視圖,而無需編寫控制器類。例如,將根路徑"/"映射到welcome.html視圖,當訪問應…

數據庫—函數筆記

一,數據庫函數的分類 內置函數(Built-in Functions) 數據庫系統自帶的函數,無需額外定義即可直接調用。 聚合函數:對數據集進行計算(如 SUM, AVG, COUNT)。 字符串函數:處理文本數據…

YOLOv2訓練詳細實踐指南

1. YOLOv2架構與原理詳解 1.1 核心改進點 YOLOv2相比YOLOv1的主要改進: 采用Darknet-19作為backbone(相比VGG更高效)引入Batch Normalization提高穩定性與收斂速度使用anchor boxes機制代替直接預測邊界框引入維度聚類確定anchor boxes尺寸…

詳解如何復現DeepSeek R1:從零開始利用Python構建

DeepSeek R1 的整個訓練過程,說白了就是在其基礎模型(也就是 deepseek V3)之上,用各種不同的強化學習方法來“雕琢”它。 咱們從一個小小的本地運行的基礎模型開始,一邊跟著 DeepSeek R1 技術報告 的步驟,…

MCP Server 開發實戰 | 大模型無縫對接 Grafana

前言 隨著大模型的飛速發展,越來越多的 AI 創新顛覆了過往很多產品的使用體驗。但你是否曾想過,在向大型語言模型提問時,它能否根據你的需求精準返回系統中的對應數據?例如,當用戶查詢 Grafana 服務時,模型…

塊存儲、文件存儲和對象存儲的特點、應用場景及區別

塊存儲、文件存儲和對象存儲的特點、應用場景及區別 塊存儲 特點:塊存儲將數據分割成固定大小的塊,每個塊都有唯一的標識符。數據以塊為單位進行讀寫操作,適合需要高性能和低延遲的場景。 應用場景:數據庫存儲、虛擬機磁盤、高性能…