数据挖掘:模型状态评估
数据挖掘:模型状态评估
之前的模型评估仅仅是在评估模型的预测精度怎么样,没有考虑模型过拟合和欠拟合的状态。也就是说,模型拟合出来后,我们要对它进行优化,而如何优化就要看模型目前所处的一个状态,过拟合,欠拟合等。有针对的对模型进行优化。
一、模型状态
模型的状态可分为两类:
- 过拟合:模型在训练集上的效果好,在测试集上的效果差。
- 欠拟合:模型在训练集和测试集上的效果都不好。
而这个效果就是模型评估中的准确度。从准确度的反面,就是误差过大。
误差:学习器的预测输出与样本的真实输出之间的差异
根据数据集的划分,又有如下的定义:
- 训练误差(training error):又称为经验误差(empirical error),学习器在训练集上的误差。
- 测试误差(test error):学习器在测试集上的误差。
- 泛化误差(generalization error):学习器在未知新样本上的误差。
训练模型的意义:得到泛化误差小的学习器。然而,事先并不知道新样本,实际能做的是努力使经验误差最小化。但需要明确一点,即使分类错误率为 0,精度为 100% 的学习器,也不一定能够在新样本上取得好的预测结果。我们实际希望的是在新样本上能表现得很好的学习器。
为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别。因为,泛化误差无法测量,因此,通常我们会将测试误差近似等同于泛化误差。
二、偏差与方差
如何评估我们模型的状态,这里我们使用学习曲线。它能反映出随着样本量的增大,训练数据和测试数据偏差和方差的变化。
一般我们使用模型的偏差(Bias)与方差(Variance)来描述模型的泛化性能,这称为偏差-方差分解(bias-variance decomposition)。
偏差:由所有采样得到的大小为 m 的训练数据集训练出的所有模型的输出的平均值和真实模型输出之间的偏差。偏差通常是由于我们对学习算法做了错误的假设所导致。度量学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。模型与其他模型相比较,不同模型对训练集和测试集的准确度进行对比。
方差:由所有采样得到的大小为 m 的训练数据集训练出的所有模型的输出的方差。简单地说,度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据集的变动导致学习性能的变化,也就是学习算法的稳定性。模型与自身比较,同一模型对训练集和测试集上的准确率进行对比。
噪声:表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了数据集标记本身的误差。
模型的选择、评估和优化-上
下面这个图可以很好地理解偏差和方差之间的区别**。即偏差高低意味着模型的准确性;方差高低意味着模型的稳定性**。
假设一次射击就是一个机器学习模型对一个样本进行预测。射中靶心位置代表预测准确,偏离靶心越远代表预测误差越大。
我们通过 n 次采样得到 n 个大小为 m 的训练样本集合,训练出 n 个模型,对同一个样本做预测,相当于我们做了 n 次射击,射击结果如下图所示。
我们最期望的结果就是左上角的结果,射击结果又准确又集中,说明模型的偏差和方差都很小;
右上图虽然射击结果的中心在靶心周围,但分布比较分散,说明模型的偏差较小但方差较大;
同理,左下图说明模型方差较小,偏差较大;
右下图说明模型方差较大,偏差也较大。
所以,我们要的模型时偏差和方差都比较小的。
过拟合是:偏差小,方差大。
欠拟合是:偏差大,方差小。
所以,调整模型状态也就是在偏差与方差之间进行权衡。
三、学习曲线
通过画出不同训练集大小时训练集和交叉验证的准确率,可以看到模型在新数据上的表现,进而来判断模型是否方差偏高或偏差过高,以及增大训练集是否可以减小过拟合。
当训练集和测试集的准确率收敛且都收敛到较低准确率时,与基准分类器(红线表示)相比为高偏差。
左上角表示分类器的偏差很高,训练集和验证集的准确率都很低,很可能是欠拟合。
训练集和测试集的准确率与基准分类器有差不多的准确率,说明偏差较低,但在测试集和训练集的准确率差距较大,为高方差。
右上角方差很高,训练集和验证集的准确率相差太多,是过拟合。
模型越复杂,学习能力越强,故训练集误差越小。但是对于测试集误差,当它减少到一定程度时,模型可能因为过于复杂而出现过拟合现象,误差反而增大。此时可通过降维,增大正则化等措施,减低过拟合。
措施 | 应对情形 |
---|---|
过拟合:低偏差,高方差 | 增加数据量,降低模型复杂度(减少特征数,增大正则化) |
欠拟合:高偏差,低方差 | 增加数据量无效。提升模型复杂度(增加特征数,减小正则化) |
关于学习曲线的绘制,可以去sklearn官网上查找。