【機器學習系列】掌握隨機森林:從基礎原理到參數優化的全面指南

目錄

目錄

一、隨機森林簡介

(一)隨機森林模型的基本原理如下:

(二)隨機森林模型的優點包括:

(三)森林中的樹的生成規則如下:

(四)在隨機森林中,每棵樹都使用不同的訓練集進行訓練,原因如下

隨機森林的分類性能(即錯誤率)受以下兩個關鍵因素影響:

參數介紹

二、導入數據集

三、對數據進行獨熱編碼轉換

四、選擇特征x和標簽y

五、導入隨機森林模塊并實例化

?六、網格搜索法查找最優參數

一、隨機森林簡介

隨機森林(Random Forest)是一種集成學習(Ensemble Learning)方法,由 Leo Breiman 在2001年提出。隨機森林是一種決策樹(Decision Tree)的集成,它通過構建許多決策樹并結合它們的預測結果來提高模型的準確性和穩定性。

(一)隨機森林模型的基本原理如下:

  1. 個體模型(Base Estimator):隨機森林使用決策樹作為基本的學習單元。每個決策樹都是一個獨立的分類或回歸模型。

  2. 特征子集(Random Subspace):在構建每棵樹時,隨機森林從原始特征集中隨機抽取一個子集,這個子集的大小通常小于全部特征數。這樣可以減少特征之間的相關性,提高模型的多樣性。

  3. 樣本子集(Bootstrap Aggregating,Bagging):在構建每棵樹時,隨機森林使用從原始樣本集中隨機抽取的子集(Bootstrap樣本),這稱為自助采樣(Bootstrap Sampling)。這樣可以減少模型對訓練數據的依賴,提高模型的穩健性。

  4. 隨機性(Randomness):除了特征子集和樣本子集,隨機森林在每個節點分裂時也會隨機選擇一個最優特征進行分裂,進一步增加了模型的隨機性。

  5. 集成預測:最后,隨機森林通過投票(對于分類問題)或平均(對于回歸問題)來確定最終的預測結果,這提高了模型的預測性能和泛化能力。

(二)隨機森林模型的優點包括:

  • 可以處理高維數據和大量特征。
  • 可以處理缺失值。
  • 自動進行特征選擇,通過特征的重要性評估。
  • 不容易過擬合,因為多個決策樹的隨機性和多樣性有助于降低過擬合的風險。

隨機森林廣泛應用于各種機器學習任務,如分類、回歸、特征選擇和異常檢測等,特別是在數據具有復雜關系和非線性關系的情況下,表現得尤為出色。

(三)森林中的樹的生成規則如下:

1)對于每棵樹,我們使用bootstrap sample方法從訓練集中隨機且有放回地抽取N個訓練樣本作為該樹的訓練集。這樣可以確保每棵樹都有不同的訓練數據,從而提高了模型的多樣性。

2)在每個樣本的特征維度為M的情況下,我們指定一個常數m(m遠小于M),并從M個特征中隨機選取m個特征子集。每次樹進行分裂時,我們從這m個特征中選擇最優的特征進行分裂。這種方法可以降低模型的復雜度,提高計算效率。

3)每棵樹都盡最大程度的生長,并且沒有剪枝過程。這樣可以讓每棵樹盡可能地擬合訓練數據,從而提高模型的預測能力。同時,由于我們使用了bootstrap sample方法和隨機特征選擇,所以即使沒有剪枝過程,也不會導致過擬合問題。

(四)在隨機森林中,每棵樹都使用不同的訓練集進行訓練,原因如下

1)隨機抽樣訓練集:如果不進行隨機抽樣,那么每棵樹的訓練集都會完全相同,導致所有樹的分類結果也都會相同。這樣,整個模型就失去了集成學習的意義,因為集成學習的核心在于通過結合多個不同的模型來提高整體的預測性能。

