你做错了!是时候学习验证模型的正确方法了。有什么重要的事情需要注意吗?一个ccidental污染.
在过去,我们已经讨论了计算模型预测准确性的重要性,方法是将模型应用到之前没有训练过的数据点上,并将模型的预测与该测试集的已知真实结果进行比较。
如果您为非重叠的测试用例重复此操作多次,就像您在交叉验证您最终会得到一个关于模型在新案例中表现如何的可靠估计。
这种方法通常是进行模型选择的良好基础,即回答哪种类型的模型(想一想:“随机森林还是线性回归?”)将在未来对我的数据表现最好的问题。
那么一切都好了,对吧?错了!问题是,如果以错误的方式执行交叉验证,仍然很容易将测试数据的信息泄露到训练数据中。
我们称之为现象污染训练数据。污染提供了机器学习方法在训练中不应该获得的信息。leyu体育是真的吗
有了污染,与此信息不可用的情况相比,模型将比您预期的执行得更好。这就是为什么意外污染会导致对该模型未来表现的过于乐观的估计。
中的k-最近邻分类器的例子可以说明这种影响我们以前的文章,其中训练误差(在这种情况下所有信息都是可用的)为0%,而测试误差为50%,因此并不比随机猜测数据点的类别好。
正如我们将在下面看到的,如果您将有关测试数据的信息泄露到训练阶段,也会发生同样的效果。测试误差变成训练误差,比没有污染的预期要低。因此,如果使用交叉验证错误,那么您为避免信息泄漏所做的所有努力都是无意义的。
不幸的是,大多数乐鱼体育官方app数据科学平台甚至不支持执行交叉验证的正确方式!令人震惊的,不是吗?这就是为什么这么多数据科学家犯这个错误的主要原因。
3个污染例子
下面是一些典型的情况,由于测试数据的信息泄露,可能会发生训练数据的意外污染。
这绝不是一个完整的例子列表,但它应该足以让您对这个问题有一个大致的了解,以及如果您想避免这种情况,应该注意什么。
1.污染通过归一化
让我们从一个非常常见的情况开始:您希望规范化数据,以便所有列都具有相似的范围,并且没有列遮蔽其他列。
在使用任何基于相似度的模型(如k-Nearest Neighbors)之前,这一点尤其重要。
这似乎是一个简单的任务:只是规范化数据,然后训练模型,并用交叉验证验证它。这是它在RapidMiner中的样子:
图1:这个RapidMiner Studio流程只是在模型验证之前对数据执行规范化(z-转换)。
看起来不错,你说呢?错了!因为这种方法会导致错误的误差估计。
如果在交叉验证之前对数据进行规范化,那么在规范化训练数据的过程中,实际上会泄露有关测试数据分布的信息。
尽管您没有使用测试数据来训练模型,但是您仍然将一些关于它的信息灌输到训练数据中。这就是为什么我们称这种效应为污染。
相反,您应该做的是在交叉验证中执行规范化,并且只对训练数据进行规范化。然后将收集到的关于训练数据的信息用于测试数据的转换。这就是RapidMiner Studio可视化界面派上用场的地方,因为你可以很容易地看到正确的设置:
图2:这是您如何正确评估归一化对模型精度的影响。从训练数据的归一化中得到的参数被交付到测试阶段并在测试阶段使用,而不是反过来使用。
请注意,我们将数据直接输入交叉验证操作符,并在其中执行所有必要的步骤。在左侧的训练阶段要做的第一件事是只规范化训练数据。
然后将转换后的数据交付给机器学习方法(在本例中为逻辑回归)。leyu体育是真的吗然后,从归一化得到的预测模型和转换参数都被交付到右边的测试阶段。
在这里,我们首先根据在训练数据中发现的分布对测试数据进行转换,然后在转换后的测试数据上应用预测模型。最后,我们像往常一样计算误差。
这个表总结了经过标准化处理的交叉验证的测试误差之前如图1所示的交叉验证和第二种标准化验证内部如图2所示的交叉验证。
它清楚地显示了如果你验证模型而不测量数据预处理本身的影响,对错误的影响:
表1:在交叉验证之前(“错误”)或内部进行归一化的交叉验证测试错误。您可以清楚地看到,在“错误”案例中,训练数据的污染导致了过度乐观的错误估计。
如果在交叉验证之前进行归一化,则计算误差在所有情况下都过于乐观,数据科学家将在投入生产时遇到负面意外。
平均而言,逻辑回归的实际误差高出3.9%,k-最近邻(k=5)的实际误差高出3.4%。随机森林的差异为0%,因为无论数据是否标准化,模型都不会发生任何变化。
总的来说,你可以看到,效果不像仅仅使用训练误差那么剧烈,但仍然有超过8%的差异在某些情况下,高于大多数人的预期。这是由于只验证模型本身,而不是数据预处理的影响。
需要注意的最后一件重要的事情是:无论您是在交叉验证外部还是内部执行规范化,模型实际上在生产中执行的方式大致相同。
在构建生产模型时,通常会使用完整数据集,因此也会对完整数据应用规范化。
但该模型的性能将是较低的一个,几乎在上表中“嵌套”列所示的范围内。
因此,正确的验证并不能帮助您创建更好的模型,相反,它告诉您模型在生产中工作得有多好(或多差),而不会让您在以后遇到灾难性的失败。
2.参数优化污染
接下来让我们看看模型的优化参数的影响,例如,在随机森林的情况下,集合中的树的数量,或在k个最近邻的情况下,参数k决定了用于寻找预测的邻居的数量。
数据科学家经常寻找最佳参数来提高模型的性能。他们可以通过手动更改参数值,并通过使用指定的参数交叉验证模型来测量测试误差的变化。
或者他们可以使用自动方法,如网格搜索或进化算法。目标是始终为手头的数据集找到性能最好的模型。
就像上面提到的规范化情况一样,对于大多数数据科学家来说,使用在优化过程中发现的交叉验证测试错误听起来像是一个很好的计划——但不幸的是,它不是。
如果你把(自动)参数优化方法想象成另一种机器学习方法,它试图根据你的数据调整预测函数,这一点就会立刻变得清楚。leyu体育是真的吗
如果您只验证这个“更大的”内部的错误leyu体育是真的吗方法和传递这些错误到外部,你有效地把内部的测试错误变成一种过度乐观的训练错误。
在参数优化的情况下,这是机器学习中一个众所周知的现象。leyu体育是真的吗如果您选择的参数使给定测试集上的错误最小化,则您只是在为这个特定测试集优化这个参数设置—因此这个错误不再代表您的模型。
许多数据科学家建议在测试集之外使用所谓的验证集。所以您可以首先使用您的测试集来优化您的参数设置,然后您可以使用您的验证集来验证参数优化的错误加上这个集上的模型。
这种验证集方法的问题是,它与我们前面讨论的单一测试集问题是相同的。如果只使用验证集,则无法获得适当交叉验证的所有优点。
但是您可以通过在彼此之间嵌套多层交叉验证来正确地做到这一点。内部交叉验证用于确定特定参数设置的误差,可以在自动参数优化方法内部使用。
这种参数优化成为新的机器学习算法。leyu体育是真的吗现在,您可以简单地围绕这个自动参数优化方法封装另一个外部交叉验证,以正确计算生产场景中可能出现的错误。
这在写作中听起来很复杂,但是视觉表现可以帮助我们理解正确的设置。下图为外部交叉验证与内部参数优化:
图3:正确验证一个参数优化需要两个交叉验证,一个内部验证指导搜索最优参数,一个外部验证(如图所示)在一个独立的验证集中验证这些参数。
图4:外部交叉验证的内部。在左边的训练阶段,是一个自动搜索的最优参数集,它使用另一个内部交叉验证(没有显示)。然后利用最优参数对最终模型进行评价。
由于机器学习中对独立验证集的需求是已知的,许多人认为正确的验证对错误的影响一定是相当高的。leyu体育是真的吗
但事实证明,虽然对测试误差肯定有影响,但在上面的归一化情况下,它比对正确测试误差的影响要小。结果如下表所示:
表2:我们使用自动网格搜索进行参数优化。列“Wrong”显示了显示从引导搜索的验证传递的交叉验证错误的简单方法。“嵌套”显示了正确的估计。
正如预期的那样,使用“Nested”方法正确验证的错误要高于直接从用于引导搜索的验证中提取的错误(“Wrong”列)。
但差异相当小,平均约为0.5%,最大偏差为1%。尽管如此,在您的期望和模型在生产中的表现之间,即使只有1%的差异也可能是一个巨大的、代价高昂的惊喜。
3.通过特征选择造成污染
作为最后一个例子,让我们看看另一个预处理步骤,这是为了优化机器学习模型的准确性而经常执行的步骤,即特征选择。leyu体育是真的吗
目标是选择模型使用的特征或数据列的最佳子集。理论上,许多模型都可以自己进行选择,但实际上,嘈杂的列可能会使模型失效,最好只保留那些提供有意义信息的列。
与参数优化类似,数据科学家可以手动选择一个特征子集,并通过只使用减少的特征集的数据计算交叉验证的测试误差来评估模型的准确性。
由于组合的数量随着输入数据中列的数量呈指数增长,这通常不是一个可行的方法;自动优化技术得到广泛应用的原因。
但就像参数优化一样,选择最优特征集基本上是对预测模型训练的延伸,也需要进行适当的验证。
当然,您可以使用一个额外的保留集来在最后评估任何构建的模型。但是与以前一样,您最终只使用一个验证集的缺点。
更好的选择是将自动特征选择(使用内部交叉验证来指导对最优特征集的搜索)再次嵌套到外部交叉验证中,就像我们在参数优化时所做的那样。
正确的设置从外部交叉验证开始,就像上面描述的那样,我们使用外部交叉验证来评估参数优化的性能。交叉验证的内部设置看起来略有不同,如下所示:
图5:对外部交叉验证的训练数据使用自动进化特征选择。在训练模型并将其交付到测试阶段之前选择最佳特征集,在测试阶段再次应用它,然后进行预测。
下面是交叉验证错误版本的结果,你没有正确验证特征选择的效果,只使用优化运行期间发现的最优特征集的性能值。列" Nested "中的值是用上面描述的外部交叉验证的正确方法确定的:
表3:我们使用自动进化特征选择。列“Wrong”显示了一种简单的方法,即显示从引导搜索的验证传递的交叉验证错误,而“Nested”传递正确的估计。
在这里,您可以看到您期望的偏差量平均高达4.2%。最大的偏差甚至高达11%(声纳上的5-NN)——这甚至比我们在上面的归一化案例中看到的最大值8%还要高。
想想看:你的生产误差将是预期的两倍(22% vs. 11%);只是因为你没有正确的验证考虑到数据预处理的效果。你可以很容易地避免这种负面的惊喜!
值得指出的是,计算出的平均偏差和最大偏差在很大程度上取决于所使用的数据集和模型类型。我们已经看到,对于Random Forest,错误的归一化验证的效果为零,因为这种模型类型不关心数据列的不同尺度。
另一方面,使用随机森林进行特征选择的效果更大。这就是问题所在:你永远不可能事先知道影响到底有多大。
关键的外卖
请记住,对未来的情况做好准备的唯一方法是使用正确形式的模块化、嵌套交叉验证正确验证模型本身以及所有其他优化的效果。
以下是我希望你能考虑的一些要点:
- 在交叉验证之前应用数据转换可能会污染训练数据集,导致测试数据的信息泄漏到完整数据集。
- 想想预处理、参数优化或其他(自动)优化方案,就像机器学习试图找到最佳预测模型的另一种形式一样。leyu体育是真的吗
- 这种“更大的”机器学习需要像leyu体育是真的吗实际的机器学习方法本身一样进行评估。
- 大多数数据乐Ɛ乐鱼全站app下载60;体育官方app科学产品不允许您以正确的方式执行模型验证,即考虑到预处理或模型优化的影响。
- 我们已经看到了三个例子,展示了当操作错误时对模型验证的影响有多大。
- 对于未经验证的归一化,其效果平均为3.9%,最高为8%。
- 对于未经验证的参数优化,效果平均为0.6%,最大为1%。
- 对于未经验证的特性选择,效果平均为4.2%,最高为11%。
- 重要的是要了解,对于不同的数据集或不同形式的未经验证的预处理,这些影响甚至可能更高。
- 在进入生产环境时避免意外的唯一方法是在之前进行适当的验证。
想了解其他例子吗?将这个数据和过程文件加载到你的RapidMiner存储库中:Data & processes.zip用于“学习验证模型的正确方法”.如果你需要如何向你的存储库中添加文件的指导,这篇文章将会有所帮助:如何共享RapidMiner存储库.
下载RapidMiner工作室,它提供了支持企业完整数据科学生命周期的所有功能。乐鱼体育官方app