模型评估与选择
下面所有的 # ( ) \#() #()表示括号内元素的个数
经验误差与过拟合
- 错误率:错误分类的样本数占总样本数的比例
- 精度:1-错误率
- 误差:学习器实际预测输出与样本的真实输出之间的误差
- 训练误差(training error) or 经验误差(empirical error):学习器在训练集上的误差
- 泛化误差(generalization error):新样本上的误差
- 欠拟合(underfitting):未能很好的拟合训练样本
- 过拟合(overfitting):过分拟合训练样本
过拟合是无法彻底避免的
评估方法
测试集:测试学习机对新样本的判别能力,以测试误差作为泛化误差的近似,测试集与训练集应该互斥。
生成测试集与训练集的方法
留出法(hold-out)
将数据集 D D D 划分为两个互斥的集合,一个作为训练集 S S S,一个作为测试集 T T T。
- 训练集和测试集的划分尽可能保证数据分布的一致性。需要从 D D D 的正例和反例中等比例采数据,也就是说如果从正例中取 70 70% 70 作为训练集,那么在反例中也应提取 70 70% 70 作为训练集。
- 训练集和测试集不同的划分方式会导致不同的评估结果。为保证估计结果准确可靠,一般采用若干次随机划分,重复进行试验评估后取平均值作为留出法的评估结果。
- S S S 和 T T T 不同的划分比例对数据集 D D D 的拟合程度不同, S S S 越大,那么训练出的模型越接近 D D D,但此时泛化性能较差; T T T越大,那么训练的模型不能很好的拟合 D D D。通常取 2 / 3 2/3 2/3 或 4 / 5 4/5 4/5 的数据作为训练样本。
交叉验证法(cross validation)
将数据集 D D D 划分为 k k k 个大小相似互斥的子集,每个子集 D i D_i Di 都尽可能保持数据分布的一致性(分层采样得到),然后每次用 k − 1 k-1 k−1 个子集的并集作为训练集,余下的那个作为测试集,于是就得到了 k k k 组训练/测试集,从而进行 k k k 次训练测试,最终返回 k k k 结果的均值。该方法也被称为 " k k k 折交叉验证 “(k-fold cross valication)。为了提高测试的稳定和准确度,与留出法一样,交叉验证法要重复 p p p 次,因此称为 " p p p 次 k k k 折交叉验证”。
如果将 D D D 中的 m m m 个样本分为 m m m 份即 m m m 折交叉验证,那么就得到了留一法(Leave-Out-Out或LOO)。留一法不受随机样本划分的影响,且留一法评估比较准确,但是留一法的开销巨大,特别是当 D D D 很大时,且留一法的结果未必比其他方法更加准确。
自助法(bootstrapping)
给定包含 m m m 个样本的数据集 D D D,每次从 D D D 中挑选一个样本,将其拷贝到 D ′ D' D′,然后将该样本放入原本的数据集 D D D 中,重复 m m m 次之后我们就得到包含 m m m 个数据的训练样本 D ′ D' D′(存在重复的数据), D D D \ D ′ D' D′ 作为测试集。
优点:减少训练样本规模不同造成的影响,还能比较高效的进行试验估计。自助法在数据集较小、难以有效区分训练/测试集时很有用。但是自助法改变了数据原有的分布,引入估计偏差
初始数据量足够时,留出法和交叉验证法更常用
调参与最终模型
现实中调参是对每个参数选定一个范围和变化步长。
注意在学习算法和参数均已选定之后需要用 m m m 个数据重新训练模型,这才是最终模型。
通常将实际测试时遇到的数据称为测试数据,为了加以区分,我们将模型评估选择中的测试集 T T T 称为验证集。
性能度量
什么样的模型是好的,不仅取决于算法和数据,还取决于任务需求
(PS:下面公式均不对概率密度的描述进行总结)
常用度量方式:均方误差 E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D)=\frac{1}{m}\sum_{i=1}^{m}(f(x_i)-y_i)^2 E(f;D)=m1i=1∑m(f(xi)−yi)2
P 和 R
错误率: E ( f ; D ) = 1 m ∑ i = 1 m # ( f ( x i ) ≠ y i ) E(f;D) = \frac{1}{m}\sum_{i=1}^{m}\#(f(x_i) \neq y_i) E(f;D)=m1