00:01
5.2.3带交叉验证的网格搜索。虽然将数据划分为训练集、验证集和测试集的方法是可行的,也相对常用,但这种方法对数据的划分方法相当的敏感。从上面代码片段的输出中可以看出,网格搜索选择C等于十,伽马等于0.001作为最佳参数。再往上面。这一段代码输出选择C等于100,伽马等于0.011作为最佳参数,为了得到对泛化性能的更好估计。我们可以使用交叉验证来评估每种参数组合的性能,而不是仅将数据单次划分为训练集、验证集。这种方法用代码表示。
02:08
要想使用五折交叉验证对C和伽玛特定取值的一的精度进行评估,需要训练36乘以五等于180个模型。你可以想象,使用交叉验证的主要缺点就是训练所有这些模型所花费的时间。这里的可视化说明了上述代码如何选择最佳的参数设置。对于每一种参数设置需要计算五个精度值,交叉验证的每次划分都要计算一个精度值,然后对每种参数设置计算平均验证精度,最后选择平均验证精度最高参数用圆圈来标记。
03:14
正如前面所说,交叉验证是在特定数据集上对写因算法进行评估的一种方法,但它通常与网格搜索等参数搜索方法结合起来使用。因此,许多人使用交叉验证cross validation这一术语来通俗的指代带交叉验证的网格搜索。划分数据,运行网格搜索并评估最终参数。下面给出整个过程的可视化。
04:00
由于带交叉验证的网格搜索是一种常用的调参方法,因此S提供了gra search CD类,它以估计器s command的形式实现了这种方法。要使用gra search CV类,你首先需要用一个字典指定要搜索的参数,然后gra search c会执行所有必要的模拟模型拟合。字典的键是我们要调节的参数名称,在构建模型时给出在这个例子中是C和砝码。字典的值是我们想要尝试的参数,设置如果C和伽马想要尝试的取值。为零点零一零点零一零点一一十和100,可以将其转化为下面的这样一个字点。
06:00
现在我们可以使用模型SVC要搜索的参数网格grab与要使用的交叉验证策略,比如五折分层交叉验证,将gra设置C1类。做一下实例化。
07:09
Grab测试CV将使用交叉验证来代替之前用过的划分训练题和验证题的方法。但是我们仍需要将数据划分为训练集和测试集,以避免参数过拟合。
08:00
我们创建的gra search对象行为就像一个分类器,我们可以对它调用标准的system predict方法。注意,用另一个估计器创建的S勒估计器被称为原估计器,Maxma gra search c是最常用的原估计器,但后面我们将会看到更多。但我们在调用时,它会对bread。这个字典指定的每种参数组合。运行交叉验证。拟和测试CD对象不仅会搜索最佳的参数,还会利用最佳交叉验证性能的参数,在整个训练数据集上自动拟合一个新的模型。因此,F完成的工作相当于。
09:19
开始。这一整顿代码的结果。Gra设置C类提供了一个非常方便的接口,可以用predict和sport方法来访问重新训练过的模型。为了评估找到的最佳参数的泛化能力,我们可以在测试题上调用school方法。
10:25
利用交叉验证选择参数,我们实际上找到了一个在测试集上精度为97%的模型。重要的是,我们没有使用测试集来选择参数。我们找到的参数保存在best parents属性中,而交叉验证最佳精度对于这种参数设置不同划分的平均进度保存在best for。
11:47
同样注意不要将best score与模型在测试题上调用化方法计算得到的泛化性能弄混。使用score方法或者对predict方法的输出进行评估,采用的是在整个训练集上训练的模型,而best score属性保存的是交叉验证的平均精度,是在测试集上进行交是在训练机上进行交叉验证得到的能够访问实际找到的模型。
12:16
这有时是很有帮助的,比如查看系数或者特征重要性。你可以用best属性来访问最佳参数对应的模型,它是在整个训练集上训练得到的。
13:10
由于gra测试本身具有predict和方法,所以不需要使用best matter属性来进行预测或评估模型。分析交叉验证的结果。将交叉验证的结果可视化,通常有助于理解模型大化能力对所搜索参数的依赖关系。由于运行网格搜索计算成本相当的高,所以通常最好从相对比较稀疏且较小的网格开始搜索。然后我们可以检查交叉验证。网格搜索的结果可能也会扩展搜索范围。网格搜索的结果可以在CV results属性中找到,它是一个字典,其中保存了搜索的所有内容。
14:34
你可以在输出中看到它里面包含了很多细节,当然最好将其转换为pandas数据框后再去查看。
15:47
Results中的每一行对应一种特定的参数设置。对于每种参数设置交叉验证。所有划分的结果都被记录下来,所有划分的平均值和标准差也被记录下来。由于我们搜索的是一个二维参数网格C和伽马,所以最适合用热图做一下可视化。我们首先提取平均验证分数,然后改变分数数组的形状,使其坐标轴分别对应于C和伽马。
17:47
热图中的每个点对应于运行一次交叉验证以及一种特定的参数设置。颜色表示交叉验证的精度,浅色表示高精度。
18:00
深色表示低精度,你可以看到SVMSVC对参数设置非常的敏感,对于多种参数设置,精度都在40%左右,这是非常糟糕的,对于其他参数,设置,精度约为96%。我们可以从这张图中看出以下几点,首先,我们调节的参数对于获得良好的性能非常重要,这两个参数C和砝码都很重要,因为调节它们可以将精度从40%提高到96%。此外。在我们选择的参数范围中,也可以看到输出发生了显著的变化。同样重要的是要注意参数的范围要足够大,每个参数的最佳取值不能位于图像的边界上。
24:39
下面我们来看这么几张图。其结果不那么理想,因为选择的搜索范围不合适。
25:09
第一张图。精度上基本上没有变化。在这种情况下,这是由参数C和伽玛不正确的缩放以及不正确的范围造成的。但如果对于不同的参数设置都看不到精度的变化。也可能是因为这个参数根本不重要,最好在开始尝试时尝试非常极端的值,以观察参数是否导致精度发生变化。第二张图显示的是垂直的条形模式。这表示只有伽马的设置精度,伽马的设置对精度是有影响的,这可能意味着伽马参数的搜索范围是我们所关心的,而C参数并不是。
26:02
也可能意味着C参数并不重要。第三张图C和伽塔的对应精度都在变化,但可以看到在图像的整个左下角都没有发生什么有趣的事情。我们在后面的网格搜索中可以不考虑非常小的值,最佳参数设置出现在右上角。由于最佳参数位于图像的边界,所以我们可以认为在这个边界之外可能还有更好的取值。我们可能希望改变搜索范围,以包含这一区域内的更多的参数。基于交叉验证分数来调节参数网格是非常的好。也是探索不同参数的重要性的好方法。但是你不应该在最终测试集上测试不同的参数范围。前面说过,只有确切知道了想要使用的模型,才能够对测试集进行评估。
27:03
注意到这里有个新的函数囊派space。实际上,None派点lifes space只差一步就可以变成none派点lot。None减boxpa,这是对应的函数原型。None space假设这些参数是调用的时候传进来的时差,它就等价于base的nine space。对应参数传上。注意把e step false其余的。一对应起来,Stop对应stop stop对应stop,那对应,那以此为。D type也是对应这里的D。参数,Start stop。And point和type这四个参数。
28:04
我不对这五个参数。它和none life space差不多,自己去看一下吧,重点是这个base。浮点数可选参数默认10.0对数空间的底范围倍大于零,并且倍数不等于一。继续回到书上,看到书上209页二在非网格的空间中搜索。在某些情况下,尝试所有参数的所有可能组合,正如grab search CD所做的那样,并不是一个好主意。例如fvc有一个克no参数,根据所选择的克no也就是内核,其他参数也是与之相关的。如果科录等于Li,那么模型是线性的,只会用到C参数,如果刻录等于RBF,则需要使用C和伽尔法两个参数,但用不到类似点的其他参数。
29:06
在这样一种情况下,搜索C伽马和科诺所有可能组合没有意义。如果ke等于line,那么伽ma是用不到的,尝试伽马的不同取值将会浪费时间。为了处理这种条件,Condition的参数gra such CD的time grab可以是字典组成的列表,A list of dictionaries列表中的每个字典可扩展为一个独立的网格,包含内核与参数的网格搜索。
31:36
在第一个网格中,克参数始终为RBF,注意克no是一个长度为一的列表,而C和伽玛都是变化的。在第二个网格中,科目参数始终等你来,只有C是变化的。下面我们来应用这个更加复杂的参数搜索。
32:58
嗯。
33:09
我们再次查看c results。
34:33
正如所料,如果科诺等于line。只有C是在变化的。
我来说两句