1.管道模型的概念及用法
1.1管道模型的基本概念
我們先來做個試驗,來引入管道模型
加入我們要用某個數(shù)據(jù)集進行模型訓練的話寥袭,大概做的做法就會像下面這樣。
首先关霸,要載入數(shù)據(jù)集纠永,這里我們繼續(xù)使用make_blobs來生成數(shù)據(jù)集,然后對數(shù)據(jù)集進行預處理(假設模型需要)谒拴,輸入代碼如下:
##導入數(shù)據(jù)集生成器
from sklearn.datasets import make_blobs
##導入數(shù)據(jù)集拆分工具
from sklearn.model_selection import train_test_split
##導入預處理工具
from sklearn.preprocessing import StandardScaler
##導入多層感知器神經(jīng)網(wǎng)絡
from sklearn.neural_network import MLPClassifier
##導人畫圖工具
import matplotlib.pyplot as plt
#生成樣本數(shù)量200 分類為2 尝江,標準差為5的數(shù)據(jù)集
X, y = make_blobs(n_samples=200,centers=2,cluster_std=5)
##將數(shù)據(jù)集拆分為訓練集和測試集
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=38)
##對數(shù)據(jù)進行預處理
scaler = StandardScaler().fit(X_train)
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
##將處理后的數(shù)據(jù)形態(tài)進行打印
print(X_train_scaled.shape)
print(X_test_scaled.shape)
在這段代碼中,我么你選擇使用MLP多層感知神經(jīng)網(wǎng)絡作為下一步要用的分類器模型(因為MLP是典型的需要進行數(shù)據(jù)預處理的算法模型)英上,用StandardScaler作為數(shù)據(jù)預處理的工具炭序,用make_blobs生成樣本數(shù)量為200,分類數(shù)為2苍日,準備差為5的數(shù)據(jù)集惭聂。
和以往一樣,我們用train_test_split工具將數(shù)據(jù)集拆分為訓練集和測試集相恃,運行代碼辜纲,得到如下結(jié)果:
(150, 2)
(50, 2)
結(jié)果分析:從結(jié)果中可以看出,訓練集中的數(shù)據(jù)樣本為150個拦耐,測試集中的樣本數(shù)據(jù)為50個耕腾,特征數(shù)都是2個。
下面我們來看一下未經(jīng)過處理的訓練集和經(jīng)過處理的數(shù)據(jù)差別杀糯,輸入代碼如下:
# #原始的訓練集
plt.scatter(X_train[:,0],X_train[:,1],c=y_train,cmap=plt.cm.cool)
# #經(jīng)過預處理的訓練集
plt.scatter(X_train_scaled[:,0],X_train_scaled[:,1],edgecolor='k',c=y_train,cmap=plt.cm.cool)
# #添加圖題
plt.title("compare data")
# #顯示圖片
plt.show()
運行代碼扫俺,將得到如下圖所示的結(jié)果:
結(jié)果分析:從圖中可以看到,StandardScaler將訓練集的數(shù)據(jù)變得更加“聚攏”固翰,這樣有利于我們使用神經(jīng)網(wǎng)絡模型進行擬合狼纬。
接下來羹呵,我們要用到前面所學到的網(wǎng)格搜索來確定MLP的最優(yōu)參數(shù),在本例中疗琉,我們選擇的參數(shù)我hidden_layer_sizes和alpha這兩個來進行試驗冈欢,輸入代碼如下:
# #導人網(wǎng)格搜索
from sklearn.model_selection import GridSearchCV
# #設定網(wǎng)格搜索的模型參數(shù)字典hidden_layer_ sizes JJ alpha
param_dict = {'hidden_layer_sizes':[(50,),(100,),(100,100)],'alpha':[0.0001,0.001,0.01,0.1]}
#建立神經(jīng)網(wǎng)絡模型
mlp = MLPClassifier(max_iter=1600,random_state=38)
# #建立網(wǎng)格搜索模型
grid = GridSearchCV(mlp,param_dict,cv=3)
# #擬合數(shù)據(jù)
grid.fit(X_train_scaled,y_train)
# #打印模型得分和最佳參數(shù)
print('模型最佳得分:{}'.format(grid.best_score_))
print('最佳參數(shù):{}'.format(grid.best_params_))
這段代碼中,我們想測試的是MLP的隱藏層為(50盈简,)涛癌,(100,)和(100,100)以及alpha值為0.0001,0.001,0.01,0.1時送火,哪個參數(shù)的組合可以讓模型的得分最高,為了避免讓模型提示最大迭代次數(shù)太小先匪,我們把max_iter參數(shù)設置為1600种吸。運行代碼,得到如下圖所示結(jié)果:
結(jié)果分析:從結(jié)果看出呀非,當alpha參數(shù)等于0.0001時坚俗,有1個50個節(jié)點的隱藏層,即hidden_layer_sizes參數(shù)為(50岸裙,)時猖败,模型評分最高,為0.85降允,總的來說還可以恩闻。
按之前的步驟來做,下一步就可以去擬合測試集了剧董,輸入代碼如下:
print('測試集得分:{}'.format(grid.score(X_test_scaled,y_test)))
運行代碼幢尚,可以得到如下所示結(jié)果:
測試集得分:0.92
結(jié)果分析:測試集上模型得分是0.94,看起來還不錯翅楼。但是我們忽略了一個問題尉剩。
問題就是我們在進行數(shù)據(jù)預處理的時候,用StandardScaler擬合了訓練數(shù)據(jù)集X_train毅臊,而后用這個擬合的scaler去分別轉(zhuǎn)化了X_train和X_test理茎,這一步?jīng)]有問題。但是管嬉,我們在進行網(wǎng)格搜索的時候皂林,是用了X_train來擬合GridSearchCV。如果大家還記得我們在網(wǎng)格搜索中講的內(nèi)容蚯撩,就會發(fā)現(xiàn)式撼,在這一步,由于交叉驗證是會把數(shù)據(jù)集分成若干份求厕,然后依次作為訓練集和測試集給模型評分著隆,并且找到最高分扰楼。
那么問題來了,這里我們把X_train_Scaled進行了拆分美浦,那么拆出來的每一部分弦赖,都是基于X_train本身對于StandardScaler擬合后再對自身進行轉(zhuǎn)換。相當于我們用交叉驗證生成的測試集擬合了StandardScaler后浦辨,再用這個scale人轉(zhuǎn)換這個測試集自身蹬竖,如下圖所示:
在圖中可以看到,這樣的做法是錯誤的流酬。我們在交叉驗證中币厕,將訓練集又拆分成了training fold和validation fold,但用StandardScaler進行預處理的時候芽腾,是使用training fold和validation fold一起進行的擬合旦装。這樣一來,交叉驗證的得分就是不準確的了摊滔。
那該如何解決這個問題呢阴绢?
首先要明確這個問題在于交叉驗證時,所用的經(jīng)過預處理的數(shù)據(jù)不對艰躺,所以我們要保證交叉驗證時呻袭,所用的預處理數(shù)據(jù)是正確的才行。解決辦法就是在交叉驗證的過程中腺兴,數(shù)據(jù)拆分的時候左电,再進行數(shù)據(jù)預處理。這樣就不會出現(xiàn)拆分的數(shù)據(jù)錯誤的情況了页响。
如何能讓它先拆分數(shù)據(jù)券腔,再進行預處理,這就要引入一開始就要介紹的管道模型(Pipeline)來解決了拘泞。
首先來看一下Pipeline的基本用法纷纫,輸入代碼如下:
#導入管道模型
from sklearn.pipeline import Pipeline
##建立包含預處理和神經(jīng)網(wǎng)絡的管道模型
pipeline = Pipeline([('scaler',StandardScaler()),
('mlp',MLPClassifier(max_iter=1600,random_state=38))])
# #用管道模型對訓練集進行擬合
pipeline.fit(X_train,y_train)
# 的丁印 道模 的分數(shù)
print('使用管道模型的MLP模型評分:{:.2f}'.format(pipeline.score(X_test,y_test)))
在這段代碼中,我們導入了scikit-lean中的Pipeline類陪腌,然后在這條“流水線”中“安裝”了兩個“設備”辱魁,一個是用來進行數(shù)據(jù)預處理的StandardScaler,另一個是最大迭代次數(shù)為1600的MLP多層感知神經(jīng)網(wǎng)絡诗鸭。然后我們用管道模型pipeline來擬合訓練數(shù)據(jù)集染簇,并對測試集進行評分,運行代碼强岸,打印結(jié)果如下:
使用管道模型的MLP模型評分:0.92
結(jié)果分析:可以看到锻弓,管道模型在測試數(shù)據(jù)集的得分達到了0.94,和之前的分數(shù)基本沒有什么差別蝌箍。
1.2使用管道模型進行網(wǎng)格搜索
上一小節(jié)引入了管道模型青灼,并且介紹了如何使用管道模型將數(shù)據(jù)與處理和模型訓練打包在一起暴心,下面來介紹如何使用管道模型進行網(wǎng)格搜索。
使用管道模型進行網(wǎng)格搜索的示例杂拨,輸入代碼如下:
##設 參數(shù)字典
params = {'mlp__hidden_layer_sizes':[(50,),(100,),(100,100)],'mlp__alpha':[0.0001,0.001,0.01,0.1]}
# #將管道模型加入網(wǎng)格搜索
grid = GridSearchCV(pipeline,param_grid=params,cv=3)
# #對訓練集進行擬合
grid.fit(X_train,y_train)
# #打印模型交叉驗證分數(shù)专普、最佳參數(shù)和測試集得分
print('交叉驗證最高分:{:.2f}'.format(grid.best_score_))
print('模型最優(yōu)參數(shù):{}'.format(grid.best_params_))
print('測試集得分:{}'.format(grid.score(X_test,y_test)))
運行代碼,得到如下圖所示的結(jié)果:
結(jié)果分析:從圖中可以看到弹沽,管道模型在交叉驗證集中的最高分是0.85檀夹,而在MLP的最優(yōu)參數(shù)是alpha等于0.0001,而hidden_layer_sizes的數(shù)值為(50策橘,)炸渡。這個參數(shù)下測試集的得分達到了0.94.
在上面這段代碼中,發(fā)現(xiàn)我們傳給parmas的方法發(fā)生了一點變化丽已,那就是我們在hidden_layer_sizes和alpha前面都添加了mlp_這樣一個前綴蚌堵。為什么要這樣呢?這是因為pipeline中會有多個算法促脉,我們需要讓pipeline知道這個參數(shù)是傳給哪一個算法的。否則程序就會報錯策州。
通過使用管道模型瘸味,我們改變了交叉驗證的方式,如下圖所示
對比此圖和之前錯誤的圖够挂,我么你可以看到旁仿,在前面我們沒有使用pipeline的時候,GridSearchCVC會把經(jīng)過scaler處理的數(shù)據(jù)拆分成若干個訓練集與驗證機孽糖。而使用了pipeline之后枯冈,相當于每次模型會先拆分訓練集和驗證集,然后單獨對訓練集和驗證集分別進行預處理办悟,再由網(wǎng)格搜索尋找最優(yōu)參數(shù)尘奏。這樣就避免了我們在前文中所說的錯誤操作。
我們可以使用如下一段代碼來透視一下pipeline所進行處理的過程:
pipeline.steps
運行代碼病蛉,得到如下圖所示的結(jié)果:
結(jié)果分析:
從圖中的結(jié)果可以看到炫加,pipeline.steps把包含在管道模型中的數(shù)據(jù)預處理scaler和多層感知神經(jīng)網(wǎng)絡MLP的全部參數(shù)返回給我們,這就如同是流水線的工作流程一樣铺然。從這個結(jié)果中也可以看出俗孝,在GridsearchCV進行每一步交叉驗證之前,pipeline都會對訓練集和驗證集進行StandardScaler預處理操作魄健。
2.使用管道模型對股票漲幅進行回歸分析
2.1數(shù)據(jù)集準備
數(shù)據(jù)集使用的是前面一篇《python機器學習之模型評估與優(yōu)化
》博客中所講解的通過證券交易軟件導出的股票數(shù)據(jù)赋铝,具體導出方法,請看模型評估與優(yōu)化這一篇博客沽瘦。
接下來革骨,我們輸入代碼如下:
#導入pandas
import pandas as pd
stocks = pd.read_csv('C:\\Users\\1003342\\Desktop\\study\\dataset_20190622.csv',encoding='gbk')
#定義數(shù)據(jù)集中的特征X和目標y
X = stocks.loc[:,'現(xiàn)價':'流通股(億)'].values
y = stocks['漲幅%']
#驗證數(shù)據(jù)集形態(tài)
print(X.shape,y.shape)
運行結(jié)果:(3636, 27) (3636,)
結(jié)果分析:從圖中看到數(shù)據(jù)已經(jīng)加載成功农尖,數(shù)據(jù)集中共有3421支股票,每支股票包含27個特征苛蒲。接下來可以先嘗試用MLP多層感知神經(jīng)網(wǎng)絡來進行回歸分析卤橄,看模型的表現(xiàn)如何。當然這里還是使用交叉驗證cross_val_score來進行評分的工作臂外。
輸入代碼:
import numpy as np
for i in range(3636):
arr2=X[i]
for j in range(len(arr2)):
if np.isnan(arr2[j]):
arr2[j] = 0
from sklearn.model_selection import cross_val_score
from sklearn.neural_network import MLPRegressor
scores = cross_val_score(MLPRegressor(random_state=38),X,y,cv=3)
print ('模型平均分:{:.2f}'.format(scores.mean()))
運行代碼窟扑,得到結(jié)果:模型平均分:-17764822391.68
結(jié)果分析:這是一個令人揪心的結(jié)果,模型的表現(xiàn)實在是夠糟糕漏健,得分居然達到-3000多萬嚎货。這是什么原因呢?我們說過MLP對數(shù)據(jù)預處理的要求很高蔫浆,而原始數(shù)據(jù)集中各個特征的數(shù)量級差得又比較遠殖属,因此使用原數(shù)據(jù)集進行訓練,結(jié)果必然很差瓦盛。所以接下來洗显,我們要建立一個管道模型,將數(shù)據(jù)與處理和MLP模型打包進去原环。
2.2建立包含預處理和MLP模型的管道模型
這里再引入一個知識點挠唆,在sklearn中,可以使用make_pipeline來便捷地建立管道模型嘱吗,看如下代碼:
#導入make_pipeline模塊
from sklearn.pipeline import make_pipeline
#對比兩種方法的語法
piepline = Pipeline([('scaler',StandardScaler),('mlp',MLPRegressor(random_state=38))])
pipe = make_pipeline(StandardScaler(),MLPRegressor(random_state=38))
print(piepline.steps)
print(pipe.steps)
從這段代碼中玄组,我們對比了使用Pipelien建立管道模型和使用make_pipeline建立管道模型。這兩種方法的結(jié)果是完全一樣的谒麦。但是make_pipeline要相對更簡潔一些俄讹。我們不需要在make_pipeline中指定每個步驟的名稱,直接把每個步驟中我們希望用到的功能模塊傳進去就可以了绕德。運行代碼患膛,得到如下圖所示的結(jié)果:
結(jié)果分析:
結(jié)果向我們返回了兩種方法建立的管道模型中的步驟,從參數(shù)看耻蛇,兩種方法得到的結(jié)果是完全一致的剩瓶。下面我們繼續(xù)嘗試用交叉驗證cross_val_score來給模型評分,輸入代碼如下:
#進行交叉驗證
scores = cross_val_score(pipe,X,y,cv=6)
print('模型平均分:{}'.format(scores.mean()))
和之前我們直接使用MLP多層感知神經(jīng)網(wǎng)絡不同的是城丧,這次我們用來進行評分的模型是剛剛建立好的管道模型pipe延曙,也就是說在交叉驗證中,每次都會先對數(shù)據(jù)集進行StandardScaler預處理亡哄,再擬合MLP回歸模型枝缔。然后看看結(jié)果如何,運行代碼:
結(jié)果:模型平均分:0.3824022619996266
結(jié)果分析:雖然0.38并不是一個理想的分數(shù),但是對比之前沒有經(jīng)過預處理的-3000多萬分愿卸,可以說模型還是表現(xiàn)得天壤之別灵临。接下來,我們會繼續(xù)向管道模型中添加新的步驟趴荸,并介紹如何調(diào)用每個模塊中的屬性儒溉。
2.3向管道模型添加特征選擇步驟
我們在之前的章節(jié)中介紹過使用隨機森林模型對股票數(shù)據(jù)集進行特征選擇。下面我們嘗試使用pipeline管道模型將特征選擇的部分也添加進來发钝。輸入代碼如下:
#導入特征選擇模塊
from sklearn.feature_selection import SelectFromModel
#導入RFE工具
from sklearn.feature_selection import RFE
#導入隨機森林模型
from sklearn.ensemble import RandomForestRegressor
#建立管道模型
# pipe = make_pipeline(StandardScaler(),
# SelectFromModel(RandomForestRegressor(random_state=38)),
# MLPRegressor(random_state=38))
pipe = make_pipeline(StandardScaler(),
RFE(RandomForestRegressor(n_estimators=100,random_state=38)),
MLPRegressor(random_state=38))
pipe.steps
我們把selectFromModel這個步驟也加進了make_pipeline中顿涣,為了讓多次運行的結(jié)果能夠保持一致,也將隨機森林的random_state進行指定酝豪,我們這里指定為38涛碑。
運行代碼,管道模型pipeline會把其中的所有步驟反饋如下:
結(jié)果分析:我們可以從結(jié)果中看到pipeline中每個步驟所使用的的模型參數(shù)孵淘,這里不再展開解釋蒲障,下面就使用交叉驗證發(fā)來給管道模型進行評分,輸入代碼如下:
#使用交叉驗證進行評分
scores = cross_val_score(pipe,X,y,cv=3)
#打印模型分數(shù)
print('管道模型評分:{}'.format(scores.mean()))
運行代碼結(jié)果:
管道模型評分:0.5453733730647278
結(jié)果分析:對比之前沒有添加特征選擇的管道模型瘫证,這次的pipeline得分雖然也不高揉阎,但比上一有了顯著的提升。當然針對不同數(shù)據(jù)集我們可以在管道模型中增加更多的步驟背捌,以便提高模型的性能表現(xiàn)毙籽。
同樣的,我們還可以提取管道模型中每個步驟的屬性载萌,例如SelectFromModel步驟中惧财,模型選擇了哪些特征巡扇,輸入代碼如下:
#使用管道模擬數(shù)據(jù)
pipe.fit(X,y)
#查詢哪些特征被選擇
mask = pipe.named_steps['rfe'].get_support()
#打印特征選擇的結(jié)果
print(mask)
運行代碼扭仁,會得到如下的結(jié)果:
結(jié)果分析:從結(jié)果中看到,pipeline可以把管道模型中特征選擇SelectFromModel的選擇結(jié)果返回給我們厅翔。
除了進行交叉驗證之外乖坠,pipeline也可以用于網(wǎng)絡搜索來尋找最佳模型以及模型最佳參數(shù)。
3.使用管道模型進行模型選擇和參數(shù)調(diào)優(yōu)
本節(jié)中刀闷,我們一起探索熊泵,如何使用管道模型選擇相對好的算法模型,以及找到模型中更優(yōu)的參數(shù)
3.1使用管道模型進行模型選擇
這部分內(nèi)容主要討論的是甸昏,我們應該如何利用管道模型從若干算法中找到適合我們的數(shù)據(jù)集算法顽分。比如我們想知道,對于股票數(shù)據(jù)集來說施蜜,是使用隨機森林算法好一些卒蘸,還是使用MLP多層感知神經(jīng)網(wǎng)絡好一些,就可以利用管道模型來進行對比。有趣的地方在于缸沃,我們知道MLP需要對數(shù)據(jù)進行良好的預處理恰起,而隨機森林并不需要這么做。因此我們要在設置好管道模型的參數(shù)字典趾牧,輸入代碼如下:
#定義參數(shù)字典
params = [{'reg':[MLPRegressor(random_state=38)],'scaler':[StandardScaler(),None]},
{'reg':[RandomForestRegressor(random_state=38)],'scaler':[None]}]
#對pipeline實例化
pipe = Pipeline([('scaler',StandardScaler()),('reg',MLPRegressor())])
grid = GridSearchCV(pipe,params,cv=3)
grid.fit(X,y)
print('最佳模型是:{}'.format(grid.best_params_))
print('模型最佳得分是:{}'.format(grid.best_score_))
這段代碼中检盼,我們定義了一個字典的列表params,作為pipeline的參數(shù)翘单。在參數(shù)中吨枉,我們指定對MLP模型使用StandardScaler,而RandomForest不適用StandardScaler县恕,所以scaler這一項對應的值是None东羹,運行代碼,會得到如下讓人喜出望外的結(jié)果:
結(jié)果分析:從結(jié)果中可以看到忠烛,隨機森林的得分比之前MLP的得分高出很多属提,看來選擇一個適合的模型真的很重要。經(jīng)過網(wǎng)格搜索的評估美尸,在MLP和隨機森林二者之間冤议,隨機森林的表現(xiàn)要更好一些,分數(shù)達到0.85分师坎,這還是我們沒有調(diào)整參數(shù)的情況下恕酸。下面,我們再試試用網(wǎng)格搜索和管道模型進行模型選擇的同時胯陋,一并尋找更有參數(shù)蕊温。
3.2使用管道模型尋找最優(yōu)參數(shù)
在前面我們已經(jīng)學習了如何用網(wǎng)格搜索來進行參數(shù)調(diào)優(yōu),也掌握了如何使用管道模型進行模型選擇遏乔。不過相信大家會有個新問題:在上一個例子中义矛,我么你對比的兩個模型使用的基本都是默認參數(shù),如MLP的隱藏層盟萨,我們會使用缺省值(100凉翻,),而隨機森林我們使用的n_estimators也默認的10個捻激。那如果我們修改了參數(shù)制轰,會不會MLP的表現(xiàn)超過隨機森林呢?
帶著這個問題胞谭,一起來進行試驗垃杖。我們可以通過在網(wǎng)格搜索中擴大搜索空間,將需要進行對比的模型參數(shù)丈屹,也放進管道模型中進行對比调俘,輸入代碼如下:
#在參數(shù)字典中增加MLP隱藏層和隨機森林中estimator數(shù)量的選項
params = [{'reg':[MLPRegressor(random_state=38)],'scaler':[StandardScaler(),None],'reg__hidden_layer_sizes':[(50,),(100,),(100,100)]},
{'reg':[RandomForestRegressor(random_state=38)],'scaler':[None],'reg__n_estimators':[10,50,100]}]
#對pipeline實例化
pipe = Pipeline([('scaler',StandardScaler()),('reg',MLPRegressor())])
grid = GridSearchCV(pipe,params,cv=3)
grid.fit(X,y)
print('最佳模型是:{}'.format(grid.best_params_))
print('模型最佳得分是:{}'.format(grid.best_score_))
從代碼中可以看到,除了在上一例中我們給管道模型設置的參數(shù)params之外,這次我們把幾個想要試驗的參數(shù)脉漏,也包含在了params的字典當中苞冯,一個是MLP的隱藏層數(shù)量,我們傳入一個列表侧巨,分別是10,50和100.接下來我們就讓GridSearchCV去遍歷兩個模型中所有給出的備選參數(shù)舅锄,看看結(jié)果會有什么變化。運行代碼司忱,看看網(wǎng)格搜索返回的結(jié)果如下:
結(jié)果分析:這次管道所選的最佳模型的結(jié)果仍然隨機森林皇忿,相比未加入?yún)?shù)選擇,這次經(jīng)過選擇的最佳參數(shù)得分有所提升坦仍。
思考:如果繼續(xù)多提供一些參數(shù)供管道模型進行選擇的話鳍烁,如讓隨機森林的n_estimators數(shù)量可以選擇500或1000,那么結(jié)果可能還會不一樣繁扎,我們實驗一下幔荒,輸入代碼如下:
#導入隨機森林模型
from sklearn.ensemble import RandomForestRegressor
#在參數(shù)字典中增加MLP隱藏層和隨機森林中estimator數(shù)量的選項
params = [{'reg':[MLPRegressor(random_state=38)],'scaler':[StandardScaler(),None],'reg__hidden_layer_sizes':[(10,),(100,),(100,100)]},
{'reg':[RandomForestRegressor(random_state=38)],'scaler':[None],'reg__n_estimators':[100,500,1000]}]
#對pipeline實例化
pipe = Pipeline([('scaler',StandardScaler()),('reg',MLPRegressor())])
grid = GridSearchCV(pipe,params,cv=3)
grid.fit(X,y)
print('最佳模型是:{}'.format(grid.best_params_))
print('模型最佳得分是:{}'.format(grid.best_score_))
這次把隨機森林n_estimators參數(shù)的選項設置為100,500,和1000.隨便把MLP模型的max_iter最大迭代次數(shù)增加到1000,這次模型擬合的時間會相對更長一些梳玫,畢竟n_estimators達到500或1000爹梁,是非常消耗計算資源的。
在大約等了1min提澎,網(wǎng)格搜索向我們返回結(jié)果如下:
結(jié)果分析:這一次隨機森林依舊保持領(lǐng)先姚垃,增加了n_estimators數(shù)量的隨機森林,模型得分再一次提高盼忌,模型逐漸變得成熟积糯。