机器学习之模型选择


模型选择 Model Selection

过拟合和欠拟合 Overfitting and Underfitting

这个其实非常好解释, 就放在一起说了.

过拟合就像是平时做很多作业题但是却不会考试的学生, 一到考试就拉胯, 但是平时作业写得很完美. 过拟合导致了过度的学习了作业中的内容, 甚至是单纯错误的把作业题背下来了, 导致失去了泛化能力.

欠拟合就像是平时不怎么学习的学渣. 考试题也不会, 作业也不会写. 欠拟合根本没有对作业中的内容进行学习, 对考试题型的拟合程度根本不够.

欠拟合对应着高偏差, 过拟合对应着高方差.

  1. 左上的模型偏差最大, 右下的模型偏差最小.
  2. 左上的模型方差最小, 右下的模型方差最大. 这样去理解, 如果两个训练集的分布有一丝丝差异, 由于采用了复杂的模型拟合, 会导致分类结果或回归结果截然不同. 就导致新样本点散落在原样本的两侧, 方差极高.

用CV代表在验证集上的训练误差, 而Training error代表在训练集上的训练误差.

欠拟合的训练误差和验证误差都很大, 过拟合的训练误差很小, 但是测试误差很大. 只有在中间的模型刚刚好, 具有泛化能力, 也同时具有判断问题的能力.

交叉验证 Cross Validation

先解释一下数据的分割问题. 我们常常将数据分割为三类, 分别是训练集, 验证集, 和测试集. 一般都将一份数据集按照比例划分成训练集和验证集, 测试集一般取样于实际问题中, 这样才能够检验模型真正的泛化能力. 但是在后面说的”全部数据集” 都是在不考虑测试集情况下说的, 也就是只划分为训练集和测试集的情况.

划分意义
训练集专门用来训练模型的, 在训练过程中, 模型参数会随着训练而改变, 就像是上课一样.
验证集用来检测当前模型对数据集的拟合程度, 此时模型参数不会更新, 它像作业题.
测试集模型从来没有见过的, 真正的考试题, 能够判决模型能力的终极手段.

测试集只能用一次, 就是最后对模型参数调好后进行终极测试的时候.

对于一份数据, 如果我们既将它全部用来训练, 也用于验证, 那么就相当于用作业题去上课, 造成了标签泄露. 如果只将训练集拿去训练呢, 又会损失一部分训练的数据, 并且模型最终的结果严重取决于训练集和验证集的划分. 基于这个矛盾, 提出了交叉验证.

K折交叉验证 K-Fold Cross Validation

将含有$m$个样本的数据集划分为$k$个不相交的子集, 每个子集有$\frac{m}{k}$ 个样本. 从每次分好的样本中, 选一个子集作为验证集, 其他$k-1$个子集全部作为训练集, 每次训练都能得到一个评估值(每次都用同样的参数训练一个新的分类器), 重复进行$k$ 次最后取平均, 就是k折交叉验证所得到的验证结果. K-Fold CV 能反映出当前模型真正的拟合能力, 经验值常取k为5, 10…

留一法 Leave-one-out cross-validation

当$k=m$的时候, 每个子集只有一个样本, 每次只取一个样本作为验证集, 用其余所有样本进行训练, K折交叉验证就变成了留一法. 留一法能够最大程度的利用样本, 但是也同时牺牲了时间. 如果有k个样本, 则需要训练k次, 测试k次. 小样本适用.

当我们不知道模型的参数如何选择时, 可以采用网格搜索. 网格搜索其实就是暴力穷举, 将模型所有可能的参数取值全都试一遍, 这能保证不遗漏模型组合参数造成的影响, 但是同时这样做的时间成本也非常高. 所以一般情况下都是先进行参数范围的缩小, 最后再使用网格搜索. 网格搜索也常和交叉验证一起使用, 用来更精确的评价模型.


文章作者: DaNing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 DaNing !
评论
 上一篇
机器学习之特征缩放 机器学习之特征缩放
特征缩放 Feature scaling特征缩放还有另外一个名字, 叫做标准化. 标准化能够尽可能的使得模型快速收敛, 如果某个特征的方差比别的特征大几个数量级的话, 用距离度量的算法就会受到非常大的影响, 比如神经网络, SVM, 逻辑回
2020-08-03
下一篇 
机器学习之损失函数 机器学习之损失函数
损失函数 Loss function损失函数是用来度量模型当前预测状况与损失目标的差距的函数. 均方误差 MSE也称为平方损失, L2损失, 均方误差(Mean Squared error). 有时候人们也直接将其开根号称为RMSE, 这样
2020-08-01
  目录