认识

Bagging 的全称为 (BootStrap Aggregation), 嗯, 咋翻译比较直观一点呢, 就有放回抽样 模型训练? 算了, 就这样吧, 它的Paper是这样的:

Algorithm Bagging:

  1. Let n be the number of bootstrap samples

这步非常关键: 对训练样本进行 有放回抽样, 这样就可达到,将原来只有一个数据集,现在有n个数据集了.

  1. for i = 1 to n do:

​ 3. Draw bootstrip sample of size \(m, D_i\)

\(D_i\) 表示第 i 个采样的数据集

  1. Train base classifier \(h_i\) on \(D_i\)

与之前的 voting 不同在于, 这里 hi 算法没有变, 只是数据变了

  1. \(\hat y = mode(h_1(X), h_2(X)..)\)

mode 是众数的意思, 民主投票, 来确定最终结果

BootStrap 有放回采样

假设数据是均匀分布的, 然后我们有采样了一个样本 X, 假设有 n 条数据, 则每条数据, 被抽中的概率是均等的, 都是:

$P(x_i) = \frac {1}{n} $

没有被抽中的概率是:

\(1-P(x_i) = 1-\frac {1}{n}\)

现在进行有放回抽样, 该条数据在 n次都没有被抽中的概率为:

\(P = (1- \frac {1}{n})^n\)

当 n -> 无穷 时:

\(=\frac {1}{e} = 0.3682...\)

洛必达法则求极限

\(lim_{x \rightarrow 0} e^{ln(1-\frac{1}{n})^n} = e^{lim_{x \rightarrow 0} e^{ln(1\frac{n-1}{n})^n}} = e^1 = e\)

Bias-Variance 分解

也就是误差分解. 当然这里引入也是为了, 说明, 为啥这种 bootstrap 比较能充分利用样本数据做训练

\(Loss = Bias + Variance + Noise\)

怎么理解这个误差(真实值 和预测值)呢, 其实就从上面的式子, 从误差产生的原来做一个分析:

  • Bias : 模型自身的偏差, 模型都是由假设前提(目标函数的嘛, 只是对真实的一种近似

  • Variance: 样本数据的训练误差, 每次抽样不一样, 训练的model也不太一样.
  • Noise: 真实的样本数据和理想模型有差距, 数据点很多是"异常值" 要特征处理等

case

我自己的栗子, 也谈到过, 就上学那会儿, 为了更好拟合数据, 然后模型很复杂, 就过拟合了. 最直观的是简单线性回归

通常收集到的点是有异常值的, 或者数据的分布没有很线性, 这时候, 如果不考虑实际情况, 就去求解, 不论是最小二乘, 还是梯度下降啥都, 能求解, 但必然是欠拟合的, 这样得到的模型, 会有较大的bias.

于是这时候, 为了更好拟合数据, 我通过给模型增加项, 或正则...之类的, 这样造成的问题是 过拟合了. 或者换一个复杂一些的模型, 如决策树来拟合, 也会面临这样的 "均衡问题".

说这么多,就只是想引入这种, bootStrap (有放回抽样)的 方式来训练模型, 做voting , 这样是可以 "抵消" variance 的. 即从整体来说, 这种有放回抽样的方式来训练模型, 会让样本得到比较充分的 训练. 也可以理解为, 投资组合理论中的, 降低风险. 好像也不大恰当的比喻哦.

上学时有过严格证明的, 关于降低风险, 回头整理下,补充一波吧再

最新文章

  1. JAVA 1.3 (原生数据类型 Primitive Data Type)续
  2. Javascript一些小细节
  3. 采用post的方式提交数据
  4. PostgreSQL数据导出导入COPY
  5. 深入理解Sqlserver索引
  6. 分布式发布订阅消息系统 Kafka 架构设计
  7. Asp.net Mvc4 基于Authorize实现的模块访问权限
  8. JAVA按字节读取文件
  9. crawler_爬虫开发的准备工作【工具】
  10. 【java设计模式】【行为模式Behavioral Pattern】策略模式Strategy Pattern
  11. java排序算法(十):桶式排序
  12. Java基础学习(五)-- Java中常用的工具类、枚举、Java中的单例模式之详解
  13. 从零开始的H5生活
  14. [Jave - JDBC] executeUpdate & executeQuery & execute
  15. python加密(MD5)
  16. #6284. 数列分块入门 8(区间询问等于一个数 cc 的元素,并将这个区间的所有元素改为 c)
  17. SQL-48 将所有获取奖金的员工当前的薪水增加10%。
  18. spread与react
  19. 动态生成js数据Response.Expires=1440竟然无效?
  20. InetAddress问题

热门文章

  1. 浅谈SOA与RPC
  2. Spark & Scala:
  3. VIJOS-P1064 迎春舞会之数字舞蹈
  4. ubuntu自定义截图截图
  5. flink源码学习
  6. 【转载】预处器的对比——Sass、LESS和Stylus
  7. Codeforces Round #545 (Div. 2) 交互 + 推公式
  8. Linux性能优化实战学习笔记:第四十五讲
  9. [LeetCode] 85. Maximal Rectangle 最大矩形
  10. [LeetCode] 241. Different Ways to Add Parentheses 添加括号的不同方式