2)有放回地抽樣:如果采用無放回的抽樣,每棵樹的訓練樣本將完全不同,這會導致每棵樹都是從一個“片面”的視角進行學習,從而使得每棵樹的預測結果存在較大的差異。隨機森林的最終預測是通過對多棵樹的預測結果進行投票或平均得到的,這種“求同”的策略旨在綜合多個模型的觀點,以獲得更準確、更穩定的預測。因此,使用完全不同的訓練集來訓練每棵樹并不利于最終的分類結果,這類似于“盲人摸象”,每個模型只了解問題的一部分,無法全面地理解問題。

通過有放回地重新抽樣,我們可以確保每棵樹的訓練集都有所不同,但同時又有一定的重疊,這樣既保證了模型的多樣性,又使得每棵樹都能從整體上對問題有一個較為全面的理解。這種策略有助于提高隨機森林的整體預測性能,使其更加穩健和可靠。

?

隨機森林的分類性能(即錯誤率)受以下兩個關鍵因素影響:

1)森林中任意兩棵樹的相關性:如果森林中的決策樹之間具有較高的相關性,這意味著它們在對數據進行分類時往往會出現相似的錯誤,從而無法通過集成方法有效地降低錯誤率。因此,樹與樹之間的相關性越高,整個森林的錯誤率也就越大。

2)森林中每棵樹的分類能力:另一方面,如果森林中的每一棵樹都具備較強的分類能力,那么整個森林在集成這些樹的預測結果時,錯誤率自然會降低。因此,提高單棵樹的分類能力對于降低整個森林的錯誤率至關重要。

為了優化隨機森林的性能,需要在保持樹與樹之間低相關性的同時,確保每棵樹都具有較強的分類能力。這可以通過調整隨機森林的參數來實現,例如增加樹的數量、調整樹的深度、改變葉節點的最小樣本數等。通過精細地調整這些參數,可以在降低模型錯誤率的同時,提高其整體的泛化能力。

關鍵點:

減小特征選擇個數m,樹的相關性和分類能力也會相應的降低;增大m,兩者也會隨之增大。所以關鍵是如何選擇最優的m(或者是范圍),這也是隨機森林唯一的一個參數。

參數介紹

RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None,
? ? ? ? ? ? ? ? ? ? ? ?min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,?
? ? ? ? ? ? ? ? ? ? ? ?max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0,
? ? ? ? ? ? ? ? ? ? ? ?min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=1,
? ? ? ? ? ? ? ? ? ? ? ?random_state=None,verbose=0, warm_start=False, class_weight=None)
?

參數介紹參考了機器學習5—分類算法之隨機森林(Random Forest)_隨機森林分類-CSDN博客?這篇博客

n_estimators:數值型取值
? ? 含義:森林中決策樹的個數,默認是10
? ??
criterion:字符型取值
? ? 含義:采用何種方法度量分裂質量,信息熵或者基尼指數,默認是基尼指數

max_features:?通常情況下取值為int型, float型。
? ? 含義:用于控制在構建每棵決策樹時從原始特征集中隨機選擇的特征子集的大小。
? ? int:表示在構建每棵決策樹時從全部特征中隨機選擇的特征數。例如,如果?max_features=4,則每棵決策樹在構建時從全部特征中隨機選擇 4 個特征。
? ? float:表示在構建每棵決策樹時從全部特征中隨機選擇的特征數的比例。例如,如果?max_features=0.5,則每棵決策樹在構建時從全部特征中隨機選擇 50% 的特征。

max_depth:int型取值或者None,默認為None
? ? 含義:樹的最大深度

min_samples_split:int型取值,float型取值,默認為2
? ? 含義:分割內部節點所需的最少樣本數量
? ? int:如果是int值,則就是這個int值
? ? float:如果是float值,則為min_samples_split * n_samples

min_samples_leaf:int取值,float取值,默認為1


