大家好,我是志斌~
今天跟大家分享一下如何用GridSearch网格搜索和K折交叉认证对决策树模型进行参数调优。
上一篇文章给大家介绍了决策树模型的搭建和实战,当时只用到了一个参数max_depth,但是模型实际上还有其他影响参数,如criterion(特征选择标准)、class_weight(类别权重)等参数。如果我们想要更精确的结果,那么势必要对模型参数进行调整,找到最优参数,来构建模型。
1.K折交叉验证
K折交叉验证实际上是将一个数据集分成K份,每次选K-1份为训练集,用剩下的一份为测试集,然后取K个模型的平均测试结果作为最终的模型效果。如下图所示:
K值的选取跟数据集的大小有关,数据集较小则增大K值,数据集较大则减小K值。实现代码如下:
from sklearn.model_selection import cross_val_score
acc = cross_val_score(model,X,Y,cv=5)
2.GridSearch网格搜索
GridSearch网格搜索是一种穷举搜索的参数调优方法,它会遍历所有的候选参数,并评估每个模型的有效性和准确性,选取最好的参数作为最终结果。
参数调优分为单参数调优和多参数调优,志斌分别给大家举例介绍一下。
(1)单参数调优
我们以单参数max_depth参数为例,来演示单参数调优,代码如下:
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)
输出参数的最优结果:
grid_search.best_params_
得到max_depth参数的最优结果为:
我们用上面获得的参数最优值重新搭建模型,来查看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有所上升,看来模型的准确度有所上升。
(2)多参数调优
决策树模型有下图这些参数:
这些参数都会影响我们搭建的决策树模型的准确性,这里我们以max_depth(最大深度)、criterion(特征选择标准)、min_samples_split(子节点向下分裂所需最小样本数),这三个参数为例,来进行多参数调优,代码如下:
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)
输出参数的最优值:
grid_search.best_params_
我们用上面获得的参数最优值重新搭建模型,来查看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有所提高,看来模型得到进一步优化。