
1. 概述
1.1. 数据科学中最重要的基本概念之二就是过拟合和泛化能力
1.2. 数据挖掘包含模型复杂度和过拟合概率之间的基本权衡
1.3. 如果数据所表现的现象本身就很复杂,那么就有必要构建一个复杂的模型,但复杂的模型对训练数据过拟合的风险也较高
2. 过拟合
2.1. “模式”事实上只是偶然出现,不具有普遍的适用性,那么这种情况就称为对数据的过拟合
2.2. 过拟合是一种数据挖掘过程牺牲模型对新数据点的泛化能力,从而使其完美适用于训练集数据的倾向
2.3. 所有数据挖掘过程或多或少都可能出现过拟合的情况
2.3.1. 其解决之道既不是强求一个绝对不存在过拟合的模型,因为所有模型都存在这个问题2.3.2. 也不是单纯追求过拟合程度较轻的模型,因为我们需要权衡模型的复杂度和过拟合的概率2.4. 没有任何一个选项或过程能够消除过拟合,最好的方法就是有原则地识别过拟合和控制复杂度
2.4.1. 消除过拟合的万能方法是不存在的2.4.2. 最好的方法是通过用保留数据集进行测试来识别过拟合现象3. 泛化能力
3.1. 历史表现良好不等于未来也能取得成功
3.2. 泛化能力更强的模式,即能很好地预测尚未观测到的实例的模式
3.3. 表模型
3.3.1. 能记住训练集却毫无泛化能力3.3.2. 为原始数据集量身定做(或“完全拟合”)的3.3.3. 虽然训练数据具有代表性,但是数据挖掘却没能从中构建出一个具有泛化能力的模型3.4. 泛化能力是模型本身或建模过程的一种性质,具备这种性质意味着模型可以被应用到建模数据集以外的数据上
3.5. 所有数据集都是总体的一部分
4. 过拟合检验
4.1. 保留数据和拟合图
4.1.1. 拟合图能以复杂度函数的形式展示模型的准确率4.1.2. 评估模型时用的是训练集,也就是用来建模的数据,而这无法评估模型对未出现过的数据的泛化能力4.1.2.1. 通过比较模型预测值和真实值来评估模型的泛化能力4.1.3. 保留数据4.1.3.1. 数据并非最终用来预测目标变量值的数据,而是用来评估模型泛化能力的数据4.1.4. 模型在训练集上的准确率(有时被称作“样本内”准确率)和在保留数据集上的准确率之间很可能存在差异,因此此处的保留数据通常被称作“测试集”4.1.5. 模型越复杂,过拟合的情况就越严重4.1.5.1. 从技术上讲,建模过程越灵活,过拟合的可能性就越大4.1.6. 当模型复杂度较低时,准确率不高4.1.7. 当模型过于复杂时,模型在训练集上的准确率会非常高4.2. 基础比率
4.2.1. 错误率就是这些“流失”用户在总体中所占的比例4.2.2. 永远选择多数类的分类器也被称作“基础比率分类器”4.2.3. 回归模型的对应基线则是一个总是能预测出目标变量值的平均数或中位数的简单模型4.3. 反复对数据进行划分和通过找到一系列最佳参数来拟合数值模型
4.4. 树型归纳的过拟合问题
4.4.1. 如果不断划分数据,那么最终所有的子集都将是纯集,即任意一个子集里的所有实例的目标变量值都相同4.4.2. 在树形结构模型中不断分支,直到得到纯叶节点的过程很容易导致过拟合4.4.3. 随着叶节点上的子集越来越小,模型的泛化能力也越来越差,因而越来越容易出现错误,同时,模型在保留数据集上的预测能力也变差4.4.4. 目前还没有一种能在理论上确定甜蜜点确切位置的方法4.5. 数值函数的过拟合问题
4.5.1. 随着维度的增加,我们可以用更多的任意点来拟合更大的数据集,即使不能完美拟合,也能通过增加维度数(即属性数)来改善拟合效果4.5.2. 无论用哪种方式,数据集最终都会包含大量的属性,而使用所有的属性可以给模型很大的余地来适应训练集4.5.3. 为了避免出现过拟合,建模人员会仔细修剪模型的属性5. 从保留评估到交叉验证
5.1. 即使保留数据集的确能给出泛化能力的估计,这也只是一种单一估计罢了
5.2. 交叉验证是一种更为复杂的保留训练和保留测试过程
5.3. 不仅想要对泛化能力的简单估计,还想要所估计出的泛化能力的一些统计数据,以便了解该泛化能力在多个数据集之间的变化
5.3.1. 方差是评估能力估计值的置信度的关键指标5.4. 交叉验证也能使有限数据集发挥更大的作用
5.4.1. 交叉验证不是将数据集拆分成一个训练集和一个测试集,而是通过反复划分并系统地交换训练集与测试集,计算所有数据组合的估计值5.5. 训练数据中都是已经被精准投放过该广告的客户,而在现实生活中,我们并不知道客户的目标变量值
5.5.1. 训练数据和实际数据的差异可能是模型效果退化的原因5.6. 交叉验证一开始会把标签数据集划分成k个子集,这些子集被称为折叠(fold)
6. 学习曲线
6.1. 如果训练集的大小改变,那么你可能觉得从中得出的模型的泛化能力也会改变
6.2. 若其他因素不变,在一定程度上,训练集数据越多,模型的泛化能力就越强
6.3. 描绘模型泛化能力与训练集数据量关系的图线叫作学习曲线,这也是一种重要的分析工具
6.4. 有时候,曲线会完全变平,因为即使训练集再增大,模型的准确率也不会上升了
6.5. 树型归纳更为灵活,所以虽然它在小数据集上过拟合情况较为严重,却能反映大数据集的复杂规律
6.6. 数据可以作为一项资产,而学习曲线可以告诉我们
6.6.1. 泛化能力已经趋平,花费成本获取更多训练数据是不值得的6.6.1.1. 应该接受当前的泛化能力水平,或是寻找其他改进模型的方法,比如设计更好的特征6.6.2. 泛化准确率正持续上升,获得更多的训练数据可能是一项很好的投资6.7. 学习曲线描绘了测试集上的模型效果与所用训练数据量的关系,通常情况下,模型效果随数据量增大而提升,但不同模型的提升率和最终的渐近性能各不相同
7. 避免过拟合与控制复杂度
7.1. 为了避免过拟合,需要控制从数据中得出的模型的复杂度
7.2. 控制模型复杂度以避免过拟合的一般方法叫模型正则化,具体技术包括剪枝(对过大的分类树进行修剪)、特征选择,以及在用于建模的目标函数中加入显式复杂度惩罚项
7.3. 树型归纳中的过拟合规避
7.3.1. 树型归纳的主要问题是,模型会持续分裂,直到得到纯的叶节点7.3.2. 停止分裂以防树过于复杂7.3.2.1. 限制树规模的最简单方法是规定叶节点上实例数的最小值7.3.2.2. “实例数最小值”停止准则背后的思想是:在预测建模中,我们要用叶节点上的数据,对未来落在该节点上的实例的目标变量进行统计估计7.3.3. 先让树持续分裂,直至其过于庞大,然后剪枝,缩小其规模(降低其复杂度)7.3.3.1. 对过大的树进行“剪枝”,即用叶节点代替原有的叶节点和分支7.3.3.2. 判断用叶节点代替一系列叶节点和分支后,准确率是否会下降7.3.3.3. 如果没有,则进行剪枝7.3.3.4. 我们可以在子树上不断迭代这个过程,直到删除或代替任何分支都会使准确率下降为止7.4. 避免过拟合的一般方法
7.4.1. 测试集必须严格独立于模型,这样才能得到模型准确率的独立估计7.4.2. 假设要把测试集留作最后评估用,就可以把训练集继续划分成训练子集和测试子集,然后用这个新的训练子集构建模型,而用新的测试子集挑选最佳模型7.4.2.1. 为了避免混淆,我们称前者为子训练集,称后者为验证集7.4.2.2. 验证集与最后的测试集分开,后者不会用于做出任何建模决策7.4.2.3. 该过程通常被称作嵌套保留测试7.4.3. 嵌套交叉验证与常规交叉验证的唯一区别是,针对每个折叠,我们会先用另一个更小的交叉验证来寻找C值7.4.3.1. 在拥有丰富数据和强大计算能力的今天,数据科学家通常会用一些战术性的嵌套保留测试(一般是嵌套交叉验证)来确定模型参数7.4.4. 通过用数据进行实验来选择复杂度和构建模型的想法,适用于不同的归纳算法和不同类型的复杂度7.4.4.1. 对特征进行序列前向选择(SFS)7.4.4.2. 序列反向淘汰7.4.5. 交叉验证是一种常用的实验方法,它规定了一种划分单个数据集的系统性方法7.4.5.1. 能生成多个评估指标,而这些指标可以告诉数据科学家模型的平均水平和预期变化7.5. 参数优化中的过拟合规避
7.5.1. 不仅要优化对数据的拟合效果,还要优化一些兼顾了拟合效果和简洁程度的组合7.5.2. 拟合数据的效果越好,模型就越好7.5.3. 复杂度越低,模型也就越好7.5.4. 这套一般性方法叫作正则化7.5.5. 最常用的惩罚项是权重平方之和,有时被称作权重w的“L2范数”7.5.6. 如果在标准最小二乘线性回归中加入L2范数惩罚项,就能得到一个统计过程,被称为岭回归7.5.7. 线性支持向量机学习与L2正则化逻辑回归几乎相同,两者唯一的区别是,支持向量机用的是合页损失函数,而不是优化的似然性7.5.8. 交叉验证可以在训练集子集上构建自动实验,找到最佳的λ值,然后用该λ值在所有训练数据上学习正则化模型7.5.8.1. 网格搜索7.5.9. 不要在多次统计假设实验后选出最“突出”的结果,因为这些结果通常违背了统计实验背后的假设,而结果的实际效果也令人怀疑