? ? 含義:葉子節點上包含的樣本最小值
? ? int:就是這個int值
? ? float:min_samples_leaf * n_samples

min_weight_fraction_leaf : float,default=0.
? ? 含義:能成為葉子節點的條件是:該節點對應的實例數和總樣本數的比值,至少大于這個min_weight_fraction_leaf值

max_leaf_nodes:int類型,或者None(默認None)
? ? 含義:最大葉子節點數

min_impurity_split:float取值?
? ? 含義:它用于控制決策樹的早停規則。具體來說,這個參數定義了一個節點在分裂之前必須達到的最小不純度閾值。

在決策樹的構建過程中,如果一個節點的信息增益(或基尼不純度減少)小于?min_impurity_split?設定的閾值,那么這個節點將不再進行分裂,而是被視為一個葉節點。這樣做的目的是為了防止樹的過度生長,從而減少過擬合的風險。

需要注意的是,在較新的 scikit-learn 版本中,min_impurity_split?參數已經被棄用,取而代之的是?min_impurity_decrease?參數。min_impurity_decrease?的工作原理與?min_impurity_split?類似,但它考慮了分裂后每個子節點的樣本數,提供了更精細的控制。

min_impurity_decrease:float取值,默認0.
? ? 含義:這個參數定義了一個節點在分裂之前必須達到的最小不純度減少量。

bootstrap:布爾類型取值,默認True
? ? 含義:是否采用有放回式的抽樣方式

oob_score:布爾類型取值,默認False
? ? 含義:是否使用袋外樣本來估計該模型大概的準確率

它在隨機森林模型訓練時啟用或禁用一種稱為“袋外(Out-of-Bag,OOB)估計”的特性。

當?oob_score=True?時,隨機森林在構建過程中,每次建立樹時都會隨機抽取一部分樣本(通常為樣本總數的一定比例,如 1/3)作為驗證集,剩下的樣本用于訓練。這樣,每個決策樹都會有一部分樣本(即“袋外”樣本)在訓練過程中未被使用。在每個決策樹訓練完成后,可以使用袋外樣本來評估該樹的性能,比如計算準確率、精確率、召回率等。

通過所有決策樹的袋外樣本評估,我們可以得到一個整體的模型性能估計,即?oob_score。這對于評估模型的泛化能力、選擇合適的參數,以及防止過擬合非常有幫助。oob_score?是一種無監督的模型評估方法,因為它不需要額外的驗證集。

請注意,oob_score?可能會消耗額外的計算資源,尤其是在數據集很大或者樹的數量很多時。如果計算資源有限,可能需要權衡是否開啟這個參數。

也就是說

OOB(Out-of-Bag)評估方法不需要額外的數據集來評估模型的性能。

在訓練一些機器學習模型時,我們通常需要將數據集分成訓練集和驗證集(或測試集)。訓練集用于訓練模型,而驗證集用于評估模型的性能。這種方法被稱為監督式學習(supervised learning),因為我們需要事先知道輸入和輸出之間的關系。

然而,OOB評估方法不需要額外的數據集,因為它在訓練過程中自動地將一部分數據抽出作為袋外樣本。這些袋外樣本在訓練過程中沒有被使用,因此可以用作評估模型性能。這種評估方法不需要額外的數據集,也不需要事先知道輸入和輸出之間的關系,因此被稱為無監督的(unsupervised)。

總之,OOB評估方法是一種在訓練過程中自動生成袋外樣本的方法,可以用來評估隨機森林模型的性能,而無需額外的數據集。

n_jobs:int類型取值,默認1
? ? 含義:擬合和預測過程中并行運用的作業數量。如果為-1,則作業數設置為處理器的core數。

n_jobs?是隨機森林模型中的一個參數,用于控制并行計算的數量。

在訓練隨機森林模型時,會構建多個決策樹。如果?n_jobs?的取值大于 1,則會嘗試使用多個 CPU 核心來并行構建這些決策樹,從而加速訓練過程。具體來說,n_jobs?參數指定了可以并發執行的 CPU 核心數量。

