00:01
第六章算法令与管道。对于许多机器学习算法,你提供的特定数据表示非常的重要,正如第四章中所述。我们在第三章中讲过,首先对数据进行缩放,然后手动合并特征,再利用无监督机器学习来学习特征。因此,大多数机器学习应用不仅需要应用单个算法,而且还需要将许多不同的处理步骤和机器学习模型链接在一起。本章将介绍如何使用pipeline类来简化构建变化和模型链的过程。我们将重点介绍如何将PI内和grab search CV结合起来,从而同时搜索所有处理步骤中的参数。举一个例子来说明模型链的重要性。
01:00
我们知道可以通过minimax k进行预处理来大大提高和SVM在勘测数据集上的性能。下面这些代码实现划分数据,计算最小值和最大值,缩放数据与训练SVM。
06:02
6.1利用预处理进行参数选择。现在假设我们希望利用grab search CV。找到更好的SBC参数。正如第五章中所做的那样,我们应该怎么去做?一种简单的方法可能如下所示。
07:47
嗯。
09:31
这里我们利用缩放后的数据对SBC参数进行网格搜索。但是。上面的代码中有一个不易察觉的陷阱,在缩放数据时,我们使用了训练其中的所有数据来找到训练的方法。然后,我们使用缩放后的训练数据来运行交叉验证的网格搜索。对于交叉验证中的每一次划分,原始训练集的一部分被划分为训练部分,另一部分被划分为测试部分。测试部分用于度量在训练部分上所训练的模型在新数据上的发现,但是我们在缩放数据时已经使用过测试部分中所包含的信息。
10:20
请记住,交叉验证每次划分的测试部分都是训练集的一部分,我们使用整个训练集信息来找到数据的正确缩放。对于模型来说,这些数据与新数据看起来截然不同。如果我们观察新的数据,比如测试集中的数据,那么这些数据并没有。用于对训练数据进行缩放,其最大值和最小值也可能与训练数据不同。下面这个例子显示了交叉验证与最终评估这两个过程中数据处理的不同之处。
11:26
因此,对于建模过程交叉验证中。的划分无法正确的反映新数据的特征。我们已经将这部分数据的信息泄露立刻给建模过程,这将导致在交叉验证过程中得到过于乐观的结果。并可能会导致选择次优的参数。为了解决这个问题,在交叉验证的过程中,应该在进行任何预处理之前完成数据集的划分,任何从数据集中提取的信息处理过程都应该仅有。
12:08
并且仅应用于数据集的训练部分,因此任何交叉验证都应该位于处理过程的最外层循环。在三论中。要想使用cross v al or函数和grab测试CD函数。实现这么一点,可以使用pipepeline类。pipeline类可以将多个处理步骤合并,Glu为单个估计器。pipepeline类本身具有fix predict和score方法,其行为与S中的其他模型相同。piline类最常见的用例是将预处理步骤比如数据缩放与一个监督模型比如分类器连接在一起。6.2构建管道。我们来看一下如何使用pipeline类来表示,在使用minimax scale缩放数据之后,再训练一个SBM的工作流程,暂时不用网格搜索。首先我们构建一个由步骤列表组成的管道对象,每个步骤都是一个圆组,其中。
13:16
包含一个名称,你选定的任意字符串。当然,也不是任意的。该名称不能包含双下划线。和一个估计器实力。
14:22
这里我们创建了两个步骤,一个叫做K。也就是第一个是mini max实例。第二个叫做SVM,是SVC的实例。现在我们可以像任何其他S空机器一样来拟合这个管道。
15:02
这里pa.fit首先对第一个步骤,也就是播放器调用F,然后使用该缩放器对训练数据进行变换,最后用缩放后的数据来拟合SVM。要想在测试数据上进行评估,我们只需调用派点score方法。嗯。如果对管道调用score方法,则首先使用缩放器对测试数据进行变换,然后利用缩放后的测试数据对SBM调用score方法。如你所见,这个结果与我们从本章开头的代码得到的结果手动进行数据变换是相同的。利用管道,我们减少了预处理加分类过程所需要的代码量,但是使用管道的主要优点在于我们可以在cross v or或者GR测试CV中使用这个估计器。
16:27
6.3在网格搜索中使用管道在网格搜索中使用管道的工作原理与使用任何其他的呼吸器都是一样的。我们定义一个需要搜索的参数网格,并利用管道和参数网格构建一个GRA4CV。不过在指定参数网格时存在一处细微的变化,我们需要为每个参数指定它在管道中的所属的步骤。我们要调节的两个参数C和伽马都是SVC的实例,都是SVC的参数。
17:04
属于第二个步骤,我们给这个步骤的名称是F比。为管道定义参数网格的语法是为每个参数指定步骤名称,后面加上双下划线,然后是参数名称。因此,要想搜索SVMSVC的C参数,必须使用SVM双向号线C作为参数网格字典的键,对伽玛参数也是同理。
18:23
有了这个参数网格,我们可以像平常一样使用gra CD。
19:45
与前面所做的网格搜索不同。现在对于交叉验证的每次划分来说,仅使用训练部分对mini进行拟合,测试部分的信息没有泄露到参搜索中。
20:26
这两幅图大家可以做一个对比。在交叉验证中,信息泄露的影响大小取决于于处理步骤的性质。使用测试部分来估计数据的范围通常不会产生可怕的影响,但在特征提取和特征选择中,使用测试部分则会导致结果的显著差异。下面我们来举例说明一下信息泄露。
21:06
书上给出了一个交叉验证中信息泄露的一个很好的例子。这个例子参考的是统计学习基础这一本书。书上给我们复制了一个修改的版本。我们考虑一个假想的回归任务,包含从高斯分布中独立采样的100个样本与1万个特征。我们还从高斯分布中对响应Y进行采样。
22:23
考虑到我们创建数据集的方式,数据X与目标Y之间没有任何关系,他们是独立的,所以应该不可能从这个数据集中学到任何东西。现在,我们将完成下列工作。首先,利用。Left。特征选择,从1万个特征中选择信息量最大的特征,然后使用交叉验证对对的回归进行评估。
26:01
交叉验证计算得到的平均二方分数为0.91。表示这是一个非常好的模型,这显然是不对的,因为我们的数据是完全随机的。这里的特征选择从1万个随机特征中碰巧选出了。与目标相关性非常好的一些特征。由于我们在交叉验证之外对特征选择进行拟合。所以他能够找到在训练部分和测试部分都相关的特征,从测试部分泄露出去的信息包含的信息量非常的大,导致得到非常不切实际的结果。我们将这个结果与正确的交叉验证,也就是使用管道进行一下对比。
28:26
这一次我们得到了负的R方分数,表示模型很差劲,利用管道特征选择现在位于交叉验证循环的内部。也就是说。请使用数据的训练部分来选择特征。而不去使用测试的部分特征,选择找到的特征在训练集中与目标相关,但由于数据是完全随机的,这些特征在测试题中并不与目标相关。在这个例子中。
29:00
修正特征选择中的数据泄露问题,结论也由模型表现很好变为模型根本就没有效果。
我来说两句