K折交叉驗(yàn)證與GridSearch網(wǎng)格搜索
大家好,我是志斌~
今天跟大家分享一下如何用GridSearch網(wǎng)格搜索和K折交叉認(rèn)證對(duì)決策樹模型進(jìn)行參數(shù)調(diào)優(yōu)。
上一篇文章給大家介紹了決策樹模型的搭建和實(shí)戰(zhàn),當(dāng)時(shí)只用到了一個(gè)參數(shù)max_depth,但是模型實(shí)際上還有其他影響參數(shù),如criterion(特征選擇標(biāo)準(zhǔn))、class_weight(類別權(quán)重)等參數(shù)。如果我們想要更精確的結(jié)果,那么勢必要對(duì)模型參數(shù)進(jìn)行調(diào)整,找到最優(yōu)參數(shù),來構(gòu)建模型。
1.K折交叉驗(yàn)證
K折交叉驗(yàn)證實(shí)際上是將一個(gè)數(shù)據(jù)集分成K份,每次選K-1份為訓(xùn)練集,用剩下的一份為測試集,然后取K個(gè)模型的平均測試結(jié)果作為最終的模型效果。如下圖所示:

K值的選取跟數(shù)據(jù)集的大小有關(guān),數(shù)據(jù)集較小則增大K值,數(shù)據(jù)集較大則減小K值。實(shí)現(xiàn)代碼如下:
from sklearn.model_selection import cross_val_score
acc = cross_val_score(model,X,Y,cv=5)
2.GridSearch網(wǎng)格搜索
GridSearch網(wǎng)格搜索是一種窮舉搜索的參數(shù)調(diào)優(yōu)方法,它會(huì)遍歷所有的候選參數(shù),并評(píng)估每個(gè)模型的有效性和準(zhǔn)確性,選取最好的參數(shù)作為最終結(jié)果。
參數(shù)調(diào)優(yōu)分為單參數(shù)調(diào)優(yōu)和多參數(shù)調(diào)優(yōu),志斌分別給大家舉例介紹一下。
(1)單參數(shù)調(diào)優(yōu)
我們以單參數(shù)max_depth參數(shù)為例,來演示單參數(shù)調(diào)優(yōu),代碼如下:
from sklearn.model_selection import GridSearchCV
param = {'max_depth':[1,3,5,7,9]}
grid_search = GridSearchCV(model,param,scoring='roc_auc',cv=5)grid_search.fit(X_train,Y_train)
輸出參數(shù)的最優(yōu)結(jié)果:
grid_search.best_params_
得到max_depth參數(shù)的最優(yōu)結(jié)果為:

我們用上面獲得的參數(shù)最優(yōu)值重新搭建模型,來查看AUC值是否得到了提高,代碼如下:
model = DecisionTreeClassifier(max_depth=7)
model.fit(X_train,Y_train)
y_pred_proba = model.predict_proba(X_test)
from sklearn.metrics import roc_auc_score
score = roc_auc_score(Y_test.values,y_pred_proba[:,1])
得到的AUC值為:

比之前的0.958有所上升,看來模型的準(zhǔn)確度有所上升。
(2)多參數(shù)調(diào)優(yōu)
決策樹模型有下圖這些參數(shù):

這些參數(shù)都會(huì)影響我們搭建的決策樹模型的準(zhǔn)確性,這里我們以max_depth(最大深度)、criterion(特征選擇標(biāo)準(zhǔn))、min_samples_split(子節(jié)點(diǎn)向下分裂所需最小樣本數(shù)),這三個(gè)參數(shù)為例,來進(jìn)行多參數(shù)調(diào)優(yōu),代碼如下:
from sklearn.model_selection import GridSearchCV
params = {'max_depth':[5,7,9,11,13],'criterion':['gini','entropy'],'min_samples_split':[5,7,9,11,13,15]}
model = DecisionTreeClassifier()
grid_search = GridSearchCV(model,params,scoring='roc_auc',cv=5)
grid_search.fit(X_train,Y_train)
輸出參數(shù)的最優(yōu)值:
grid_search.best_params_

我們用上面獲得的參數(shù)最優(yōu)值重新搭建模型,來查看AUC值是否得到了提高,代碼如下:
model = DecisionTreeClassifier(criterion='entropy',max_depth=13,min_samples_split=15)
model.fit(X_train,Y_train)
y_pred_proba = model.predict_proba(X_test)
from sklearn.metrics import roc_auc_score
score = roc_auc_score(Y_test.values,y_pred_proba[:,1])
得到的AUC值為:

比之前的0.985有所提高,看來模型得到進(jìn)一步優(yōu)化。















 
 
 












 
 
 
 