如果?n_jobs?的取值為 -1,則表示使用所有可用的 CPU 核心。如果?n_jobs?的取值為 1,則表示不使用并行計算,只使用一個 CPU 核心來訓練模型。

需要注意的是,如果?n_jobs?的取值大于 1,則可能會增加內存使用量,因為每個 CPU 核心都需要保留一份模型的副本。因此,如果內存有限,可以嘗試降低?n_jobs?的取值,以減少內存使用量。

重要:

class_weight:dict, list or dicts, "balanced"
? ? 含義:class_weight?是一個用于處理不平衡數據集的參數。它用于指定分類任務中各個類別的權重,從而幫助模型更好地學習不平衡數據集中的信息。

在不平衡數據集中,某些類別的樣本數量可能遠遠少于其他類別,這可能導致模型在訓練過程中更傾向于預測樣本數量較多的類別,而忽略樣本數量較少的類別。為了解決這個問題,可以使用?class_weight?參數來為不同類別分配不同的權重,使得模型在訓練過程中更加關注樣本數量較少的類別。

class_weight?參數的取值可以是一個字典,其中鍵是類別標簽,值是對應的權重。例如,如果數據集中有兩個類別,類別標簽分別為 0 和 1,可以使用以下方式指定權重:

class_weight = {0: 1, 1: 2}

如果沒有給定這個值,那么所有類別都應該是權重1
? ? 對于多分類問題,可以按照分類結果y的可能取值的順序給出一個list或者dict值,用來指明各類的權重。

class_weight?參數允許用戶為不同的類別設置不同的權重,以此來調整模型對各個類別的關注度。當?class_weight?被設置為?'balanced'?時,模型會自動調整權重,使得權重與每個類別的樣本數成反比。具體來說,如果類別?i?的樣本數為?n_i,那么類別?i?的權重?w_i?將按照以下公式計算:

w_i = n_samples / (n_classes * n_i)
其中?n_samples?是總樣本數,n_classes?是類別總數。

"balanced_subsample"模式和"balanced"模式類似,只是它計算使用的是有放回式的取樣中取得樣本數,而不是總樣本數?

二、導入數據集

import pandasdata = pandas.read_csv('隨機森林.csv', encoding='utf8', engine='python')

三、對數據進行獨熱編碼轉換

import pandas as pd
df = pd.get_dummies(data, columns=['性別',"父母鼓勵"])

四、選擇特征x和標簽y

x=df.drop(["升學計劃"],axis=1)

data['升學計劃'] = data['升學計劃'].replace({'計劃': 1, '不計劃': 0})
y=data["升學計劃"]

五、導入隨機森林模塊并實例化

from sklearn.ensemble import RandomForestClassifierrfClassifier = RandomForestClassifier()

?六、網格搜索法查找最優參數

from sklearn.model_selection import GridSearchCV#網格搜索,尋找最優參數
paramGrid = dict(max_depth=[1, 2, 3, 4, 5],criterion=['gini', 'entropy'],    max_leaf_nodes=[3, 5, 6, 7, 8],n_estimators=[10, 50, 100, 150, 200],   # n_estimators為隨機森林使用的樹的數量,默認是100
)gridSearchCV = GridSearchCV(rfClassifier, paramGrid, cv=10, verbose=1, n_jobs=10,   # verbose 執行過程中調試信息的等級,等級越高,輸出信息越多。n_jobs 并行運算的模型數,默認為1,可根據CPU設置return_train_score=True    # 是否返回訓練得分
)
grid = gridSearchCV.fit(df, y)print('最好的得分是: %f' % grid.best_score_)
print('最好的參數是:')
for key in grid.best_params_.keys():print('%s=%s'%(key, grid.best_params_[key]))

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

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

相關文章

