大家好,我是志斌~今天给大家分享一下如何使用GridSearch网格搜索和K-fold交叉验证调优决策树模型的参数。上一篇文章介绍了决策树模型的搭建和实战。当时只用了max_depth一个参数,但模型其实还有其他影响参数,比如criterion(特征选择标准),class_weight(类别权重)等参数。如果我们想要更准确的结果,就需要调整模型参数,找到最优的参数来建立模型。1.K-foldcross-validationK-foldcross-validation其实就是把一个数据集分成K份,每次都选择K-1份作为训练集,剩下的部分作为测试集,然后取平均值测试K个模型的结果作为最终的模型效果。如下图所示:K值的选取与数据集的大小有关。如果数据集较小,则增大K值,如果数据集较大,则减小K值。实现代码如下:fromsklearn.model_selectionimportcross_val_scoreacc=cross_val_score(model,X,Y,cv=5)2.GridSearch网格搜索GridSearch网格搜索是一种穷举搜索参数调优方法,它会遍历所有的Candidate参数,并且评估每个模型的有效性和准确性,并选择最佳参数作为最终结果。参数整定分为单参数整定和多参数整定。志斌给大家举个例子。(1)单参数调优我们以单参数max_depth参数为例来演示单参数调优。代码如下:fromsklearn.model_selectionimportGridSearchCVparam={'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)fromsklearn.metricsimportroc_auc_score=roc_auc_score(Y_test.values,y_pred_proba[:,1])高于之前的0.958。看起来模型的准确性提高了。(2)多参数调优决策树模型有以下几个参数:这些参数会影响我们构建的决策树模型的准确性。这里我们使用max_depth(最大深度)、criterion(特征选择标准)、min_samples_split(子节点向下分裂所需的最小样本数),以这三个参数为例进行多参数调参,代码为如下:fromsklearn.model_selectionimportGridSearchCVparams={'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_We使用上面得到的参数的最优值重建模型,看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)fromsklearn.metricsimportroc_auc_scorescore=roc_auc_score(Y_test_probabilities,1])得到的AUC值是:比之前的0.985高了,看来模型进一步优化了。
