校招在即,准备准备一些面试可能会用到的东西吧。希望这次面试不会被挂。

基本概念

说到机器学习模型的误差,主要就是bias和variance。

  • Bias:如果一个模型的训练错误大,然后验证错误和训练错误都很大,那么这个模型就是高bias。可能是因为欠拟合,也可能是因为模型是弱分类器。

  • Variance:模型的训练错误小,但是验证错误远大于训练错误,那么这个模型就是高Variance,或者说它是过拟合。



这个图中,左上角是低偏差低方差的,可以看到所有的预测值,都会落在靶心,完美模型;

右上角是高偏差,可以看到,虽然整体数据预测的好像都在中心,但是波动很大。

【高偏差vs高方差】

在机器学习中,因为偏差和方差不能兼顾,所以我们一般会选择高偏差、低方差的左下角的模型。稳定性是最重要的,宁可所有的样本都80%正确率,也不要部分样本100%、部分50%的正确率。个人感觉,稳定性是学习到东西的体现,高方差模型与随机蒙的有什么区别?

随机森林为例

上面的可能有些抽象,这里用RandomForest(RF)来作为例子:

随机森林是bagging的集成模型,这里:

\(RF(x)=\frac{1}{B}\sum^B_{i=1}{T_{i,z_i}(x)}\)

  • RF(x)表示随机森林对样本x的预测值;
  • B表示总共有B棵树;
  • \(z_i\)表示第i棵树所使用的训练集,是使用bagging的方法,从所有训练集中进行行采样和列采样得到的子数据集。

这里所有的\(z\),都是从所有数据集中随机采样的,所以可以理解为都是服从相同分布的。所以不断增加B的数量,增加随机森林中树的数量,是不会减小模型的偏差的。

【个人感觉,是因为不管训练再多的树,其实就那么多数据,怎么训练都不会减少,这一点比较好理解】

【RF是如何降低偏差的?】

直观上,使用多棵树和bagging,是可以增加模型的稳定性的。怎么证明的?


我们需要计算\(Var(T(x))\)

假设不同树的\(z_i\)之间的相关系数为\(\rho\),然后每棵树的方差都是\(\sigma^2\).

先复习一下两个随机变量相加的方差如何表示:

\(Var(aX+bY)=a^2 Var(X)+b^2 Var(Y) + 2ab cov(X,Y)\)

  • Cov(X,Y)表示X和Y的协方差。协方差和相关系数不一样哦,要除以X和Y的标准差:

    \(\rho=\frac{cov(X,Y)}{\sigma_X \sigma_Y}\)

下面转成B个相关变量的方差计算,是矩阵的形式:



很好推导的,可以试一试。

这样可以看出来了,RF的树的数量越多,RF方差的第二项会不断减小,但是第一项不变。也就是说,第一项就是RF模型偏差的下极限了。

【总结】

  • 增加决策树的数量B,偏差不变;方差减小;
  • 增加决策树深度,偏差减小;\(\rho\)减小,\(\sigma^2\)增加;
  • 增加bagging采样比例,偏差减小;\(\rho\)增加,\(\sigma^2\)增加;

【bagging vs boost】

之前也提到过了boost算法:

一文读懂:GBDT梯度提升

GBDT中,在某种情况下,是不断训练之前模型的残差,来达到降低bias的效果。虽然也是集成模型,但是可以想到,每一个GBDT中的树,所学习的数据的分布都是不同的,这意味着在GBDT模型的方差会随着决策树的数量增多,不断地增加。

  • bagging的目的:降低方差;
  • boost的目的:降低偏差

喜欢的话请关注我们的微信公众号~【你好世界炼丹师】。

  • 公众号主要讲统计学,数据科学,机器学习,深度学习,以及一些参加Kaggle竞赛的经验。
  • 公众号内容建议作为课后的一些相关知识的补充,饭后甜点。
  • 此外,为了不过多打扰,公众号每周推送一次,每次4~6篇精选文章。

微信搜索公众号:你好世界炼丹师。期待您的关注。

最新文章

  1. iOS开发——高级篇——iOS中常见的设计模式(MVC/单例/委托/观察者)
  2. 记一次ifconfig命令
  3. 钉钉开发中post异步调用问题
  4. [Xamarin] 用Service 來製作一個Notification的時鐘 (转帖)
  5. memcpy的用法及实现
  6. Keil_uvision_4基本使用教程
  7. hdu 1215 七夕节
  8. 使用cocapods报错 [!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes
  9. Kruskal和Prim算法求最小生成树
  10. 如何实现windows命令提示符的tab补全
  11. Nginx动静分离实现
  12. MFC控件实现视频“暂停” “播放”循环
  13. Offcie2013 无法显示 Aurora解决方法
  14. [MXNet逐梦之旅]练习一·使用MXNet拟合直线手动实现
  15. mysql中有多种存储引擎,每种引擎都有自己的特色
  16. 上传znbsite
  17. php多进程和多线程的比较
  18. GB2312汉字编码字符集对照表
  19. 8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
  20. Python小白学习之路(十四)—【作用域】【匿名函数】【编程方法论】【高阶函数】

热门文章

  1. SpringBoot的 HelloWorld
  2. SpringBoot--SpringMVC自动配置
  3. [apue] 一个工业级、跨平台的 tcp 网络服务框架:gevent
  4. 【汇总】 为园友写的皮肤制作工具 awescnb
  5. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手
  6. Java实现 蓝桥杯 算法训练 字符串长度(IO无敌)
  7. Java实现 LeetCode 204 计数质数
  8. java实现数字的值返回
  9. 【Nodejs】HTML 实时同步(类似Vue实时同步刷新文件->浏览器)
  10. opencl(5)缓存对象