說說影響網絡的因素

1. 物理層面 帶寬 帶寬是指網絡傳輸數據的能力,帶寬越大,網絡能夠傳輸的數據量就越大。 信號強度和干擾 信號強度和干擾對無線網絡尤其重要。信號強度低或干擾嚴重會導致數據丟失、傳輸錯誤和重傳次數增加,從而降低網絡性能。 器件質量 路由…

點賦科技:建設智能飲品高地,打造數字化產業先鋒

在當今數字化時代的浪潮中,點賦科技以其敏銳的洞察力和卓越的創新能力,致力于建設智能飲品高地,打造數字化產業先鋒。 點賦深知智能飲品機對于推動社會進步和滿足人們日益增長的需求的重要性。因此,他們投入大量資源和精力&#x…

2020 6.s081——Lab1:Xv6 and Unix utilities夢開始的地方

一任宮長驍瘦 臺高冰淚難流 錦書送罷驀回首 無余歲可偷 ——知否知否 完整代碼見:6.s081/kernel at util SnowLegend-star/6.s081 (github.com) Lecture 01知識點總結 首先透徹理解Lecture01的知識很是重要 ①pidwait((int *) 0); “wait(int *status)”函數用于…

Python變量用法——單下劃線變量名_

單下劃線變量名_ 在常用的諸多變量中,單下劃線_是比較特殊的一個。它常作為一個無意義的占位符出現在賦值語句中。_這個名字本身沒有什么特別之處,這算是大家約定俗成的一種用法。 舉例,假如你想在解包賦值時忽略某些變量,就可以…

Day54 判斷子序列 + 不同的子序列

392 判斷子序列 題目鏈接:392. 判斷子序列 - 力扣(LeetCode) 給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。 字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成…

記一次服務器數據庫被攻擊勒索

如圖,早上一起來就發現,我的MongoDB數據庫里面的信息全部沒有了,只留下一段話。 大致意思就是:我的數據庫的數據被他們備份然后全部刪掉了,我必須要支付0.0059的bitcoin(折合400美刀)來贖回我的…

Springboot+WebSocket實現消息推送

WebSocket是一種在單個TCP連接上進行全雙工通信的協議。WebSocket通信協議于2011年被IETF定為標準RFC 6455,并由RFC7936補充規范。WebSocketAPI也被W3C定為標準。 WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,允許服務端主動向客戶端推送數…

學習率調整

學習率調整 import mathdef adjust_learning_rate(optimizer, epoch, args):"""Decay the learning rate with half-cycle cosine after warmup"""if epoch < args.warmup_epochs:lr args.lr * epoch / args.warmup_epochs else:lr args.m…

不是,你不會還在用雙層遍歷循環來做新舊數組對比,尋找新增元素吧?

目錄 一、雙層循環遍歷 1.1、雙循環錯誤示范 1.2、正確的做法 ①使用array.includes() ②使用set 二、array.includes()的使用與技巧 2.1、基本語法 2.2、返回值 2.3、使用技巧 2.3.1、用戶輸入驗證 2.3.2、權限檢查 2.4、兼容問題 三、總結 一、雙層循環遍歷 1.…

【重學C語言】十七、預處理指令

【重學C語言】十七、預處理指令 預處理指令預定義宏`#define` 宏定義示例注意事項特殊符號條件編譯頭文件包含`#pragma`預處理指令 C語言中的預處理指令(Preprocessor Directives)是一種特殊的指令,它們在編譯過程的早期階段(即實際編譯之前)被預處理器(Preprocessor)處…

OpenCV學習 基礎圖像操作(十六):圖像距離變換

基礎原理 顧名思義&#xff0c;我們可以利用像素之間的距離作為對該像素的一種刻畫&#xff0c;并將其運用到相應的計算之中。然而&#xff0c;在一幅圖像之中&#xff0c;某種類型的像素并不是唯一的&#xff0c;因此我門常計算的是一類像素到另一類的最小距離&#xff0c;并…

