网格搜索与交叉验证

网格搜索算法是一种通过遍历给定的参数组合来优化模型表现的方法。

以决策树为例,当我们确定了要使用决策树算法的时候,为了能够更好地拟合和预测,我们需要调整它的参数。在决策树算法中,我们通常选择的参数是决策树的最大深度。于是我们会给出一系列的最大深度的值,比如 {'max_depth': [1,2,3,4,5]},我们会尽可能包含最优的最大深度。不过如何评价哪一个最大深度的模型是最好的呢?我们需要一种可靠的评分方法,对每个最大深度的决策树模型都进行评分,这其中非常经典的一种算法就是交叉验证。

我们以K折交叉验证为例,详细介绍它的算法过程:

首先将原始数据集按照一定比例划分为训练集和测试集

训练集用来训练我们的模型。测试集用来评估我们训练好的模型表现如何。

在K折交叉验证中,我们用到的数据是训练集中的所有数据。我们将训练集的所有数据平均划分为K份,取第K份作为验证集,余下的K-1份作为交叉验证的训练集。

对于我们最开始选择的决策树的5个最大深度,以max_depth=1为例,我们先用第2-10份数据作为训练集的训练模型,用第一份数据作为验证集对这次训练的模型进行评分,得到第一个分数。然后重新构建一个max_depth=1的决策树。用第1和3-10份数据作为训练集训练模型,用第2份数据作为验证集对这次训练的模型进行评分,得到第二个分数,以此类推,得到第十个分数。于是对于max_depth=1的决策树模型,我们训练了10次,验证了10次,得到了10个验证分数。然后计算这10个验证分数的平均分数,就是max_depth=1的决策树模型的最终验证分数。

对于max_depth = 2,3,4,5时,分别进行和max_depth=1相同的交叉验证过程,得到他们的最终验证分数,然后我们就可以对这5个最大深度的决策树的最终验证分数进行比较,分数最高的那一个就是最优的最大深度。我们利用最优参数在全部训练集上训练一个新的模型,整个模型就是最优模型。

发布了28 篇原创文章 · 获赞 9 · 访问量 4658

猜你喜欢

转载自blog.csdn.net/chixi123/article/details/103958126