隨機森林實戰:在鳶尾花數據集上與決策樹和邏輯斯蒂回歸進行對比

前言

集成學習通過組合多個模型的優勢,常能獲得比單一模型更優的性能,隨機森林便是其中的典型代表。它基于 Bagging 思想,通過對樣本和特征的雙重隨機采樣,構建多棵決策樹并綜合其結果,在降低過擬合風險的同時,顯著提升了模型的穩定性與泛化能力。

本文將從隨機森林的核心原理出發,結合實戰案例對比其與單棵決策樹、邏輯回歸的性能差異,通過可視化拆解森林內部結構,并總結其優缺點與適用場景,幫助讀者快速掌握這一強大算法的核心邏輯與應用方法。

1、隨機森林介紹

Bagging 思想 + 決策樹就誕生了隨機森林(Random Forest)。它通過構建多棵決策樹并綜合其結果,顯著提升了模型的泛化能力和穩定性。

隨機森林,都有哪些隨機?

  • 樣本隨機:在構建每棵決策樹時,采用有放回的隨機抽樣(bootstrap 抽樣)從原始數據集中選取訓練樣本
  • 特征隨機:在每個決策樹節點分裂時,隨機選擇部分特征子集,僅從該子集中尋找最優分裂條件

這種雙重隨機性使得森林中的每棵樹都具有一定的差異性,有效降低了單棵決策樹容易過擬合的風險,同時通過多棵樹的集體決策提高了預測的準確性和穩定性。

隨機森林的工作流程可概括為:

  • 從原始數據集中通過 bootstrap 抽樣生成多個不同的訓練子集

  • 為每個子集構建一棵決策樹,樹的每個節點僅使用隨機選擇的部分特征

  • 對于分類問題,通過投票機制綜合所有樹的預測結果;對于回歸問題,則取所有樹預測值的平均值

2、隨機森林實戰

本章將通過具體的代碼實現,在經典的鳶尾花數據集上開展實戰實驗,直觀對比隨機森林與單棵決策樹、邏輯斯蒂回歸的性能差異。

2.1、導包加載數據

import numpy as np
from sklearn import tree
from sklearn import datasets
from sklearn.model_selection import train_test_split
import graphviz
# ensemble 集成
# 隨機森林
from sklearn.ensemble import RandomForestClassifier
# 作為對照
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
# 加載數據
X,y = datasets.load_iris(return_X_y=True)
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 112)

2.2、普通決策樹

score = 0
for i in range(100):X_train,X_test,y_train,y_test = train_test_split(X,y)model = DecisionTreeClassifier()model.fit(X_train,y_train)score += model.score(X_test,y_test)/100
print('隨機森林平均準確率是:',score)

單棵決策樹的性能受訓練數據分割和樹結構影響較大,多次運行的結果通常會有較大波動。

2.3、隨機森林(運行時間稍長)

score = 0
for i in range(100):X_train,X_test,y_train,y_test = train_test_split(X,y)model = RandomForestClassifier()model.fit(X_train,y_train)score += model.score(X_test,y_test)/100
print('隨機森林平均準確率是:',score)

結論:

  • 和決策樹對比發現,隨機森林分數稍高,結果穩定
  • 隨機森林通過集成多棵樹的預測,有效降低了模型的方差,減少了過擬合風險
  • 這種穩定性在數據集較小時尤為明顯

2.4、邏輯斯蒂回歸

import warnings
warnings.filterwarnings('ignore')
score = 0
for i in range(100):X_train,X_test,y_train,y_test = train_test_split(X,y)lr = LogisticRegression()lr.fit(X_train,y_train)score += lr.score(X_test,y_test)/100
print('邏輯斯蒂回歸平均準確率是:',score)

結論:

  • 不同算法對特定數據集的適應性不同,邏輯斯蒂回歸在鳶尾花數據集上表現優秀
  • 隨機森林作為一種強大的通用算法,在各類數據集上通常都能取得良好表現
  • 實際應用中應嘗試多種算法并選擇最適合當前問題的模型

3、隨機森林可視化

3.1、創建隨機森林進行預測

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 9)
forest = RandomForestClassifier(n_estimators=100,criterion='gini')
forest.fit(X_train,y_train)
score1 = round(forest.score(X_test,y_test),4)
print('隨機森林準確率:',score1)
print(forest.predict_proba(X_test))

隨機森林的predict_proba方法返回每個樣本屬于各個類別的概率,這是通過綜合所有決策樹的預測結果得到的。

準確率為1.0:

3.2、對比決策樹

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 112)
model = DecisionTreeClassifier()
model.fit(X_train,y_train)
print('決策樹準確率:',model.score(X_test,y_test))
proba_ = model.predict_proba(X_test)
print(proba_)

準確率為1.0:

總結:

  • 一般情況下,隨機森林比決策樹更加優秀
  • 隨機森林的predict_proba()返回的是概率分布(如 0.97),反映了模型對預測結果的置信度
  • 單棵決策樹的predict_proba()返回的是確定值(0 或 1),因為每個樣本最終只會落入一個葉節點

3.3、繪制決策樹

