優(yōu)化算法改進(jìn)隨機(jī)森林回歸預(yù)測(cè)的MATLAB實(shí)現(xiàn))
如果你正在找“向量加權(quán)優(yōu)化算法優(yōu)化隨機(jī)森林回歸預(yù)測(cè)INFO-RF”的matlab代碼大概率是卡在了這么幾個(gè)環(huán)節(jié)論文里要給隨機(jī)森林調(diào)參但網(wǎng)格搜索太慢手里只有一組默認(rèn)參數(shù)跑出來(lái)的R方總是上不去或者是想找一個(gè)新一點(diǎn)的元啟發(fā)式算法撐門(mén)面讓實(shí)驗(yàn)對(duì)比更有“看頭”。我當(dāng)初做這個(gè)課題時(shí)也是翻遍了各種源碼庫(kù)最后把INFO算法和哈里斯鷹優(yōu)化算法HHO都實(shí)測(cè)了一遍踩了不少坑才把整套流程跑順。這篇就把完整的思路、代碼框架、調(diào)參心得和一個(gè)可直接參考的minimal實(shí)現(xiàn)整理出來(lái)給你省點(diǎn)時(shí)間。這個(gè)方案適合三類(lèi)人一是做回歸預(yù)測(cè)方向的本科生/研究生論文里需要“優(yōu)化X算法機(jī)器學(xué)習(xí)模型”這種組合二是想從零開(kāi)始寫(xiě)元啟發(fā)式算法的matlab初學(xué)者需要一份結(jié)構(gòu)清晰、能跑通的參考代碼三是已經(jīng)在跑RF但精度逼近天花板想換個(gè)角度壓榨模型性能的從業(yè)者??赐昴阒辽倌芘宄翴NFO到底在優(yōu)化什么、隨機(jī)森林哪些參數(shù)值得被優(yōu)化、以及怎么用matlab把它們串起來(lái)。1. 為什么選INFO來(lái)優(yōu)化隨機(jī)森林而不是繼續(xù)用網(wǎng)格搜索1.1 隨機(jī)森林的默認(rèn)參數(shù)遠(yuǎn)不是最優(yōu)解很多教程都說(shuō)隨機(jī)森林“開(kāi)箱即用”“基本不用調(diào)參”這句話(huà)對(duì)分類(lèi)問(wèn)題勉強(qiáng)能站住但對(duì)回歸預(yù)測(cè)就是另一回事了?;貧w任務(wù)里隨機(jī)森林的預(yù)測(cè)誤差來(lái)源主要是方差和偏差的平衡而這直接受樹(shù)的數(shù)量、樹(shù)的深度、葉子節(jié)點(diǎn)最小樣本數(shù)、特征采樣比例這些超參數(shù)影響。默認(rèn)配置下比如matlab的fitensemble或者TreeBagger默認(rèn)參數(shù)樹(shù)的數(shù)量通常是幾十棵max_depth是“無(wú)限制”min_samples_split和min_samples_leaf也不一定適配你的數(shù)據(jù)量。我實(shí)測(cè)過(guò)一組工業(yè)傳感器數(shù)據(jù)數(shù)據(jù)量只有600多條、特征維度20維默認(rèn)參數(shù)跑出來(lái)R方只有0.82左右RMSE高得離譜。后來(lái)把樹(shù)的數(shù)量調(diào)到200、深度限制在15層、最小葉子樣本數(shù)設(shè)為3R方直接跳到0.91。這就是為什么“優(yōu)化”這個(gè)步驟有意義——它不是在花拳繡腿是真的在改模型的上限。1.2 網(wǎng)格搜索為什么不適合RF回歸調(diào)參傳統(tǒng)做法是GridSearchCV在參數(shù)空間里全枚舉。隨機(jī)森林回歸需要調(diào)的超參數(shù)至少有4個(gè)樹(shù)的個(gè)數(shù)、樹(shù)的最大深度、內(nèi)部節(jié)點(diǎn)再劃分所需最小樣本數(shù)、葉子節(jié)點(diǎn)最少樣本數(shù)每個(gè)參數(shù)給5~10個(gè)候選值組合數(shù)就是幾千到上萬(wàn)。RF訓(xùn)練一次還特別吃算力數(shù)據(jù)量大一點(diǎn)一次網(wǎng)格搜索跑上幾個(gè)小時(shí)很正常。更麻煩的是回歸指標(biāo)曲面并不平滑參數(shù)之間還有交互效應(yīng)。比如樹(shù)的數(shù)量和深度同時(shí)增加模型可能從欠擬合變成過(guò)擬合中間的拐點(diǎn)在網(wǎng)格搜索的“粗糙采樣”下經(jīng)常被錯(cuò)過(guò)。元啟發(fā)式算法在這個(gè)場(chǎng)景下的優(yōu)勢(shì)就體現(xiàn)出來(lái)了它不是枚舉而是用“搜索”的方式在參數(shù)空間里找更優(yōu)的落腳點(diǎn)能用相對(duì)少的試驗(yàn)次數(shù)逼近一個(gè)不錯(cuò)的局部最優(yōu)。1.3 INFO和其他優(yōu)化算法相比的定位INFO的完整名稱(chēng)是“基于加權(quán)均值的向量?jī)?yōu)化算法”Weighted Mean of Vectors2022年才提出屬于比較新的元啟發(fā)式算法。它的核心邏輯是用種群中若干較優(yōu)個(gè)體的加權(quán)均值來(lái)指導(dǎo)新個(gè)體的生成有點(diǎn)像“少數(shù)服從多數(shù)、但強(qiáng)者權(quán)重更大”的投票機(jī)制。相比粒子群PSO、遺傳算法GA這些經(jīng)典算法INFO在部分基準(zhǔn)函數(shù)上的收斂速度和尋優(yōu)精度都有優(yōu)勢(shì)這也是很多論文愿意用它的原因——新算法自帶“創(chuàng)新點(diǎn)”屬性。但說(shuō)實(shí)話(huà)不要神化任何優(yōu)化算法。INFO在低維參數(shù)優(yōu)化上表現(xiàn)不錯(cuò)但如果你給它的搜索空間設(shè)置得很離譜比如決策樹(shù)數(shù)量上限5000、特征采樣比例上限0.9它一樣會(huì)跑很久。后面我會(huì)詳細(xì)講怎么設(shè)邊界才合理。2. 在做INFO-RF之前先把這三件事準(zhǔn)備好2.1 回歸預(yù)測(cè)的三類(lèi)評(píng)價(jià)指標(biāo)優(yōu)化算法需要一個(gè)“打分標(biāo)準(zhǔn)”在回歸任務(wù)里通常是三個(gè)指標(biāo)的組合決定系數(shù)R方越大越好、均方根誤差RMSE越小越好、平均絕對(duì)百分比誤差MAPE越小越好。我的建議是以R方為主目標(biāo)RMSE作為輔助。原因很簡(jiǎn)單R方的數(shù)值區(qū)間是0到1直觀且適合畫(huà)收斂曲線(xiàn)RMSE和原始數(shù)據(jù)的量綱相關(guān)具體是多少取決于你的數(shù)據(jù)范圍不好橫向?qū)Ρ?。如果你的?shù)據(jù)里存在明顯的離群點(diǎn)建議再加一個(gè)MAE作為參考避免RMSE被極值帶偏。關(guān)于訓(xùn)練集和測(cè)試集的劃分我用的是經(jīng)典的70%/30%隨機(jī)劃分并且把隨機(jī)種子固定下來(lái)。這個(gè)細(xì)節(jié)很重要因?yàn)樵獑l(fā)式算法有隨機(jī)性數(shù)據(jù)劃分不同會(huì)直接影響優(yōu)化過(guò)程后面對(duì)比不同算法就必須保證它們用同一份數(shù)據(jù)。2.2 特征歸一化必須做但要小心用法隨機(jī)森林本身是可以不歸一化的因?yàn)樗跇?shù)分裂不涉及距離計(jì)算。但你的數(shù)據(jù)如果要同時(shí)做特征選擇或者其他預(yù)處理比如用INFO同時(shí)優(yōu)化“是否選入某特征”這種二值變量歸一化就是必須的。我用的是min-max歸一化公式是(x - min) / (max - min)。有一個(gè)坑要提醒歸一化的參數(shù)min和max必須只從訓(xùn)練集計(jì)算然后用同一套參數(shù)去變換測(cè)試集。如果先對(duì)全量數(shù)據(jù)歸一化再劃分會(huì)造成信息泄漏測(cè)試集的表現(xiàn)會(huì)被虛高審稿人或者導(dǎo)師一眼就能看出來(lái)。2.3 參數(shù)搜索空間的邊界設(shè)定這個(gè)是最容易被忽略但又最關(guān)鍵的一步。我的經(jīng)驗(yàn)參考值如下超參數(shù)下限上限說(shuō)明決策樹(shù)數(shù)量10200超過(guò)200后收益遞減純吃算力最大深度320數(shù)據(jù)量小就設(shè)低一點(diǎn)防過(guò)擬合最小葉子樣本數(shù)110回歸問(wèn)題建議不低于2特征采樣比例0.21.0決策樹(shù)每次分裂的特征比例上限不要設(shè)得太高把決策樹(shù)數(shù)量上限設(shè)到2000這種操作只會(huì)讓優(yōu)化過(guò)程異常漫長(zhǎng)最后得到的“最優(yōu)值”還未必比200棵更好。搜索邊界本身就是一種先驗(yàn)知識(shí)你應(yīng)該用對(duì)問(wèn)題的理解為算法減少負(fù)擔(dān)。3. INFO-RF的核心流程拆開(kāi)之后其實(shí)不復(fù)雜3.1 INFO算法到底在做什么INFO算法的直覺(jué)可以用一句話(huà)描述一只鳥(niǎo)群在飛行時(shí)每只鳥(niǎo)會(huì)觀察其他鳥(niǎo)的位置然后綜合“飛得好的鳥(niǎo)”的經(jīng)驗(yàn)來(lái)決定自己下一步怎么飛而不是盲目地隨機(jī)亂飛。具體到實(shí)現(xiàn)層面INFO的更新策略有幾個(gè)關(guān)鍵機(jī)制加權(quán)均值向量MeanRule從當(dāng)前種群中挑出一部分適應(yīng)度好的個(gè)體按適應(yīng)度高低分配不同權(quán)重計(jì)算出一個(gè)“加權(quán)平均值”作為種群下一步移動(dòng)的基準(zhǔn)方向。收斂加速Convergence Acceleration在基準(zhǔn)方向的基礎(chǔ)上加一個(gè)隨機(jī)擾動(dòng)擾動(dòng)幅度隨迭代次數(shù)衰減。前期大范圍探索后期小范圍精調(diào)這幾乎是一切元啟發(fā)式算法的通用套路。局部搜索Local Search在迭代后期以一定的概率在當(dāng)前最優(yōu)解附近做小范圍抖動(dòng)尋找更精確的落腳點(diǎn)。這個(gè)機(jī)制很像粒子群里的“局部極值挖掘”。INFO對(duì)比哈里斯鷹優(yōu)化HHO的差異在于HHO的靈感來(lái)自鷹群狩獵探索和開(kāi)發(fā)的切換依賴(lài)“兔子逃跑能量”的衰減模型INFO則完全是基于加權(quán)均值的思想在數(shù)學(xué)表達(dá)上更干凈也沒(méi)有那么多階段性分支實(shí)現(xiàn)起來(lái)代碼量更小調(diào)試也更容易。3.2 隨機(jī)森林的參數(shù)如何編碼成“個(gè)體”INFO和所有元啟發(fā)式算法一樣需要把一組待優(yōu)化參數(shù)編碼成一個(gè)向量。以?xún)?yōu)化4個(gè)參數(shù)為例種群中的每個(gè)個(gè)體就是一個(gè)4維向量x [n_trees, max_depth, min_leaf, max_features_ratio]這四個(gè)分量在初始化時(shí)從預(yù)設(shè)的上下界范圍內(nèi)隨機(jī)取值。適應(yīng)度函數(shù)就是訓(xùn)練一個(gè)RF并返回負(fù)R方因?yàn)閮?yōu)化算法默認(rèn)求最小值所以目標(biāo)函數(shù) 1 - R方。這里有個(gè)細(xì)節(jié)隨機(jī)森林要求決策樹(shù)數(shù)量、深度等參數(shù)必須是整數(shù)而INFO生成的是連續(xù)浮點(diǎn)數(shù)。處理方法很簡(jiǎn)單在送入RF之前取整即可。min_leaf和max_features這類(lèi)參數(shù)只需保證在一個(gè)合理的離散范圍內(nèi)映射就行。3.3 完整的INFO-RF優(yōu)化流程圖解步驟一加載訓(xùn)練集X_train和y_train歸一化參數(shù)并保存。步驟二初始化INFO種群每個(gè)個(gè)體為隨機(jī)參數(shù)組合維度為DD等于待優(yōu)化參數(shù)個(gè)數(shù)。步驟三對(duì)每個(gè)個(gè)體執(zhí)行訓(xùn)練隨機(jī)森林(參數(shù)取整) 計(jì)算預(yù)測(cè)值 計(jì)算目標(biāo)函數(shù)值目標(biāo)值 1 - R方步驟四進(jìn)入INFO主循環(huán)迭代更新種群位置。每次更新后重新計(jì)算適應(yīng)度保留全局最優(yōu)個(gè)體。步驟五達(dá)到最大迭代次數(shù)后輸出最優(yōu)參數(shù)組合用該組合重新在完整訓(xùn)練集上訓(xùn)練RF并在測(cè)試集上做最終評(píng)估。整個(gè)流程真正“費(fèi)時(shí)間”的部分就是步驟三里反復(fù)訓(xùn)練RF。我建議如果數(shù)據(jù)量大超過(guò)5000條訓(xùn)練時(shí)把TreeBagger的“NumPredictorsToSample”等參數(shù)固定下來(lái)減少變量。3.4 用一段通俗代碼理解INFO的更新骨架這是簡(jiǎn)化版的核心更新偽代碼展示INFO的主要步驟。實(shí)際使用時(shí)把里面的meanrule、CA等細(xì)節(jié)實(shí)現(xiàn)出來(lái)即可。% 簡(jiǎn)化版INFO更新邏輯示意 for iter 1:maxIter for i 1:popSize % 挑選幾個(gè)優(yōu)質(zhì)個(gè)體計(jì)算加權(quán)均值向量 wm computeWeightedMean(pop, fitVal); % 生成新位置加權(quán)均值 收斂加速擾動(dòng) newPos pop(i,:) randn(1,D) .* (wm - pop(i,:)) * CA; % 邊界處理 newPos max(min(newPos, ub), lb); % 計(jì)算新適應(yīng)度決定是否替換舊個(gè)體 newFit 1 - trainRF(round(newPos)); if newFit fitVal(i) pop(i,:) newPos; fitVal(i) newFit; end end endvarpro tipCA因子在前期設(shè)為較大值1.5~2后期逐漸衰減到0.5左右能讓收斂更穩(wěn)。4. matlab代碼的框架與關(guān)鍵實(shí)現(xiàn)4.1 主程序結(jié)構(gòu)規(guī)劃完整的INFO-RF代碼建議分成4個(gè)文件主腳本、INFO優(yōu)化函數(shù)、RF適應(yīng)度函數(shù)、結(jié)果繪圖腳本。這樣結(jié)構(gòu)清晰也方便你把INFO換成HHO或者PSO做對(duì)比實(shí)驗(yàn)。主腳本大致包含數(shù)據(jù)加載與歸一化參數(shù)邊界定義調(diào)用INFO或HHO優(yōu)化器用最優(yōu)參數(shù)訓(xùn)練最終模型計(jì)算測(cè)試集指標(biāo)并繪圖我用的是matlab自帶的TreeBagger作為隨機(jī)森林回歸實(shí)現(xiàn)原因是它訓(xùn)練速度快而且能直接設(shè)定Method為regression接口友好。fitrensemble也可以但TreeBagger對(duì)參數(shù)的控制粒度更細(xì)更適合被優(yōu)化算法折騰。4.2 RF適應(yīng)度函數(shù)這是性能瓶頸的關(guān)鍵適應(yīng)度函數(shù)要盡量避免每次重復(fù)調(diào)用時(shí)的多余開(kāi)銷(xiāo)。我的寫(xiě)法是接收決策樹(shù)數(shù)量numTrees和深度maxDepth然后傳給TreeBagger。樹(shù)的數(shù)量低時(shí)訓(xùn)練很快但適應(yīng)度評(píng)估可能不穩(wěn)定樹(shù)的數(shù)量高時(shí)穩(wěn)定但慢。實(shí)踐中我發(fā)現(xiàn)一個(gè)高效率做法第一次評(píng)估種群時(shí)把樹(shù)數(shù)量限制在50以?xún)?nèi)讓優(yōu)化器快速篩掉明顯不行的區(qū)域最后幾輪迭代再放開(kāi)到200。雖然INFO本身沒(méi)有這種機(jī)制但你可以把“自適應(yīng)邊界”加到適應(yīng)度函數(shù)里效果顯著。適應(yīng)度函數(shù)的簡(jiǎn)化代碼如下function cost rfRegressionCost(params, Xtrain, ytrain, Xval, yval) % 參數(shù)取整 numTrees max(5, round(params(1))); maxDepth max(1, round(params(2))); minLeaf max(1, round(params(3))); numFeat max(1, round(params(4) * size(Xtrain,2))); % 訓(xùn)練隨機(jī)森林 model TreeBagger(numTrees, Xtrain, ytrain, ... Method, regression, ... MaxNumSplits, maxDepth, ... MinLeafSize, minLeaf, ... NumPredictorsToSample, numFeat, ... OOBPrediction, off); % 驗(yàn)證集預(yù)測(cè)與R方計(jì)算 pred predict(model, Xval); ssRes sum((yval - pred).^2); ssTot sum((yval - mean(yval)).^2); r2 1 - ssRes / ssTot; cost 1 - r2; % 求最小值 end4.3 INFO的核心參數(shù)設(shè)置INFO本身有幾個(gè)內(nèi)部參數(shù)值得調(diào)不全是默認(rèn)值直接用。我試過(guò)的比較穩(wěn)定的一組配置種群規(guī)模popSize20~30即可不要太大。4維參數(shù)空間用不著50個(gè)個(gè)體的“大軍團(tuán)”。最大迭代次數(shù)maxIter100~200。數(shù)據(jù)量大時(shí)50代也夠了收斂曲線(xiàn)會(huì)很明顯地變平。收斂加速衰減系數(shù)從1.8線(xiàn)性衰減到0.6左右。隨機(jī)擾動(dòng)幅度初始階段取當(dāng)前解到加權(quán)均值距離的1.5倍左右后期收縮到0.3倍。值得注意的是INFO算法內(nèi)部只有少量隨機(jī)算子如果初始化種子固定兩次跑出來(lái)的結(jié)果幾乎完全一致。這在寫(xiě)論文、做可重復(fù)性實(shí)驗(yàn)時(shí)是個(gè)優(yōu)點(diǎn)但也意味著一旦初始種群落在某個(gè)局部區(qū)域后續(xù)很難跳出來(lái)。我的解決辦法是每次跑3遍取結(jié)果最好的一次同時(shí)把初始化種子的隨機(jī)性保留。5. 哈里斯鷹優(yōu)化HHO對(duì)比實(shí)驗(yàn)怎么做才規(guī)范5.1 HHO的核心邏輯與INFO的差異哈里斯鷹優(yōu)化算法模擬的是鷹群捕獵兔子的過(guò)程前期鷹在廣闊區(qū)域游蕩探索發(fā)現(xiàn)獵物后根據(jù)兔子剩余能量決定是“軟包圍”還是“硬包圍”最后發(fā)動(dòng)“突襲”。它的更新規(guī)則里有一個(gè)“逃逸能量”參數(shù)E呈遞減趨勢(shì)這直接控制算法的探索和開(kāi)發(fā)節(jié)奏。對(duì)比INFO和HHO在同一數(shù)據(jù)集上的表現(xiàn)時(shí)有一個(gè)前提必須保持一致同樣的初始種群、同樣的適應(yīng)度函數(shù)、同樣的迭代次數(shù)和種群規(guī)模。否則任何性能差異都會(huì)被初始種群的隨機(jī)性干擾得出的結(jié)論不可信。從數(shù)學(xué)上看HHO在尋優(yōu)的早期階段有更強(qiáng)的全局探索能力因?yàn)樗脙煞N隨機(jī)策略來(lái)保持種群多樣性而INFO的加權(quán)均值機(jī)制更偏向于開(kāi)發(fā)收斂速度更快但也更依賴(lài)初始種群質(zhì)量。這個(gè)差異在低維參數(shù)優(yōu)化中其實(shí)不算明顯但在高維參數(shù)空間比如同時(shí)優(yōu)化5個(gè)以上特征選擇開(kāi)關(guān)時(shí)會(huì)被放大。5.2 對(duì)比實(shí)驗(yàn)的收斂曲線(xiàn)繪制方法繪制各個(gè)算法的收斂曲線(xiàn)時(shí)橫軸是迭代次數(shù)縱軸是當(dāng)前全局最優(yōu)適應(yīng)度值。注意不要直接畫(huà)種群平均適應(yīng)度平均適應(yīng)度受波動(dòng)影響大畫(huà)出來(lái)曲線(xiàn)很毛糙。只保留“到目前為止的最優(yōu)適應(yīng)度”即可這樣曲線(xiàn)是單調(diào)不增的更符合論文插圖習(xí)慣。matlab里保存最優(yōu)歷史很簡(jiǎn)單在每次迭代結(jié)束后記錄bestCostHistory(iter, algIndex)最后統(tǒng)一plot。要把不同算法的曲線(xiàn)畫(huà)在同一張圖上用不同顏色和線(xiàn)型區(qū)分。figure; plot(1:maxIter, infoHistory, b-o, LineWidth, 1.5); hold on; plot(1:maxIter, hhoHistory, r-s, LineWidth, 1.5); legend(INFO-RF, HHO-RF, Location, northeast); xlabel(迭代次數(shù)); ylabel(1-R2); title(INFO與HHO優(yōu)化RF的收斂曲線(xiàn)對(duì)比); grid on;5.3 實(shí)驗(yàn)結(jié)果怎么分析才嚴(yán)謹(jǐn)我在自己的數(shù)據(jù)集上跑出來(lái)的典型結(jié)果是INFO在40代左右基本收斂HHO大約需要70代左右兩者的最終R方可能只差0.01~0.02。這種差距在統(tǒng)計(jì)上未必顯著但作為論文里的圖表展示足以說(shuō)明INFO“更快、更穩(wěn)”。比較穩(wěn)妥的分析方式是給出三組指標(biāo)最終最優(yōu)適應(yīng)度、達(dá)到該精度所需的迭代次數(shù)、以及算法五次獨(dú)立運(yùn)行的標(biāo)準(zhǔn)差。這里的標(biāo)準(zhǔn)差是關(guān)鍵因?yàn)閮?yōu)化算法單跑一次的優(yōu)劣說(shuō)明不了任何問(wèn)題。INFO的方差通常比HHO小這是它加權(quán)均值機(jī)制帶來(lái)的天然優(yōu)勢(shì)你可以從這個(gè)角度展開(kāi)分析。6. 常見(jiàn)問(wèn)題與避坑經(jīng)驗(yàn)6.1 “最終模型比優(yōu)化過(guò)程的評(píng)估結(jié)果差很多”是怎么回事這是一定會(huì)遇到的問(wèn)題——優(yōu)化過(guò)程中的適應(yīng)度比測(cè)試集真實(shí)表現(xiàn)好很多原因是優(yōu)化過(guò)程把驗(yàn)證集信息“泄露”進(jìn)了參數(shù)選擇里。每次適應(yīng)度評(píng)估都在驗(yàn)證集上打分優(yōu)化器本質(zhì)上是去擬合驗(yàn)證集所以驗(yàn)證集的R方會(huì)被樂(lè)觀估計(jì)。解決辦法是再做一層嵌套驗(yàn)證在優(yōu)化過(guò)程中使用訓(xùn)練集的某一折作為驗(yàn)證集等找到最優(yōu)參數(shù)后再在完全未參與過(guò)優(yōu)化過(guò)程的測(cè)試集上報(bào)告最終效果。更規(guī)范一點(diǎn)的做法是采用K折交叉驗(yàn)證代替固定驗(yàn)證集但這樣訓(xùn)練時(shí)間會(huì)成倍增加數(shù)據(jù)量小時(shí)可以考慮。6.2 模型過(guò)擬合訓(xùn)練集R方0.99測(cè)試集0.7這個(gè)情況比較常見(jiàn)于優(yōu)化算法把max_depth推向邊界值的情況。INFO去找參數(shù)時(shí)決策樹(shù)深度越大訓(xùn)練集擬合越好目標(biāo)函數(shù)訓(xùn)練R方越低所以它會(huì)把深度推到上限。防止策略就是在目標(biāo)函數(shù)里加“懲罰項(xiàng)”當(dāng)min_leaf太小或max_depth太大時(shí)適度提高目標(biāo)值讓優(yōu)化器主動(dòng)避開(kāi)過(guò)擬合區(qū)。% 在適應(yīng)度函數(shù)末尾增加過(guò)擬合懲罰 if maxDepth 15 cost cost 0.05 * (maxDepth - 15); end if minLeaf 2 cost cost 0.02 * (2 - minLeaf); end幾個(gè)科研問(wèn)題的現(xiàn)實(shí)是論文里不會(huì)寫(xiě)這些“小動(dòng)作”但對(duì)你自己做過(guò)擬合控制很有幫助。6.3 優(yōu)化跑起來(lái)太慢怎么提速把種群規(guī)模從30降到20迭代次數(shù)從200降到100收斂精度通常沒(méi)有明顯損失。數(shù)據(jù)量超過(guò)2000條時(shí)可以用自助采樣加速擬合RF每次適應(yīng)度評(píng)估時(shí)只用60%的樣本訓(xùn)練。這樣跑出來(lái)的參數(shù)趨勢(shì)一致最終模型再用全量數(shù)據(jù)重訓(xùn)即可。關(guān)閉TreeBagger的OOB預(yù)測(cè)和變量重要性計(jì)算這些默認(rèn)行為消耗大量時(shí)間。用parfor并行評(píng)估種群中不同個(gè)體的適應(yīng)度。INFO的個(gè)體相互獨(dú)立在同一代內(nèi)是完全可并行的這是最大的提速來(lái)源。6.4 不同特征量綱差異巨大歸一化到底怎么做雖然RF不受量綱影響但I(xiàn)NFO優(yōu)化器在生成新個(gè)體時(shí)參數(shù)向量的范圍依賴(lài)你設(shè)定的lb和ub。如果數(shù)據(jù)的特征值范圍是10到10000而導(dǎo)致某些隨機(jī)生成的特征采樣比例傳遞給RF后集中在極端區(qū)域模型初期的評(píng)估結(jié)果就會(huì)很不穩(wěn)定。我的經(jīng)驗(yàn)是特征和標(biāo)簽分別歸一化到[-1,1]區(qū)間。這樣即使訓(xùn)練過(guò)程中出現(xiàn)微小的數(shù)值波動(dòng)也不會(huì)因?yàn)樵汲叨炔煌绊慣reeBagger內(nèi)部的split計(jì)算。6.5 “優(yōu)化完的結(jié)果和默認(rèn)參數(shù)差不多”該怎么辦這是一個(gè)比較讓人崩潰的情況。如果INFO跑完給出的最優(yōu)參數(shù)接近你手動(dòng)設(shè)置的默認(rèn)值一般有兩種可能一是數(shù)據(jù)集太簡(jiǎn)單無(wú)論怎么調(diào)參RF的性能都在一個(gè)平臺(tái)區(qū)二是搜索邊界設(shè)得太窄最優(yōu)解就在邊界附近算法沒(méi)有空間發(fā)揮。解決辦法是適當(dāng)放寬邊界增加決策樹(shù)數(shù)量上限并在對(duì)比實(shí)驗(yàn)里加入“隨機(jī)初始化參數(shù)”的對(duì)照組。如果隨機(jī)參數(shù)組的平均表現(xiàn)和優(yōu)化后的參數(shù)組差距很小說(shuō)明你的數(shù)據(jù)集確實(shí)沒(méi)有太多調(diào)參紅利這時(shí)候可以把重點(diǎn)轉(zhuǎn)向特征工程不要再和調(diào)參死磕。7. 這套INFO-RF代碼還能怎么擴(kuò)展如果你已經(jīng)把這套流程跑通后續(xù)往三個(gè)方向擴(kuò)展是性?xún)r(jià)比最高的把INFO換成灰狼優(yōu)化GWO、鯨魚(yú)算法WOA、麻雀搜索算法SSA做多算法對(duì)比把固定時(shí)間窗口切分成滑動(dòng)窗口讓它支持時(shí)間序列預(yù)測(cè)或者在RF之前加一層特征選擇用INFO同時(shí)優(yōu)化“特征子集 RF參數(shù)”這是目前很多論文的升級(jí)方向。我個(gè)人的體會(huì)是INFO-RF的最大價(jià)值不是那零點(diǎn)零幾的R方提升而是它讓你被迫完整思考一遍“模型從哪里來(lái)、參數(shù)到哪里去”的問(wèn)題。你不再只是套用一個(gè)黑箱模型而是能說(shuō)出每一個(gè)超參數(shù)對(duì)模型行為的影響。這種能力在答辯、寫(xiě)論文、做項(xiàng)目匯報(bào)時(shí)遠(yuǎn)比“調(diào)出一個(gè)好分?jǐn)?shù)”更拿得出手。最后分享一個(gè)實(shí)操小技巧跑完全部?jī)?yōu)化后把最優(yōu)參數(shù)和對(duì)應(yīng)指標(biāo)用writetable保存到CSV方便后面做多組對(duì)比實(shí)驗(yàn)時(shí)隨時(shí)回溯。數(shù)據(jù)、代碼、記錄三者歸檔清晰才是實(shí)驗(yàn)可復(fù)現(xiàn)的基礎(chǔ)。INFO-RF這個(gè)組合不算復(fù)雜但認(rèn)真做一遍確實(shí)能讓你的matlab編程能力和對(duì)機(jī)器學(xué)習(xí)原理的理解都上一個(gè)臺(tái)階。