交叉验证(Cross validation)
交叉验证(Cross validation)
模型选择(Model Selection),从很多模型中选择一个较好地模型去解决解决学习问题。下面以多项式回归模型为例,介绍模型选择的基本内容。
- 模型选择要解决什么问题?
当使用如下多项式回归模型时,确定参数\(d\)的值。\[h_\theta (x)=g(\theta_0 + \theta_1 x + \theta_2 x^2 +...+ \theta_k x^d) \] - 模型选择是如何解决问题的?
假设有限模型集合\(\mathcal{M}={M_1,M_2,...,M_d}\),其中\(M_k\)表示第\(k\)阶多项式回归模型。任务是根据某些原则从中选择最好的模型作为最终的模型。
交叉验证是模型选择中一类极为重要的方法。下面分别介绍交叉验证常用方法。
假设训练集为\(S\)。
引例算法
-
算法描述:
- 在\(S\)上训练\(\mathcal{M}\)中的每个模型\(M_i\),并得到模型实例\(h_i\);
- 选择使训练误差最小的模型实例。
-
算法缺点:
在多项式回归模型中,模型阶数(\(k\)值)越高,对训练集\(S\)的拟合程度越好,即拥有较小的训练误差。但是模型的泛化性能较差(过拟合)。以上方法总是优先选择高阶的模型。
hold-out cross validation
-
算法描述:
- 将训练集\(S\)按一定比例随机划分成两个集合\(S_{train}\)和\(S_{cv}\),如将\(S\)中的70%数据划分给\(S_{train}\),剩下的数据划分给\(S_{cv}\)。将\(S_{cv}\)称作hold-out交差验证集;
- 仅在\(S_{train}\)上训练模型\(M_i\),并得到模型实例\(h_i\);
- 计算\(S_{cv}\)在模型实例\(h_i\)的误差,并输出拥有最小误差的\(h_i\)。
-
算法优点:
能够解决引例算法的过拟合问题。 -
算法缺点:
\(S_{cv}\)中数据用做模型的验证,而不是用于训练,这一部分数据被"浪费",对于提高模型准确度没有用处。
k-floder cross validation
-
算法描述:
- 随机将训练集\(S\)划分成\(k\)个不相交的子集,记做\(S_1\),\(S_2\),...,\(S_k\)。其中,\(S_i \cap S_j = \emptyset,i \neq j\)和\(\bigcup_{i=1}^{k} S_i = S\)。
- 对于第个模型\(M_i\),
errori = 0 For j = 1,...,k hij = Train the model Mi on S-Sj Test the hij on Sj to get errorij errori += errorij averi = errori / k
- 选择使
averi
值最小的模型,并在整个训练集\(S\)上训练该模型作为最后的模型实例。
-
说明: \(k=10\)是一种常用的选择。但是当数据量较少的时候,我们会考虑一种极端的做法,即取\(k=m\),其中\(m\)为训练集的元素个数(势)。这种做法被称做leave-one-out cross validation。