个人笔记:实用机器学习(b站李沐)5.1~5.4 5.1方差和偏差偏差训练到的模型与真实模型之间的区别图中蓝点与加号之间的距离方差每次学习的模型之间差别有多大我们假设真实关系是 yf(x)ε其中ε是噪声。我们只能看到有限样本D{(x1​,y1​),...,(xn​,yn​)} 从中学习一个模型 f^D​ 。关键问题如果换一批数据 D′重新采样学到的 f^D′会不一样。这种因数据不同而产生的波动就是方差的来源。误差的来源偏差方差误差要均衡偏差与方差改进的思想接下来介绍三种方法Boosting 治偏差Bagging 治方差Stacking 两者兼顾。Bagging核心思想单个复杂模型方差大但多个独立模型的平均预测方差会变小。如果是回归问题会把每一个模型的输出做平均就得到了bagging出来的效果如果是做分类的话这样每一个模型都会输出一个类别然后会用这些输出做投票选最 多的这个叫Majority voting第一步Bootstrap采样假设训练集有m个样本每一次训练base learner的时候随机采样m个样本每次采样我们会将这个样本放回去可能有些样本会重复如果有n个模型要这样训练就重复n次每个样本大概是有1-1/e ≈63%的概率会被采样到就是说可能有37%的样本是没有采样出来的可以用这个来做验证集这个也叫做 out of bag第二步并行训练每个模型独立训练互不干扰并行第三步聚合预测随机森林在3.2中的决策树中提到在右边的曲线图中我们可以知道随着learner的数量增加模型的误差是逐渐减小的。但是泛化误差的曲线不会往上升这是因为我们降低了方差但没使得偏差更大这也就改善了泛化误差中三项其中的一项但没增加另外两项Bagging 的数学本质就是 Jensen 不等式平均的平方 ≤ 平方的平均。对不稳定学习器如深决策树来说这个不等式差距很大所以 Bagging 效果显著对稳定学习器如线性回归差距很小Bagging 帮助不大。Boosting基本理念顺序学习n个弱学习器weak learners将它们组合起来以降低模型的偏差bias与 Bagging如随机森林主要降低方差不同Boosting 主要目标是降低偏差三个关键特性顺序性Sequential每个新学习器都依赖前面学习器的结果关注错分样本通过调整样本权重或拟合残差来弥补之前的错误累加组合Additive最终模型是所有弱学习器的加权求和两种实现方法AdaBoost根据误差重新采样数据给错分样本更高权重Gradient Boosting训练新学习器去直接预测残差误差Gradient Boosting3.2决策树模型提及到优势支持任意可微损失函数在残差上训练新的模型ht“残差指在m个样本中样本本身特征不发生变化标号变了实际标号减去预测的标号也就是后面说的拟合不够的差值”时间1时是在原始的样本上进行训练但是在之后的时间内都是把当前时刻boosting的模型去拟合拟合不够的那个差值然后将ht * η学习率加进当前整个boosting出来的模型变成下一个时刻boosting出来的模型η是作为一个正则项boosting中叫收缩当然η可以为1但是这样很容易过拟合为什么称作梯度提升用决策树作为weak learnerGradient boosting 很容易过拟合所以我们需要对它做些正则化需要用一个弱的模型来做*但是决策树是一个强模型我们需要限制树的最高层数也可以随机采样一些特征列在GBDT中模型没有过拟合每一个小模型确实比较弱学习率也定的比较低当weak learner、学习率 控制得比较好的时候它的过拟合现象没那么严重GBDT需要顺序训练在大的训练集上会比较吃亏所以会用一些加速算法如XGBoostlightGBMStacking与 Boosting 降低偏差不同Stacking 的目标是降低方差这一点与 Bagging 类似。基学习器多样性可以是不同类型的模型异构模型组合方式用学习到的参数线性组合基学习器输出*原始数据的输入是相同的每个模型从数据中提取了不同的特征和模式元学习器学会取长补短。如果想通过Stacking降低偏差可以尝试多层的Stacking但是多层的Stacking特别容易出现过拟合因为同一份数据被不断地学习如何降低带来的过拟合呢解决方案一数据拆分训练数据 [A] ∪ [B]每一层的数据不是同一份数据将数据集分成两块A、B2层stacking然后用A训练第一层模型L1用L1对B进行预测把预测的结果加上B本身训练第二层模型L2解决方案二Repeated k-fold Bagging更常用每个模型用这个方法训练了一次 所以每次训练了是k*n个小模型*训练时用的每个预测都不是该样本参与训练的模型产生的。安全更加昂贵的做法对上述的做法重复做n次k折交叉验证这样可以拿到n个预测值再取平均放入下一层中