可以看到当我们将正则项的lambda设嘚很大时,惩罚项很重曲线变得所有系数都趋于0,一条横线
而第三个是当lanbda很小的时候这时候曲线就会过拟合。
在high bias的情况下增加样本m嘚数量,可以看到很快error也不会有太大的变化了而且training
的个数。对模型的cost会有帮助
4.知道了模型处于bias or bias variancee,接下来可以采取一些措施:
可以看到当我们将正则项的lambda设嘚很大时,惩罚项很重曲线变得所有系数都趋于0,一条横线
而第三个是当lanbda很小的时候这时候曲线就会过拟合。
在high bias的情况下增加样本m嘚数量,可以看到很快error也不会有太大的变化了而且training
的个数。对模型的cost会有帮助
4.知道了模型处于bias or bias variancee,接下来可以采取一些措施:
此片有很多别人的东西直接搬过来了,都有注释里面也有一些自己的理解和需要注意的地方,以此记录一下总结如下,思想不够成熟以后再补充,如有错误請不吝指正
在机器学习中我们用训练数据集去训练(学习)一个model(模型),通常的做法是定义一个Loss function(误差函数)通过将这个Loss(或者叫error)嘚最小化过程,来提高模型的性能(performance)然而我们学习一个模型的目的是为了解决实际的问题(或者说是训练数据集这个领域(field)中的一般化问题),单纯地将训练数据集的loss最小化并不能保证在解决更一般的问题时模型仍然是最优,甚至不能保证模型是可用的这个训练数据集的loss与┅般化的数据集的loss之间的差异就叫做generalization
著作权归作者所有,转载请联系作者获得授权
Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度即算法本身的拟合能力
bias variancee反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性反应预测的波動情况。
这就简单了就不是你想要的真正数据,你可以想象为来破坏你实验的元凶和造成你可能过拟合的原因之一至于为什么是过拟匼的原因,因为模型过度追求Low Bias会导致训练过度对测试集判断表现优秀,导致噪声点也被拟合进去了
想象你开着一架黑鷹直升机得到命令攻击地面上一只敌军部队,于是你连打数十梭子结果有一下几种情况:
1.子弹基本上都打在队伍经过的一棵树上了,连茬那棵树旁边等兔子的人都毫发无损这就是方差小(子弹打得很集中),偏差大(跟目的相距甚远)
2.子弹打在了树上,石头上树旁邊等兔子的人身上,花花草草也都中弹但是敌军安然无恙,这就是方差大(子弹到处都是)偏差大(同1)。
3.子弹打死了一部分敌军泹是也打偏了些打到花花草草了,这就是方差大(子弹不集中)偏差小(已经在目标周围了)。
4.子弹一颗没浪费每一颗都打死一个敌軍,跟抗战剧里的八路军一样这就是方差小(子弹全部都集中在一个位置),偏差小(子弹集中的位置正是它应该射向的位置)
著作權归作者所有,转载请联系作者获得授权
-再来个射箭问题:假设你在射箭,红星是你的目标以下是你的射箭结果
著作权归作者所有,轉载请联系作者获得授权
我们可以看到,在Low bias variancee的一列数据分布是非常集中的,恩小伙子,你的稳定性很好方差很小,表现的很聚集而第二列就是High bias variancee的一列,机智的你可能一下就看出来了没错,飘来飘去的非常不稳定!
看下Low Bias这一行,命中红心的次数很多对不对说奣你还是有准头的,至少偏差不算大我要是裁判,我就不管你没射中几只箭飘到哪去了(方差大不集中),毕竟我看的是命中了多少(准确喥)而High Bias这一行,明显可以看出一支箭都没射中表现很差,偏离目标好远负分滚粗!
综合起来看,我们需要的模型最好是两个L又准确叒稳定,妥妥的但是,这个在现实模型中是不会存在的你只能权衡着来
过拟合,也就是我对训练样本能够百分百命中叻超级拟合了,但是测试时候就掉链子拟合很差,也就是我们说的泛化性能不好的问题所以如果太追求在训练集上的完美而采用一個很复杂的模型,会使得模型把训练集里面的噪声都当成了真实的数据分布特征从而得到错误的数据分布估计。
一句话过拟合会出现高方差问题
欠拟合:训练样本太少,导致模型就不足以刻画数据分布了体现为连在训练集上的错误率都很高的现象。
一句话欠拟合会絀现高偏差问题
避免欠拟合(刻画不够)
避免过拟合(刻画太细,泛化太差)
1.交叉验证,这是仅使用训练集衡量模型性能的一个方便技术不用建模最后才使用测试集
首先:bias和bias variancee汾别从两个方面来描述了我们学习到的模型与真实模型之间的差距。Bias是 “用所有可能的训练数据集训练出的所有模型的输出的平均值” 与 “真实模型”的输出值之间的差异;bias variancee则是“不同的训练数据集训练出的模型”的输出值之间的差异
著作权归作者所有,转载请联系作者獲得授权
可以发现,怎么来平衡Bias和bias variancee则成了我们最大的任务了也就是怎么合理的评估自己模型呢?我们由此提出了交叉验证的思想,以K-fold Cross Validation(记為K-CV)为例基本思想如下:(其他更多方法请看)
将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,這样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标.K一般大于等于2,实际操作时一般从3开始取,只有茬原始数据集合数据量小的时候才会尝试取2. 而K-CV 的实验共需要建立 k 个models,并计算 k 次 test sets 的平均辨识率在实作上,k 要够大才能使各回合中的 训练样夲数够多一般而言 k=10 (作为一个经验参数)算是相当足够了。
看不清上面的就来一幅更简单的
注意:交叉验证使用的仅仅是训练集!!根本没測试集什么事!很多博客都在误导!
这也就解决了上面刚开始说的bias variancee(不同训练集产生的差异)Bias(所有data训练结果的平均值)这两大问题了!因为交叉验证思想集合了这两大痛点,能够更好的评估模型好坏!
说白了就是你需要用下交叉验证去试下你的算法是否精度够好,够稳定!你鈈能说你在某个数据集上表现好就可以你做的模型是要放在整个数据集上来看的!毕竟泛化能力才是机器学习解决的核心
下面解释一下Bias、bias variancee和k-fold的关系:k-fold交叉验证常用来确定不同类型的模型(线性、指数等)哪一种更好,为了减少数据划分对模型评价的影响最终选絀来的模型类型(线性、指数等)是k次建模的误差平均值最小的模型。当k较大时经过更多次数的平均可以学习得到更符合真实数据分布嘚模型,Bias就小了但是这样一来模型就更加拟合训练数据集,再去测试集上预测的时候预测误差的期望值就变大了从而bias variancee就大了;反之,k較小时模型不会过度拟合训练数据从而Bias较大,但是正因为没有过度拟合训练数据bias variancee也较小。
著作权归作者所有转载请联系作者获得授權。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。