LESSON 9.1 随机森林回归器的实现
目錄
三 隨機森林RandomForest
??1 RamdomForestRegressor的實現
??2 隨機森林回歸器的參數
???2.1 弱分類器結構
???2.2 弱分類器數量
???2.3 弱分類器訓練的數據
???2.4 其他參數
四 增量學習:隨機森林處理巨量數據
??1 普通學習vs增量學習
??2 增量學習在Kaggle數據上的應用
五 原理進階:Bagging方法6大面試熱點問題
六 隨機森林的參數空間與自動優化
三 隨機森林RandomForest
隨機森林是機器學習領域最常用的算法之一,其算法構筑過程非常簡單:從提供的數據中隨機抽樣出不同的子集,用于建立多棵不同的決策樹,并按照Bagging的規則對單棵決策樹的結果進行集成(回歸則平均,分類則少數服從多數)。只要你充分掌握了決策樹的各項屬性和參數,隨機森林的大部分內容都相當容易理解。
雖然原理上很簡單,但隨機森林的學習能力異常強大、算法復雜度高、又具備一定的抗過擬合能力,是從根本上來說比單棵決策樹更優越的算法。即便在深入了解機器學習的各種技巧之后,它依然是我們能夠使用的最強大的算法之一。原理如此簡單、還如此強大的算法在機器學習的世界中是不常見的。在機器學習競賽當中,隨機森林往往是我們在中小型數據上會嘗試的第一個算法。
在sklearn中,隨機森林可以實現回歸也可以實現分類。隨機森林回歸器由類sklearn.ensemble.RandomForestRegressor實現,隨機森林分類器則有類sklearn.ensemble.RandomForestClassifier實現。我們可以像調用邏輯回歸、決策樹等其他sklearn中的算法一樣,使用“實例化、fit、predict/score”三部曲來使用隨機森林,同時我們也可以使用sklearn中的交叉驗證方法來實現隨機森林。其中回歸森林的默認評估指標為R2,分類森林的默認評估指標為準確率。
class?sklearn.ensemble.RandomForestRegressor(n_estimators=100, *, criterion='squared_error', 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, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, ccp_alpha=0.0, max_samples=None)
class?sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, 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, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)
不難發現,隨機森林回歸器和分類器的參數高度一致,因此我們只需要講解其中一個類即可。任意集成算法在發源時都是回歸類算法,因此我們的重點將會放在回歸類算法上。隨機森林有大量的參數,幸運的是,隨機森林中所有參數都有默認值,因此即便我們不學習任何參數,也可以調用隨機森林算法。我們先來建一片森林看看吧:
1 RandomForestRegressor的實現?
import matplotlib.pyplot as plt from sklearn.ensemble import RandomForestRegressor as RFR from sklearn.tree import DecisionTreeRegressor as DTR from sklearn.model_selection import cross_validate, KFold #這里我們不再使用cross_val_score,轉而使用能夠輸出訓練集分數的cross_validate #決策樹本身就是非常容易過擬合的算法,而集成模型的參數量/復雜度很難支持大規模網格搜索 #因此對于隨機森林來說,一定要關注算法的過擬合情況data = pd.read_csv('/Users/zhucan/Desktop/train_encode.csv',index_col=0) data.head()結果:?
data.shape #(1460, 81)X = data.iloc[:,:-1] y = data.iloc[:,-1]y #注意,y的類型是整數型,并且y的均值很大,可想而知整體的MSE一定會很大 #0 208500 #1 181500 #2 223500 #3 140000 #4 250000 # ... #1455 175000 #1456 210000 #1457 266500 #1458 142125 #1459 147500 #Name: SalePrice, Length: 1460, dtype: int64y.mean() #180921.19589041095X.shape #(1460, 80)X.columns.tolist() #['Id', # '住宅類型', # '住宅區域', # '街道接觸面積(英尺)', # '住宅面積', # '街道路面狀況', # '巷子路面狀況',...]與sklearn中其他回歸算法一樣,隨機森林的默認評估指標是R2,但在機器學習競賽、甚至實際使用時,我們很少使用損失以外的指標對回歸類算法進行評估。對回歸類算法而言,最常見的損失就是MSE。
reg_f = RFR() #實例化隨機森林 reg_t = DTR() #實例化決策樹 cv = KFold(n_splits=5,shuffle=True,random_state=1412) #實例化交叉驗證方式result_t = cross_validate(reg_t #要進行交叉驗證的評估器,X,y #數據,cv=cv #交叉驗證模式,scoring="neg_mean_squared_error" #評估指標,sklearn中默認為負,負的程度越深模型越糟糕,return_train_score=True #是否返回訓練分數,verbose=True #是否打印進程,n_jobs=-1 #線程數) #[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers. #[Parallel(n_jobs=-1)]: Done 2 out of 5 | elapsed: 1.1s remaining: 1.6s #[Parallel(n_jobs=-1)]: Done 5 out of 5 | elapsed: 1.1s finished result_f = cross_validate(reg_f,X,y,cv=cv,scoring="neg_mean_squared_error",return_train_score=True,verbose=True,n_jobs=-1) #[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers. #[Parallel(n_jobs=-1)]: Done 2 out of 5 | elapsed: 1.4s remaining: 2.1s #[Parallel(n_jobs=-1)]: Done 5 out of 5 | elapsed: 2.1s finished '''建立了100顆樹,但由于樹是并行增長的,所以建立只會比決策樹慢一點,隨著數據量增長, 隨機森林會越來越慢'''result_t #超級過擬合 # {'fit_time': array([0.03513908, 0.02617216, 0.02826715, 0.03085804, 0.03072166]), # 'score_time': array([0.00184107, 0.00152969, 0.00140595, 0.00212121, 0.00243092]), # 'test_score': array([-1.32676659e+09, -3.30251909e+09, -1.57903793e+09, -1.50256213e+09, # -1.57774956e+09]), # 'train_score': array([-0., -0., -0., -0., -0.])}result_f #訓練集和測試在交叉驗證上的分數差異更小,因此森林的過擬合程度沒有決策樹高 # {'fit_time': array([1.30783272, 1.37094092, 1.34987903, 1.40098619, 1.32293487]), # 'score_time': array([0.00880313, 0.00958204, 0.00925899, 0.00892091, 0.00915027]), # 'test_score': array([-7.78513095e+08, -2.03928947e+09, -7.46760247e+08, -4.73092198e+08, # -8.86053174e+08]), # 'train_score': array([-1.22052661e+08, -1.04873049e+08, -1.37851525e+08, -1.30651561e+08, # -1.26205314e+08])}在集成學習中,我們衡量回歸類算法的指標一般是RMSE(根均方誤差),也就是MSE開根號后的結果?,F實數據的標簽往往數字巨大、數據量龐雜,MSE作為平方結果會放大現實數據上的誤差(例如隨機森林結果中得到的,7?1087?108等結果),因此我們會對平房結果開根號,讓回歸類算法的評估指標在數值上不要過于夸張。同樣的,方差作為平方結果,在現實數據上也會太大,因此如果可以,我們使用標準差進行模型穩定性的衡量。
trainRMSE_f = abs(result_f["train_score"])**0.5 testRMSE_f = abs(result_f["test_score"])**0.5 trainRMSE_t = abs(result_t["train_score"])**0.5 testRMSE_t = abs(result_t["test_score"])**0.5trainRMSE_f.mean() #10949.819569879735 testRMSE_f.mean() #30452.218280217272 trainRMSE_f.std() #方差數額太大,使用標準差 #373.26874603409686#默認值下隨機森林的RMSE與標準差std xaxis = range(1,6) plt.figure(figsize=(8,6),dpi=80) #RMSE plt.plot(xaxis,trainRMSE_f,color="green",label = "RandomForestTrain") plt.plot(xaxis,testRMSE_f,color="green",linestyle="--",label = "RandomForestTest") plt.plot(xaxis,trainRMSE_t,color="orange",label = "DecisionTreeTrain") plt.plot(xaxis,testRMSE_t,color="orange",linestyle="--",label = "DecisionTreeTest") plt.xticks([1,2,3,4,5]) plt.xlabel("CVcounts",fontsize=16) plt.ylabel("RMSE",fontsize=16) plt.legend() plt.show()結果:
- 橫坐標:交叉驗證次數
- 縱坐標:RMSE數值
從圖像來看,森林與決策樹都處于過擬合狀態,不過森林的過擬合程度較輕,決策樹的過擬合程度較強。兩個算法在訓練集上的結果都比較優秀,決策樹的可以完美學習訓練集上的內容,達到RMSE=0的程度,而隨機森林在訓練集上的RMSE大約在1w上下徘徊,測試集上的結果則是隨機森林更占優。可見,與填寫的參數無關,隨機森林天生就是比決策樹更不容易過擬合、泛化能力更強的。?
2 隨機森林回歸器的參數
當填寫參數之后,隨機森林可以變得更強大。比起經典機器學習算法邏輯回歸、嶺回歸等,隨機森林回歸器的參數數量較多,因此我們可以將隨機森林類的參數分為如下4大類別,其中標注為綠色的是我們從未學過的、只與集成算法相關的參數:
2.1 弱分類器結構
在集成算法當中,控制單個弱評估器的結構是一個重要的課題,因為單個弱評估器的復雜度/結果都會影響全局,其中單棵決策樹的結構越復雜,集成算法的整體復雜度會更高,計算會更加緩慢、模型也會更加容易過擬合,因此集成算法中的弱評估器也需要被剪枝。隨機森林回歸器的弱評估器是回歸樹,因此集成評估器中有大量的參數都與弱評估器回歸樹中的參數重合:
這些參數在隨機森林中的用法與默認值與決策樹類DecisionTreeRegressor中完全一致,專門用于對決策樹進行剪枝、控制單個弱評估器的結構,考慮到大家在決策樹中已經充分掌握這些參數,我們不再對這些參數一一進行詳細說明了。在這里,我們重點復習一下以下兩部分參數:
- 分枝標準與特征重要性
criterion與feature_importances_
與分類樹中的信息熵/基尼系數不同,回歸樹中的criterion可以選擇"squared_error"(平方誤差),"absolute_error"(絕對誤差)以及"poisson"(泊松偏差)。對任意樣本𝑖而言,𝑦𝑖為真實標簽,𝑦𝑖帽為預測標簽,則各個criterion的表達式為:
其中平方誤差與絕對誤差是大家非常熟悉的概念,作為分枝標準,平方誤差比絕對誤差更敏感(類似于信息熵比基尼系數更敏感),并且在計算上平方誤差比絕對誤差快很多。泊松偏差則是適用于一個特殊場景的:當需要預測的標簽全部為正整數時,標簽的分布可以被認為是類似于泊松分布的。正整數預測在實際應用中非常常見,比如預測點擊量、預測客戶/離職人數、預測銷售量等。我們現在正在使用的數據(房價預測),也可能比較適合于泊松偏差。
另外,當我們選擇不同的criterion之后,決策樹的feature_importances_也會隨之變化,因為在sklearn當中,feature_importances_是特征對criterion下降量的總貢獻量,因此不同的criterion可能得到不同的特征重要性。(criterion和feature_importances_相連,feature_importances_是通過每一個特征貢獻的不純度下降量計算的)
對我們來說,選擇criterion的唯一指標就是最終的交叉驗證結果——無論理論是如何說明的,我們只取令隨機森林的預測結果最好的criterion。
- 調節樹結構來控制過擬合
max_depth
最粗獷的剪枝方式,從樹結構層面來看,對隨機森林抗過擬合能力影響最大的參數。max_depth的默認值為None,也就是不限深度。因此當隨機森林表現為過擬合時,選擇一個小的max_depth會很有效。
max_leaf_nodes與min_sample_split
比max_depth更精細的減枝方式,但限制葉子數量和分枝,既可以實現微調,也可以實現大刀闊斧的剪枝。max_leaf_nodes的默認值為None,即不限葉子數量。min_sample_split的默認值為2,等同于不限制分枝。
min_impurity_decrease
最精細的減枝方式,可以根據不純度下降的程度減掉相應的葉子。默認值為0,因此是個相當有空間的參數。
2.2 弱分類器數量
n_estimators
n_estimators是森林中樹木的數量,即弱評估器的數量,在sklearn中默認100,它是唯一一個對隨機森林而言必填的參數。n_estimators對隨機森林模型的精確程度、復雜度、學習能力、過擬合情況、需要的計算量和計算時間都有很大的影響,因此n_estimators往往是我們在調整隨機森林時第一個需要確認的參數。對單一決策樹而言,模型復雜度由樹結構(樹深、樹寬、樹上的葉子數量等)與數據量(樣本量、特征量)決定,而對隨機森林而言,模型復雜度由森林中樹的數量、樹結構與數據量決定,其中樹的數量越多,模型越復雜。
還記得講解決策樹與邏輯回歸時我們繪制的這張圖像么?當模型復雜度上升時,模型的泛化能力會先增加再下降(相對的泛化誤差會先下降再上升),我們需要找到模型泛化能力最佳的復雜度。在實際進行訓練時,最佳復雜度往往是一個比較明顯的轉折點,當復雜度高于最佳復雜度時,模型的泛化誤差要么開始上升,要么不再下降。
對隨機森林而言,該圖像的橫坐標可以被無縫切換為參數n_estimators上的值。當n_estimators越大時:
- 模型的復雜程度上升,泛化能先增強再減弱(或不變)
- 模型的學習能力越來越強,在訓練集上的分數可能越來越高,過擬合風險越來越高
- 模型需要的算力和內存越來越多
- 模型訓練的時間會越來越長
因此在調整n_estimators時,我們總是渴望在模型效果與訓練難度之間取得平衡,同時我們還需要使用交叉驗證來隨時關注模型過擬合的情況。在sklearn現在的版本中,n_estimators的默認值為100,個人電腦能夠容忍的n_estimators數量大約在200~1000左右。
def RMSE(cvresult,key):return (abs(cvresult[key])**0.5).mean()reg_f = RFR(n_estimators=3) cv = KFold(n_splits=5,shuffle=True,random_state=1412) result_f = cross_validate(reg_f,X,y,cv=cv,scoring="neg_mean_squared_error",return_train_score=True,verbose=True,n_jobs=-1) #[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers. #[Parallel(n_jobs=-1)]: Done 2 out of 5 | elapsed: 1.3s remaining: 1.9s #[Parallel(n_jobs=-1)]: Done 5 out of 5 | elapsed: 1.3s finished RMSE(result_f,"test_score") #35681.96994493137reg_f = RFR(n_estimators=100) cv = KFold(n_splits=5,shuffle=True,random_state=1412) result_f = cross_validate(reg_f,X,y,cv=cv,scoring="neg_mean_squared_error",return_train_score=True,verbose=True,n_jobs=-1) #[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers. #[Parallel(n_jobs=-1)]: Done 2 out of 5 | elapsed: 1.4s remaining: 2.1s #[Parallel(n_jobs=-1)]: Done 5 out of 5 | elapsed: 2.0s finished RMSE(result_f,"test_score") #30351.359534374766reg_f = RFR(n_estimators=500) cv = KFold(n_splits=5,shuffle=True,random_state=1412) result_f = cross_validate(reg_f,X,y,cv=cv,scoring="neg_mean_squared_error",return_train_score=True,verbose=True,n_jobs=-1) #[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers. #[Parallel(n_jobs=-1)]: Done 2 out of 5 | elapsed: 7.8s remaining: 11.8s #[Parallel(n_jobs=-1)]: Done 5 out of 5 | elapsed: 7.9s finished RMSE(result_f,"test_score") #30290.45615417552隨機森林bagging生成的樹都是獨立并行計算的,所以時間不會成倍增加?
總結:
?2.3 弱分類器訓練的數據
還記得決策樹是如何分枝的嗎?對每個特征決策樹都會找到不純度下降程度最大的節點進行分枝,因此原則上來說,只要給出數據一致、并且不對決策樹進行減枝的話,決策樹的結構一定是完全相同的。對集成算法來說,平均多棵相同的決策樹的結果并沒有意義,因此集成算法中每棵樹必然是不同的樹,Bagging算法是依賴于隨機抽樣數據來實現這一點的。
隨機森林會從提供的數據中隨機抽樣出不同的子集,用于建立多棵不同的決策樹,最終再按照Bagging的規則對眾多決策樹的結果進行集成。因此在隨機森林回歸器的參數當中,有數個關于數據隨機抽樣的參數。
- 樣本的隨機抽樣
bootstrap,oob_score,max_samples
bootstrap參數的輸入為布爾值,默認True,控制是否在每次建立決策樹之前對數據進行隨機抽樣。如果設置為False,則表示每次都使用全部樣本進行建樹,如果為True,則隨機抽樣建樹。從語言的意義上來看,bootstrap可以指代任意類型的隨機抽樣,但在隨機森林中它特指有放回隨機抽樣技術。
如下圖所示,在一個含有m個樣本的原始訓練集中,我們進行隨機采樣。每次采樣一個樣本,并在抽取下一個樣本之前將該樣本放回原始訓練集,也就是說下次采樣時這個樣本依然可能被采集到,這樣采集max_samples次,最終得到max_samples個樣本組成的自助集。
自助集就是抽取出來的數據集。
通常來說,max_samples是等于m的(行業慣例),也就是抽樣數據集的大小與原始數據集一致,但是如果原始數據集太大、或者太小,我們也可以自由調整max_samples的大小。由于是隨機采樣,這樣每次的自助集和原始數據集不同,和其他的采樣集也是不同的。這樣我們就可以自由創造取之不盡用之不竭,并且互不相同的自助集,用這些自助集來訓練我們的弱分類器,我們的弱分類器自然也就各不相同了。
然而有放回抽樣也會有自己的問題。由于是有放回,一些樣本可能在同一個自助集中出現多次,而其他一些卻可能被忽略。當抽樣次數足夠多、且原始數據集足夠大時,自助集大約平均會包含全數據的63%,這個數字是有數學依據的。因為在max_samples次抽樣中,一個樣本被抽到某個自助集中的概率為:
這個式子是怎么來的呢?對于任意一個樣本而言:
一次抽樣時抽到該樣本的概率為1/m
一次抽樣時抽不到該樣本的概率為1?1/m
總共抽樣max_samples次,一次也沒有抽到該樣本的概率就是
因此1減去該概率,就是一個樣本在抽樣中一定會被抽到某個自助集的概率。 當m剛好等于max_samples時,公式可以被修改為:?
這明顯是一個經典的極限問題,由洛必達法則(L'H?pital's rule)我們可知:當m足夠大時(接近極限時),這個概率收斂于1-(1/e),其中e是自然常數,整體概率約等于0.632。因此,會有約37%的訓練數據被浪費掉,沒有參與建模,這些數據被稱為袋外數據(out of bag data,簡寫為oob)。在實際使用隨機森林時,袋外數據常常被我們當做驗證集使用,所以我們或許可以不做交叉驗證、不分割數據集,而只依賴于袋外數據來測試我們的模型即可。當然,這也不是絕對的,當樹的數量n_estimators不足,或者max_samples太小時,很可能就沒有數據掉落在袋外,自然也有無法使用oob數據來作為驗證集了。
在隨機森林回歸器中,當boostrap=True時,我們可以使用參數oob_score和max_samples,其中:
oob_score控制是否使用袋外數據進行驗證,輸入為布爾值,默認為False,如果希望使用袋外數據進行驗證,修改為True即可。(數據量特別大的時候,可以修改為True)
max_samples表示自助集的大小,可以輸入整數、浮點數或None,默認為None。
輸入整數m,則代表每次從全數據集中有放回抽樣m個樣本
輸入浮點數f,則表示每次從全數據集中有放回抽樣f*全數據量個樣本
輸入None,則表示每次抽樣都抽取與全數據集一致的樣本量(X.shape[0])
在使用袋外數據時,我們可以用隨機森林的另一個重要屬性:oob_score_來查看我們的在袋外數據上測試的結果,遺憾的是我們無法調整oob_score_輸出的評估指標,它默認是R2。
reg = RFR(n_estimators=20, bootstrap=True #進行隨機抽樣, oob_score=True #按袋外數據進行驗證, max_samples=500).fit(X,y) #重要屬性oob_score_ reg.oob_score_ #在袋外數據上的R2為83% #0.8379331878464579reg = RFR(n_estimators=20, bootstrap=False, oob_score=True, max_samples=500).fit(X,y) #直接無法運行,因為boostrap=False時oob_score分數根本不存在reg = RFR(n_estimators=20, bootstrap=True #允許抽樣, oob_score=False #但不進行計算, max_samples=500).fit(X,y) reg.oob_score_ #雖然可以訓練,但oob_score_無法被調用- 特征的隨機抽樣
max_features
數據抽樣還有另一個維度:對特征的抽樣。在學習決策樹時,我們已經學習過對特征進行抽樣的參數max_features,在隨機森林中max_features的用法與決策樹中完全一致,其輸入也與決策樹完全一致:
輸入整數,表示每次分枝時隨機抽取max_features個特征
輸入浮點數,表示每次分枝時抽取round(max_features * n_features)個特征
輸入"auto"或者None,表示每次分枝時使用全部特征n_features
輸入"sqrt",表示每次分枝時使用sqrt(n_features)
輸入"log2",表示每次分枝時使用log2(n_features)
結果:
不難發現,sqrt(n_features)和log2(n_features)都會返回一個比原始特征量小很多的數,但一般情況下log2返回的值比sqrt返回的值更小,因此如果我們想要樹之間的差異更大,我們可以設置模式為log2。在實際使用時,我們往往會先使用上述的文字輸入,觀察模型的結果,然后再在有效的范圍附近進行網格搜索。
需要注意的是,無論對數據進行怎樣的抽樣,我們能夠控制的都只是建立單棵樹時的數據而已。在總數據量有限的情況下,單棵樹使用的數據量越大,每一棵樹使用的數據就會越相似,每棵樹的結構也就會越相似,bagging的效果難以發揮、模型也很容易變得過擬合。因此,當數據量足夠時,我們往往會消減單棵樹使用的數據量。
- 隨機抽樣的模式
random_state
在決策樹當中,我們已經學習過控制隨機模式的參數random_state,這個參數是“隨機數種子”,它控制決策樹當中多個具有隨機性的流程。在sklearn實現的隨機森林當中,決策樹上也存在眾多有隨機性的流程:
- 「強制」隨機抽取每棵樹建立時分枝用的特征,抽取的數量可由參數max_features決定
- 「強制」隨機排序每棵樹分枝時所用的特征(工業上不可能一個一個算)
- 「可選」隨機抽取每棵樹建立時訓練用的樣本,抽取的比例可由參數max_samples決定
因此每次使用隨機森林類時,我們建立的集成算法都是不同的,在同一個數據集上多次建樹自然也會產生不同的模型結果。因此在工程部署和教學當中,我們在建樹的第一步總是會先設置隨機數種子為一個固定值,讓算法固定下來。在設置的時候,需要注意兩個問題:
1、不同庫中的隨機數種子遵循不同的規則,對不同庫中的隨機數種子給與相同的數字,也不會得到相同的結果
import pandas as pd import random list_ = [1,2,3,4,5] list_p = pd.Series(list_) list_p #0 1 #1 2 #2 3 #3 4 #4 5 #dtype: int64#random中的隨機抽樣 random.seed(1) random.sample(list_,k=3) #[2, 1, 5]#pandas中的隨機抽樣 list_p.sample(n=3,random_state=1).values #array([3, 2, 5])同樣的,sklearn中的隨機抽樣、numpy中的隨機抽樣、cuda中的隨機抽樣在相同的隨機數種子數值下,都會得到不同的結果。
2、如何選擇最佳隨機數種子?
當數據樣本量足夠大的時候(數萬),變換隨機數種子幾乎不會對模型的泛化能力有影響,因此在數據量巨大的情況下,我們可以隨意設置任意的數值。
當數據量較小的時候,我們可以把隨機數種子當做參數進行調整,但前提是必須依賴于交叉驗證的結果。選擇交叉驗證結果中均值最高、方差最低的隨機數種子,以找到泛化能力最強大的隨機模式。
?2.4 其他參數
我們已經了解過前三個參數。需要稍微說明一下verbose參數。隨機森林的verbose參數打印的是建樹過程,但只有在樹的數量眾多、建模耗時很長時,verbose才會打印建樹的具體過程,否則它只會打印出一行兩簡單的報告。這些參數中需要重點說明的是warm_start。warm_start是控制增量學習的參數,默認為False,該參數可以幫助隨機森林處理巨量數據,解決圍繞隨機森林的眾多關鍵問題。我們將在之后的章節中重點講解warm_start的應用。
總結
以上是生活随笔為你收集整理的LESSON 9.1 随机森林回归器的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李宏毅深度学习——Why Deep?
- 下一篇: Lesson 3.张量的广播和科学运算