隨機森林由多棵決策樹組成,我們可以查看其中的部分樹來理解森林的多樣性:

# 第一顆樹類別
dot_data = tree.export_graphviz(forest[0],filled=True)
graph = graphviz.Source(dot_data)
graph

# 第五十顆樹類別
dot_data = tree.export_graphviz(forest[49],filled=True)
graph = graphviz.Source(dot_data)
graph

# 第100顆樹類別
dot_data = tree.export_graphviz(forest[-1],filled=True)
graph = graphviz.Source(dot_data)
graph

通過對比可以發現,隨機森林中的不同決策樹在結構和分裂條件上存在差異,這種多樣性是隨機森林能夠提高預測性能的關鍵。

4、隨機森林總結

隨機森林主要步驟:

  • 隨機選擇樣本:采用有放回抽樣(bootstrap)從原始數據集中生成多個訓練樣本集。
  • 隨機選擇特征:每棵樹的每個節點分裂時,僅從隨機選擇的特征子集中尋找最優分裂條件。
  • 構建決策樹:為每個樣本集構建一棵決策樹,不進行剪枝。
  • 綜合結果:分類問題采用多數投票機制,回歸問題采用平均值。

優點:

  • 泛化能力強:通過集成多棵樹的預測,有效降低了過擬合風險
  • 處理高維數據:特征隨機選擇機制使模型能高效處理高維度數據
  • 特征重要性評估:可以輸出特征重要性分數,輔助特征選擇和數據理解
  • 并行計算:樹的構建過程相互獨立,可并行計算,提高訓練效率
  • 對缺失值和異常值不敏感:相比其他算法具有更強的魯棒性
  • 適用范圍廣:既可用于分類問題,也可用于回歸問題

缺點:

  • 計算成本較高:構建多棵樹需要更多計算資源和時間
  • 模型解釋性差:雖然單棵樹易于解釋,但多棵樹的集成結果難以直觀解釋
  • 對噪聲數據敏感:對于噪聲過大的數據,仍有可能出現過擬合
  • 內存占用較大:存儲多棵決策樹需要更多內存空間

參數調優關鍵:

  • n_estimators:森林中樹的數量,通常越大性能越好,但計算成本也越高。
  • max_features:每個節點分裂時考慮的最大特征數,控制特征隨機性。
  • max_depth:樹的最大深度,控制樹的復雜度,防止過擬合。
  • min_samples_split:分裂內部節點所需的最小樣本數。
  • min_samples_leaf:葉節點所需的最小樣本數。

隨機森林作為一種強大而實用的算法,在數據挖掘、機器學習競賽和工業界都有廣泛應用,是解決分類和回歸問題的首選算法之一。

經過本章的實戰對比,隨機森林的優勢已然清晰:相比單棵決策樹,它用集成的力量提升了穩定性與準確率;面對邏輯斯蒂回歸,也展現出強勁的競爭力。

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

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

相關文章

(計算機網絡)TCP 三握中第三次 ACK 丟失會發生什么?

在 TCP 的三次握手過程中,如果 第三次 ACK 丟失,TCP 是如何保證連接可靠建立的呢?1?? 場景說明第三次 ACK:客戶端發送給服務器的 ACK,確認服務器的 SYN-ACK。假設該 ACK 在網絡傳輸過程中丟失。2?? 客戶端狀態客戶…

容智Report Agent2.0重磅發布!重新定義企業數據分析AI時代

在數據成為生產要素之一的今天,很多企業依然面臨這樣的困境: 想要一份年度財務分析,財務團隊可能要忙半個月甚至一個月;想查一個業務指標,要先找出在哪個系統,再申請權限、寫SQL、調報表,折騰半…

高階數據結構---ST表

hello大家好,今天是2025年8月23日,我要來給大家分享的是一個高階數據結構---ST表。 一:引入 1.RMQ問題: 對于一個長度為 n 的序列,有 m 次查詢操作,每次查詢為一個區間 [l,r] 的最大值&#…

docker 安裝nacos(vL2.5.0)

查找nacos 的所需的鏡像版本 https://hub.docker.com/r/nacos/nacos-server/tags 拉取你所需的版本(我們用v2.5.0) docker pull nacos/nacos-server:v2.5.0 注意:因為我們需要掛載外配置文件 直接用volume 掛載目錄 缺少初始文件報錯 我們…

在github上通過dmca數字版權申訴侵權并刪除侵權倉庫

DMCA是什么? 《數字千年版權法案》(DMCA)為版權所有者(包括軟件開發人員)創建了一個標準化的流程,要求GitHub刪除侵權內容。您可以在美國版權局的官方網站上找到有關DMCA的更多信息。有關GitHub如何處理DM…

AI安全監控與人才需求的時間悖論(對AI安全模型、AI安全人才需求的一些思考)

當監控者與被監控者都是AI時,誰來監控監控者?這個看似簡單的問題,卻揭示了人工智能安全領域的根本性困境。一、問題的提出:當AI監控AI 隨著大語言模型和生成式AI的快速發展,AI系統在元認知層面的能力越來越強&#xff…

AI模型部署 - 大型語言模型(LLM)推理部署中的實際顯存評估

