Andrew NG 《machine learning》week 6,class1 —Evaluating a Learning Algorithm
1.1 Deciding What to Try Next
当需要开发一个机器学习的系统的时候,选择什么机器学习算法是一个让人头疼的问题。因为不同的算法性能不同,所适用的环境也不同。那么对于一个算法的改进也有很多种方法。如下图所示:
对于算法改进方法方法的选择,主要有以上几种方法。其中代价函数后面加上的参数是为了防止过拟合的情况。但是选哪一种改进方法,也是一个重要的问题。
接下来将会对算法的假设进行评估,之后再提出选择改进方法的一种方法。
1.2 Evaluating a Hypothesis
对于只有两个特征变量的算法 假设函数,可以画图对假设函数进行评估,看它是否存在过拟合或者欠拟合的情况,但是对于特征变量较多的情况下,画图已经不现实了,所以需要换一种方法对算法假设函数进行评估。
这种方法就是将数据集分为训练集和测试集,用训练集训练算法的假设函数,用测试集评估假设函数。一般情况下是选择70%的数据作为训练集,30%的数据作为测试集。同时这些数据应该是乱序的,保证选择的训练集和测试集的随机性。
如上图所示,先从训练数据集中训练出参数,然后用测试数据集计算测试错误率。测试数据集的误差计算公式如上图所示。用0/1表示预测数据的正确与否,1代表预测错误,0代表预测正确,以此来计算测试数据集的测试错误率。
1.3 Model Selection and Train/Validation/Test Sets
本小节主要讨论关于机器学习算法模型的选择以及数据集合的分类(测试集,训练集,验证集),以及如何用这些概念来进行算法模型的选择。
对于算法模型的选择,1.2节所说的方法是将数据集分为测试集合训练集,最终会选择测试误差最下的模型作为算法模型,但是这样的选择会出现一些问题。如下图所示:通过测试误差最小选择的算法模型是维数为5的假设函数。
但是这样的选择实际上是存在问题的。因为最初的时候就是根据测试误差进行模型的选择,那么这个模型对于测试数据集是基本完全拟合的,但是对于其它数据集呢?就可能出现误差较大的情况,所以就会出现选择的模型不能泛化的情况。为了解决这个问题,提出再将数据集划分为测试集,训练集,交叉验证集。如下图:分别所占的比例为3:1:1
各个数据集的误差函数如下图:
最终选择的模型应该是使得交叉验证集的误差最小的模型。如下图:这种情况下就会选择维数为4的模型,而不是之前通过测试误差选择的维数为5的模型了。
一般在数据集较大的情况下选择通过测试误差来选择模型的方法是可以的,但是对于小数据集的情况下其实是存在问题的,而且对于最初机器学习系统的开发,数据集一般是较小的数据集,所以采用交叉验证集的误差来选择模型才是最好的方法。