4.2 数据集划分-机器学习笔记-斯坦福吴恩达教授

数据集划分

测试集

在线性回归的章节中,我们已经知道,仅仅具备一个很小的训练误差并不能保证我们的预测函数就是优秀的,因为这种“优秀”仅仅体现在了对于已知的训练样本的假设上,而无法保证见到新的样本时候还能做出足够好的预测,过拟合就是当中的典型例子:
4.2 数据集划分-机器学习笔记-斯坦福吴恩达教授
因此,预测准不准应当反映在对于新样本的泛化(generalize)能力。我们考虑将数据集划分为:

  • 训练集:70%
  • 测试集:30%

在对数据集进行训练集和测试集的划分前,最好先对数据集进行乱序,防止类似样本聚到一起

引入如下符号:

  • (x(1)y(1))(x^{(1)},y^{(1)}) :训练样本
  • (xtest(1)ytest(1))(x^{(1)}_{test},y^{(1)}_{test}) :测试样本
  • mm :训练集样本容量
  • mtestm_{test} :测试集样本容量

线性回归的测试误差

在线性回归中,我们就通过计算测试集的代价函数来评估参数 θθ 的泛化能力:
Jtest=12mtesti=1mtest(hθ(xtest(i))ytest(i))2J_{test}=\frac1{2m_{test}}∑_{i=1}^{m_{test}}(h_θ(x^{(i)}_{test})−y^{(i)}_{test})^2

逻辑回归的测试误差

在逻辑回归中,测试集的代价函数为:
Jtest(θ)=1mtesti=1mtest(ytest(i) loghθ(xtest(i)))(1ytest(i)) loghθ(xtest(i)))J_{test}(\theta)=-\frac1{m_{test}}∑_{i=1}^{m_{test}}(y_{test}^{(i)}\ logh_\theta(x^{(i)}_{test}))−(1-y_{test}^{(i)})\ logh_\theta(x^{(i)}_{test}))

由于逻辑回归处理的是 0/1 分类问题,其预测结果只有正确与错误之分,所以引入误分率(Misclassification Error):
err(hθ(x),y)={1,if hθ(x)0.5, y=0 or hθ(x)<0.5, y=10,otherwiseerr(h_\theta(x),y)=\begin{cases}1,\quad if\ h_\theta(x)≥0.5,\ y=0\ or\ h_\theta(x)<0.5,\ y=1\\ 0,\quad otherwise\end{cases}

则逻辑回归中的测试误差可以表示为:
Testerror=1mtest1mtesterr(hθ(xtest(i)), ytest(i))Test_{error}=\frac1{m_{test}}\sum_1^{m_{test}}err(h_\theta(x_{test}^{(i)}),\ y_{test}^{(i)})

交叉验证集

在多项式回归中,我们总是尝试不同的多项式次数degree( degree ),形成了不同的预测模型:

1.hθ(x)=θ0+θ1x1.\quad h_θ(x)=θ_0+θ_1x2.hθ(x)=θ0+θ1x+θ2x2 2.\quad h_θ(x)=θ_0+θ_1x+θ_2x^23.hθ(x)=θ0+θ1x+...+θ3x3 3.\quad h_θ(x)=θ_0+θ_1x+...+θ_3x^34.hθ(x)=θ0+θ1x+...+θ4x4 4.\quad h_θ(x)=θ_0+θ_1x+...+θ_4x^45.hθ(x)=θ0+θ1x+...+θ5x5 5.\quad h_θ(x)=θ_0+θ_1x+...+θ_5x^5

我们计算各个模型的对应的测试误差,假设 degreedegree=5 时,测试误差最小,我们就选出了以下模型来迎接新的样本:
hθ(x)=θ0+θ1x+...+θ5x5h_θ(x)=θ_0+θ_1x+...+θ_5x^5

对于 degreedegree 的确定,是我们对于模型的选择(Model Selection),正如我们在线性回归中确定 θθ 一样。在线性回归中,我们通过训练集确定模型,测试集来评估模型的泛化能力。在多项式回归中,我们通过训练集获得了参数 θθ ,而通过测试集确定了模型,那么,这两个集合用完了,我们就缺少评估模型泛化能力的数据集。鉴于此,引入了交叉验证集(Cross Validation Set),“交叉”二字体现了一种承上启下的关系,他通过训练集获得的结果,选择了模型,并将该模型交给测试集进行评估:

  • 训练集:60%,确定参数 θθ
  • 交叉验证集:20%,进行模型选择。
  • 测试集:20%,评价模型预测能力。

三者的误差函数如下:

  • 训练集误差:
    Jtrain(θ)=12mi=1mtrain(hθ(xtrain(i))ytrain(i))2J_{train}(\theta)=\frac1{2m}\sum_{i=1}^{m_{train}}(h_\theta(x_{train}^{(i)})-y^{(i)}_{train})^2

  • 交叉验证集误差:
    Jcv(θ)=12mi=1mcv(hθ(xcv(i))ycv(i))2J_{cv}(\theta)=\frac1{2m}\sum_{i=1}^{m_{cv}}(h_\theta(x_{cv}^{(i)})-y^{(i)}_{cv})^2

  • 测试集误差:
    Jtest(θ)=12mi=1mtest(hθ(xtest(i))ytest(i))2J_{test}(\theta)=\frac1{2m}\sum_{i=1}^{m_{test}}(h_\theta(x_{test}^{(i)})-y^{(i)}_{test})^2