目錄 第一部分:大型語言模型(LLM)推理顯存占用的核心原理 1.1 顯存占用的主要構成部分 1.2 影響顯存占用的關鍵因素 1.2.1 模型架構:MoE vs. 稠密模型 1.2.2 上下文長度與并發數 1.2.3 部署方式與推理框架 1.2.4 硬件能力 第二部分:顯存占用的精確計算方法 2.1 模…

【大語言模型 16】Transformer三種架構深度對比:選擇最適合你的模型架構

【大語言模型 16】Transformer三種架構深度對比:選擇最適合你的模型架構 關鍵詞:Transformer架構,Encoder-Only,Decoder-Only,Encoder-Decoder,BERT,GPT,T5,模型選擇&…

【LeetCode 熱題 100】31. 下一個排列

Problem: 31. 下一個排列 文章目錄整體思路完整代碼時空復雜度時間復雜度:O(N)空間復雜度:O(1)整體思路 這段代碼旨在解決經典的 “下一個排列” (Next Permutation) 問題。問題要求重新排列一個整數數組,使其變為字典序上的下一個更大的排列…

【Linux 進程】進程程序替換

文章目錄1.進程替換的六個庫函數2.execl1.進程替換的六個庫函數 使用 man 3 execl 進行查詢,3表示 Linux 中的3號手冊,即為庫函數(例如C標準庫中的庫函數,printf,malloc) man 1: 用戶命令(在sh…

ReasonRank: Empowering Passage Ranking with Strong Reasoning Ability

主要內容總結 本文提出了一種具有強推理能力的列表式段落重排序模型ReasonRank,旨在解決現有重排序模型在推理密集型場景(如復雜問答、數學問題、代碼查詢等)中表現不佳的問題,核心原因是這類場景缺乏高質量的推理密集型訓練數據。 為解決這一問題,研究團隊: 設計了自動…

不卡頓、不掉線!穩定可靠的體育賽事直播系統源碼解析

在體育和電競行業,實時直播系統已經成為平臺的標配。無論是 OTT、比分直播網站,還是綜合類體育社區,用戶對直播體驗的要求越來越高:不卡頓、不掉線、實時性強。那么,從技術角度出發,一個穩定可靠的 體育賽事…

三菱FX5U PLC訪問字變量的某一位

三菱FX5U PLC氣缸控制功能塊 三菱FX5U氣缸控制功能塊(完整ST源代碼+示例程序)_三菱fx5u標簽氣缸報警程序功能塊-CSDN博客文章瀏覽閱讀560次,點贊5次,收藏2次。如果機器包含100個氣缸,我們只需要修改數組的元素數量就可以了,效率非常的高。待續....博途PLC 面向對象系列之“…

Java大廠面試全真模擬:從Spring Boot到微服務架構實戰

Java大廠面試全真模擬:從Spring Boot到微服務架構實戰 面試場景:某互聯網大廠Java后端崗位,候選人謝飛機(水貨程序員) 第一輪:基礎與框架認知 面試官:你好,謝飛機,先簡單…

Unity游戲打包——Mac基本環境雜記

1、安裝 Homebrew若未安裝,在使用 brew 命令時將提示 zsh: command not found: brew安裝命令:/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"2、更換終端默認 Shell 為 zsh查看已安裝的shell&#…

服務組件體系結構(SCA)全景解析

服務組件體系結構(SCA)全景解析SCA(Service Component Architecture)是 SOA 生態中專門用來“把服務拼起來并跑起來”的規范。它通過語言中立、協議可插拔、裝配聲明式三大能力,把“接口—實現—協議”徹底解耦&#x…

問:單證碩士含金量是否不足?

很多人認為花幾萬塊錢讀一個同等學歷申碩,含金量并沒有那么高,但事實卻并非如此。今天我們從證書和學習的兩個方面來聊一下同等學歷申碩的含金量到底是如何的。一、單證含金量看以下幾點:(1)國家認證與學信網可查 …

0.04% vs 0.1%:精度差一點,逆變器性能差距有多大?

一臺光伏逆變器損失的功率可能僅僅源于0.3%的MPPT效率差距。這個足以影響產品競爭力的數字,可能并非算法優劣,而在于測試源頭的精度選擇:是0.04%還是0.1%?本文通過四大測試場景的量化對比,揭示不同的測試精度如何影響產…

Docker Hub 鏡像一鍵同步至阿里云 ACR

🐳 Docker Hub 鏡像一鍵同步至阿里云 ACR 本腳本用于 從 Docker Hub 拉取鏡像并推送到阿里云容器鏡像服務(ACR)。 它通過 Python 的 docker SDK 封裝了完整流程:拉取 → 重命名 → 登錄 → 推送,并在控制臺實時輸出進度…

軟考-系統架構設計師 計算機系統基礎知識詳細講解

個人博客:blogs.wurp.top 一、計算機系統組成與多級層次結構 1. 馮諾依曼體系結構 (核心考點) 這是所有現代計算機的理論基礎。核心思想是 “存儲程序” 。 五大部件:運算器、控制器、存儲器、輸入設備、輸出設備。工作流程:指令驅動。CP…