網(wǎng)站整合discuz論壇石家莊建設(shè)工程信息網(wǎng)官網(wǎng)
鶴壁市浩天電氣有限公司
2026/01/24 15:39:29
網(wǎng)站整合discuz論壇,石家莊建設(shè)工程信息網(wǎng)官網(wǎng),wordpress怎樣添加輪播圖,wordpress get the time隨機森林是一種集成學(xué)習(xí)#xff08;Ensemble Learning#xff09; 算法#xff0c;核心思想是構(gòu)建多個決策樹#xff0c;通過投票或平均的方式輸出結(jié)果#xff0c;以此降低單一決策樹過擬合的風(fēng)險#xff0c;提升模型的泛化能力。它在機器學(xué)習(xí)的分類、回歸、特征重要性評…隨機森林是一種集成學(xué)習(xí)Ensemble Learning算法核心思想是構(gòu)建多個決策樹通過投票或平均的方式輸出結(jié)果以此降低單一決策樹過擬合的風(fēng)險提升模型的泛化能力。它在機器學(xué)習(xí)的分類、回歸、特征重要性評估等任務(wù)中被廣泛應(yīng)用是工業(yè)界和學(xué)術(shù)界最常用的算法之一。一、核心原理“隨機” “森林”隨機森林的 “隨機” 體現(xiàn)在兩個層面“森林” 指由多棵決策樹組成的集合樣本隨機Bootstrap 抽樣從原始訓(xùn)練集中通過有放回抽樣的方式為每一棵決策樹生成一個獨立的訓(xùn)練子集。這樣做的目的是讓每棵決策樹的訓(xùn)練數(shù)據(jù)存在差異避免所有樹都學(xué)習(xí)到相同的特征模式提升模型多樣性。未被抽到的樣本稱為OOBOut-of-Bag樣本可用于無額外驗證集的模型評估。特征隨機隨機子空間在構(gòu)建每一棵決策樹的每個節(jié)點時不是從所有特征中選擇最優(yōu)特征進行劃分而是隨機選擇一部分特征再從這部分特征中選最優(yōu)。例如總共有 100 個特征每棵樹的每個節(jié)點隨機選 10 個特征來劃分。這一步能進一步降低樹與樹之間的相關(guān)性讓森林的 “投票” 更有意義。預(yù)測規(guī)則分類任務(wù)所有決策樹分別預(yù)測類別最終結(jié)果由多數(shù)投票決定得票最多的類別為最終預(yù)測?;貧w任務(wù)所有決策樹分別預(yù)測數(shù)值最終結(jié)果由所有樹預(yù)測值的平均值決定。二、優(yōu)缺點優(yōu)點泛化能力強有效降低過擬合相比單一決策樹在復(fù)雜數(shù)據(jù)集上表現(xiàn)更穩(wěn)定。對噪聲不敏感能處理含噪聲的數(shù)據(jù)集不易受異常值影響。支持高維數(shù)據(jù)無需特征工程如降維也能處理高維數(shù)據(jù)同時可輸出特征重要性幫助篩選關(guān)鍵特征。訓(xùn)練并行化每棵樹的訓(xùn)練相互獨立可利用多核 CPU 并行加速訓(xùn)練效率高。缺點模型解釋性差決策樹本身是 “白盒” 模型但隨機森林由多棵樹組成整體是 “黑盒”難以直觀解釋預(yù)測邏輯。對小樣本數(shù)據(jù)集效果一般樣本量過小時Bootstrap 抽樣可能導(dǎo)致訓(xùn)練集多樣性不足模型性能下降。內(nèi)存占用較大需要存儲多棵決策樹的結(jié)構(gòu)數(shù)據(jù)量大時內(nèi)存消耗較高。三、關(guān)鍵超參數(shù)以 Pythonsklearn為例在使用sklearn.ensemble.RandomForestClassifier分類或RandomForestRegressor回歸時需調(diào)整以下核心超參數(shù)超參數(shù)作用調(diào)優(yōu)建議n_estimators決策樹的數(shù)量通常越大效果越好但達到一定閾值后性能趨于穩(wěn)定太大則會增加訓(xùn)練時間max_depth每棵樹的最大深度限制樹的生長防止過擬合值太小會欠擬合太大則過擬合max_features每個節(jié)點隨機選擇的特征數(shù)分類任務(wù)默認sqrt(n_features)回歸任務(wù)默認n_features可手動調(diào)整為log2(n_features)或具體數(shù)值min_samples_split節(jié)點分裂所需的最小樣本數(shù)樣本數(shù)過少時停止分裂防止過擬合min_samples_leaf葉節(jié)點所需的最小樣本數(shù)葉節(jié)點樣本數(shù)過少時合并提升模型穩(wěn)定性bootstrap是否使用 Bootstrap 抽樣默認True若設(shè)為False則所有樹都用原始訓(xùn)練集訓(xùn)練import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report # 1. 讀取數(shù)據(jù)假設(shè)表格已保存為csv data pd.read_csv(電網(wǎng)電信客戶流失數(shù)據(jù).csv) X data.drop(流失狀態(tài), axis1) y data[流失狀態(tài)] # 2. 劃分訓(xùn)練集/測試集 X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42, stratifyy # 保持標(biāo)簽分布 ) # 3. 初始化隨機森林模型 rf RandomForestClassifier( n_estimators100, # 100棵樹 max_depth8, # 限制樹深度防過擬合 max_featuressqrt, # 特征隨機選擇 n_jobs-1, # 并行訓(xùn)練 random_state42 ) # 4. 訓(xùn)練與預(yù)測 rf.fit(X_train, y_train) y_pred rf.predict(X_test) # 5. 模型評估 print(準(zhǔn)確率, accuracy_score(y_test, y_pred)) print(分類報告
, classification_report(y_test, y_pred)) # 6. 查看關(guān)鍵流失特征 feature_importance pd.DataFrame({ 特征: X.columns, 重要性: rf.feature_importances_ }).sort_values(by重要性, ascendingFalse) print(影響流失的關(guān)鍵特征
, feature_importance.head(5))