为机器学习算法自动选择一个好的模型,一旦模型的参数w和b拟合到训练集,训练错误可能不是算法性能的好指标,或者它将如何很好的推广到训练集中没有的新示例,对于本例,训练误差几乎为零,这可能比实际的泛化误差要低得多,这指的是不在训练集中的新例子的平均误差,在上篇文章中看到的是J测试,算法在示例上的性能没有训练,关于这一点,这将是一个更好的指标,表明该模型在新数据上可能做的有多好,指的是训练集中没有的其他数据。
如何使用测试集为给定的机器学习应用程序选择模型?
如果拟合一个预测房价的函数,或者其他回归问题模型,你可以考虑拟合像这样的线性模型,这是一个一阶多项式,在下图中用d=1来表示拟合一阶或一阶多项式,如果把这样的模型放到你的训练集中,得到一些参数w和b,然后你可以计算j测试来估计,这将推广到新的数据,用上标1表示这些是得到的参数,如果你拟合一阶多项式或一次多项式,D等于一个多项式,现在你可以考虑拟合一个二阶多项式或二次模型,如果把这个装进你的训练装备里,你会得到一些参数,然后,可以在测试集中以类似的方法计算这些参数,得到j测试w2 b2,继续尝试d=3,那是一个三阶或三次多项式,如下所示,并拟合参数,类似的得到j检验,可以一直这样做,直到你尝试十多次多项式,最后得到的是w10 b10的j检验,你可以尝试的一个程序结果不是最好的程序,但有一件事你可以尝试看看所有这些j测试,看看哪个给你的值最低,假设你发现W5的五阶多项式的j检验,B5原来是最低的,然后你很可能会决定五阶多项式d=5是最好的,并未你的应用程序选择该模型,如果你想估计这个模型的性能,可以做一件事,但这是一个稍微向前的过程,就是报告测试集错误j测试w5b5,这个程序有缺陷的原因就是w5b5的J检验,很可能是对泛化误差的乐观估计,很可能低于实际的泛化误差,原因就在于我们基本上适合一个额外的参数,多项式的次数,我们使用测试集选择了这个参数,如果把WB与训练数据相匹配,训练数据是对概括误差的过于乐观的估计,如果你选择参数D使用测试集,那么测试集j测试现在是一个过于乐观的,这低于广义误差的实际估计,所以这张幻灯片上的程序是有缺陷的,如果要自动选择型号,例如决定使用多项式的次数。
以下是如何修改培训和测试过程?
为了进行选模,在不同的模型中选择,例如以下十个不同的模型,可能会考虑将其应用于机器学习应用程序,我们修改程序的方法不是将数据分成两个子集,训练集和测试集,而是把数据分成三个不同的子集,称之为训练集,交叉验证集,测试集,所以用我们的例子,从这十个训练例子中,我们可以把60%的数据放入训练集,因此,我们用于训练集部分的符号将与以前相同,培训实例数量将为6个,我们可能会把20%的数据放入交叉验证集,要用的符号是一个逗号,用cv来表示,所以cv代表交叉验证,在本例中Mcv=2是交叉验证示例的数量,最后我们有了和以前一样的测试集,所以X1通过Xm测试,最终m测试=2,这是测试示例的数量。交叉验证的名称指的是这是一个额外的数据集,我们将用检查或交叉检查有效性或者不同模型的准确性,也简称为验证集。这只是几个音节比交叉验证,或在一些应用程序中,人们也称之为开发集,意思基本相同。
有了训练数据集的这三个子集,交叉验证集和测试集,然后可以计算训练错误,这三个公式的交叉验证误差和测试误差,这些术语都不包括培训目标中包括的正规化术语,中间的这个指的是交叉验证集的误差平方误差,除了被称为交叉验证错误外,通常也被称为验证错误,甚至是开发集错误或开发错误。有了这三个学习算法性能的衡量标准,这就是如何进行模型选择。
从d=1到d=10,然后可以拟合参数w b,但是与其在测试集中评估这个,相反,可以在交叉验证集中计算这些参数,计算Jcv,为了选择型号,你将查看哪个模型的交叉验证误差最低,具体地说,假设W4的Jcv最低,这意味着你会选择这个4作为多项式,作为你将用于此应用程序的模型,如果要报告泛化误差的估计,关于这个模型在新数据上的表现,你将使用数据的子集来完成此操作,测试集,然后报告W4 B4的j检验,在整个过程中,使用训练集拟合了这些参数,然后选择参数d,或使用交叉验证集选择多项式的度,所以,你没有将任何参数w b或d拟合到测试集中,这就是为什么在这个例子中j测试将公平地估计这个模型的泛化误差,它的参数是w4 b4,因此这为模型选择提供了一个更好的程序,它让你自动做出决定,比如,为你的线性回归模型选择什么阶多项式,此模型选择过程也适用于在其他类型中的模型中进行选择。
例如,神经网络体系结构的选择,如果你正在拟合手写数字识别模型,你可以考虑这样的三种型号,甚至可能是更大的一组模型,而不仅仅是三个,但这里有几个不同的小神经网络,帮助你决定你的神经网络应该有多少层,每层应该有多少隐藏单位,然后可以训练所有这三个模型,并最终获得参数WB,然后可以使用Jcv评估神经网络的性能,在分类问题上使用交叉验证集,Jcv可以是示例的百分比,因为这是一个分类问题,最常见的是计算Jcv,作为算法错误分类的交叉验证示例的一小部分,可以使用这三个模型来计算,然后选择交叉验证误差最低的模型,所以在这个例子中,如果交叉验证错误最小,然后选择第二个神经网络,使用在这个模型上训练的参数,最后,如果你想报告广义误差的估计,然后使用测试集来估计刚才选择的神经网络有多好,这样做在机器学习实践中被认为是最佳实践,做出关于学习算法的所有决定,例如如何选择要使用多项式的参数,但是只考虑训练集和交叉验证集就可以做出决定,并且根本不使用测试集来决定模型,最后取在测试集上设计和评估的模型,这个过程确保不会意外地将任何东西适合到测试集中,因此,测试集仍然是一个公平的,而不是过于乐观的算法泛化误差估计。如果你必须对你的模型做出决定,例如拟合参数或选择模型架构,如神经网络架构或多项式度,如果你用线性回归来做所有这些决定,仅使用训练集和交叉验证集完全不看测试集,当你还在为你的学习算法做决定的时候,只有在你想出一个模型之后这是你的最终模型,然后在测试集上进行评估,因为还没有使用测试集做出任何决定,这可以确保你的测试集是一个公平的。