K折交叉验证与GridSearch网格搜索

人工智能 机器学习
大型模型在许多任务上都产生了令人印象深刻的结果,但是训练和微调的成本很高,而且解码速度过慢,以至于研究和使用难度提升。华沙大学,谷歌研究和OpenAI的学者们通过利用稀疏性来解决这个问题。他们研究了模型中所有层级的稀疏变量,并提出了下一代Transformer模型族-Scaling Transformers。

大家好,我是志斌~

今天跟大家分享一下如何用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有所提高,看来模型得到进一步优化。

责任编辑:武晓燕 来源: 志斌的python笔记
相关推荐

2017-10-18 16:08:15

可视化交叉验证代码

2023-11-06 18:32:04

交叉验证机器学习

2022-12-15 16:53:55

2010-02-06 14:31:54

ibmdw云计算

2023-03-27 08:00:00

机器学习人工智能

2009-07-31 17:02:51

ibmdw云计算

2017-06-26 10:43:22

互联网

2022-08-14 16:04:15

机器学习数据集算法

2023-11-01 08:08:22

k8s服务网格

2020-02-18 12:13:25

摩托罗拉|Rezr|联

2023-02-13 15:00:13

机器学习scikit-leaPyTorch

2010-03-23 14:20:22

2019-11-18 20:34:55

折叠屏平板电脑手机

2018-05-28 11:03:22

交叉验证时序数据数据集

2018-01-23 10:29:50

主搜索店铺搜索

2012-10-23 16:12:35

2023-11-07 17:32:31

Istiok8s

2022-02-17 13:04:57

网络验证运营商

2010-03-22 16:49:46

2012-07-31 15:52:48

云计算网格计算
点赞
收藏

51CTO技术栈公众号