My Spirit | “頂級復盤”

世界不會在意你的自尊&#xff0c; 人們看到的只是你的成就。 在你沒有成就之前&#xff0c; 切勿過分強調自尊。 ——菲茨杰拉德《了不起的蓋茨比》 目錄 My Spirit | “頂級復盤”00 | 日復盤01 | 周復盤2.1 周計劃2.2 周復盤2.3 下步計劃2.4 下步總結 02 | 月復盤2.1 本月目…

香橙派KunPengPro評測

一、引言 二、開箱 2.1、主要包含說明 1、充電器(贈typec-c線) 2、香橙派kunpengpro(已經帶裝好帶散熱器) 3、SD卡(32G)(已經帶裝好系統openEuler 22.03 (LTS-SP3)) (注意&#xff1a;上電接HDMI線可直接用&#xff0c;賬號&#xff1a;openEuler 密碼&#xff1a;openEuler)…

vue使用tailwindcss

安裝依賴 pnpm add -D tailwindcss postcss autoprefixer創建配置文件tailwind.config.js npx tailwindcss init在配置文件content中添加所有模板文件的路徑 /** type {import(tailwindcss).Config} */ export default {content: [./index.html, ./src/**/*.{vue,js,ts,jsx,…

【Linux】開發工具入門指南,輕松掌握你的開發利器

開發工具 1. 軟件包管理器yum1.1 軟件包安裝方式1.2 yum的"三板斧"1.3 yum的周邊 2. 開發工具3. 編輯器vim4. 編譯器gcc、g5. 項目自動化構建工具make、Makefile6. 進度條小程序7. 調試器gdb 1. 軟件包管理器yum 1.1 軟件包安裝方式 源代碼安裝&#xff1a;用戶手動…

微信小程序 npm構建+vant-weaap安裝

微信小程序&#xff1a;工具-npm構建 報錯 解決&#xff1a; 1、新建miniprogram文件后&#xff0c;直接進入到miniprogram目錄&#xff0c;再次執行下面兩個命令&#xff0c;然后再構建npm成功 npm init -y npm install express&#xff08;Node js后端Express開發&#xff…

智慧校園的機遇與挑戰

隨著5G、物聯網、大數據等技能的日漸老練&#xff0c;數字化正在滲透到各行各業中&#xff0c;為事務立異和價值增加供給支撐。在教育職業&#xff0c;運用智能化體系賦能教育辦理越來越受歡迎&#xff0c;教育信息化方針一再出臺&#xff0c;進一步加快了智慧校園落地的腳步。…

Linux - 文件管理高級 sed

3.處理字符 sed ① sed 默認情況下不會修改原文件內容 ② sed 是一種非交互式的編輯器 3.1 工作原理 將原文件一行一行的進行處理&#xff0c;取出一行&#xff0c;放入“模式空間進行處理”&#xff0c;處理完成之后將結果輸出到屏幕上&#xff0c;然后讀取下一行&#xf…

彭濤 | 2024年5月小結

5月份還是蠻有刺激的&#xff0c;做了蠻多的事情&#xff0c;但是沒賺到錢&#xff0c;真是一屯操作猛如虎&#xff0c;一看賬戶0.5。 就喜歡創業這種一天天累死累活還不賺錢的感覺&#xff0c;哈哈哈哈 老規矩簡單說下這個月的情況&#xff0c;如果對你有收獲就最好了。 游學丹…

測繪外業需要注意些什么?

在進行測繪外業時&#xff0c;需要注意的事項涉及多個方面&#xff0c;包括充分的準備工作、合理的設備選擇、精確的操作技巧以及細致的數據處理。下面將具體展開這些要點&#xff1a; 1. 充分準備 - 了解任務要求&#xff1a;在開始外業工作前&#xff0c;需要明確測繪的目…