一、原理解释

Bootstrapping 方法是种集成方法,通俗解释就是盲人摸象,很多盲人摸一头象,各自摸到的都不一样,但是都比较片面,当他们在一起讨论时,就得到了象的整体。

Bootstrap的过程,类似于重采样,如下图所示:

对于小数据集的鲁棒性特别有用。

每个模型得到一些结果之后,bagging方法最后是取均值或投票,来确定最后的模型参数(这样合理吗?),如下图所示:

在另一种集群方法中,bootstrap方法是串联型的,如下图所示

二、Adaboost实践

Adaboost类库在scikit-learn中,有两个,分别是AdaboostClassifier和AdaboostRegressor两个,从名字就可以看出,一个用于分类,一个用于回归。

  1. 载入库类
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_gaussian_quantiles
  1. 生成一些随机数据来做二元分类
# 生成2维正态分布,生成的数据按分位数分为两类,500个样本,2个样本特征,协方差系数为2
X1, y1 = make_gaussian_quantiles(cov=2.0,n_samples=500, n_features=2,n_classes=2, random_state=1)
# 生成2维正态分布,生成的数据按分位数分为两类,400个样本,2个样本特征均值都为3,协方差系数为2
X2, y2 = make_gaussian_quantiles(mean=(3, 3), cov=1.5,n_samples=400, n_features=2, n_classes=2, random_state=1)
#讲两组数据合成一组数据
X = np.concatenate((X1, X2))
y = np.concatenate((y1, - y2 + 1))
  1. 数据可视化
plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)


4. 基于决策树的Adaboost来做分类拟合,这里我们选择了SAMME算法,最多200个弱分类器,步长0.8,在实际运用中你可能需要通过交叉验证调参而选择最好的参数。拟合完了后,我们用网格图来看看它拟合的区域。

bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, min_samples_split=20, min_samples_leaf=5),algorithm="SAMME",n_estimators=200, learning_rate=0.8)
bdt.fit(X, y)
  1. 可视化输出数据
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),np.arange(y_min, y_max, 0.02))Z = bdt.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
cs = plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)
plt.show()

  1. 从图中可以看出,Adaboost的拟合效果还是不错的,现在我们看看拟合分数:
print "Score:", bdt.score(X,y)

Score: 0.913333333333
也就是说拟合训练集数据的分数还不错。当然分数高并不一定好,因为可能过拟合。

  1. 现在我们将最大弱分离器个数从200增加到300。再来看看拟合分数。
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, min_samples_split=20, min_samples_leaf=5),algorithm="SAMME",n_estimators=300, learning_rate=0.8)
bdt.fit(X, y)
print "Score:", bdt.score(X,y)

此时的输出为Score: 0.962222222222
这印证了我们前面讲的,弱分离器个数越多,则拟合程度越好,当然也越容易过拟合。

  1. 现在我们降低步长,将步长从上面的0.8减少到0.5,再来看看拟合分数。
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, min_samples_split=20, min_samples_leaf=5),algorithm="SAMME",n_estimators=300, learning_rate=0.5)
bdt.fit(X, y)
print "Score:", bdt.score(X,y)

此时的输出为:

Score: 0.894444444444
可见在同样的弱分类器的个数情况下,如果减少步长,拟合效果会下降。

  1. 最后我们看看当弱分类器个数为700,步长为0.7时候的情况:
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2, min_samples_split=20, min_samples_leaf=5),algorithm="SAMME",n_estimators=600, learning_rate=0.7)
bdt.fit(X, y)
print "Score:", bdt.score(X,y)

此时的输出为:

Score: 0.961111111111
此时的拟合分数和我们最初的300弱分类器,0.8步长的拟合程度相当。也就是说,在我们这个例子中,如果步长从0.8降到0.7,则弱分类器个数要从300增加到700才能达到类似的拟合效果。

注:在深度学习中,由于神经网络已经够大,所以不建议进行bootstrapping操作,没什么特别的意义和作用。

Bootstrapping的意义相关推荐

  1. 内积和外积的物理意义-数学

    内积和外积的物理意义 Persistently关注 2018.07.31 14:28:46字数 277阅读 6,276 向量的内积 ab=ab cos(θ) 向量a和b的长度之积再乘以它们之间的夹角的 ...

  2. 计算机网络技术社团纳新海报,精品社团纳新 | 加入计算机协会和我一起做些有意义的事儿吧~...

    原标题:精品社团纳新 | 加入计算机协会和我一起做些有意义的事儿吧~ 我们是谁? 计算机协会 社团 简介 社团名称:计算机协会 创办时间:2012年 组成部门:技术部,宣传部,秘书部,外联部,策划部. ...

  3. 通过显微镜,人们又看到了一个活生生的但是肉眼看不到的世界。透过成千上万的点击数据,在线世界也就变得更为鲜活,更有意义了。...

    通过显微镜,人们又看到了一个活生生的但是肉眼看不到的世界.透过成千上万的点击数据,在线世界也就变得更为鲜活,更有意义了. 转载于:https://www.cnblogs.com/beingonline ...

  4. 几何图形在logo设计中的有哪些情感意义?

    作为一名合格的UI设计师,工作中遇到的问题有很多,例如logo设计,是很多UI设计师的一个日常工作之一,小编今天为大家介绍的UI设计培训教程就是几何图形在logo设计中的有哪些情感意义?希望能够帮助到 ...

  5. 矩阵相关概念的物理意义

    参考链接: 矩阵乘法的本质是什么? 条件数 病态矩阵与条件数(&& 与特征值和SVD的关系) 矩阵的物理意义: https://blog.csdn.net/NightkidLi_911 ...

  6. 面试官:private修饰的方法可以通过反射访问,那么private的意义是什么?

    欢迎关注方志朋的博客,回复"666"获面试宝典 Java,在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名) ...

  7. 翟天临首次回应毕业季被学生骂:能缓解论文季压力,就有意义

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 转自 | 募格学术 「知网是什么?」 在无数为论文奋战的深夜,一群年 ...

  8. 扒出了3867篇论文中的3万个基准测试结果,他们发现追求SOTA其实没什么意义

    视学算法报道 编辑:蛋酱.张倩 转载自公众号:机器之心 在追求 SOTA 之前,研究者们或许更应该认真审视「基准」本身. 在基准数据集上比较模型性能是人工智能领域衡量和推动研究进展的重要方式之一.研究 ...

  9. 既然很多工作 35 岁就会被裁员,那么深耕一个领域的意义是什么?

    点击上方"视学算法",选择"星标" 干货第一时间送达 编辑:3D视觉工坊 https://www.zhihu.com/question/391921616 本文 ...

最新文章

  1. 我的Android进阶之旅------解决Android Studio编译后安装apk报错:The APK file does not exist on disk...
  2. 【VM单机虚拟化学习】之View 5.1新体验
  3. .NET自定义获得JSON的方法(System.Runtime.Serialization.Json)
  4. mysql启动报错2002_mysql登陆启动报错 ERROR 2002 (HY000) 解决方法
  5. 对偶算法与ADMM算法
  6. Mysql 开启远程连接
  7. 【springboot】之自动配置原理
  8. python字符串前面加f什么意思_Python 字符串前面加u,r,b,f的含义
  9. reids的持久化 RDB和AOF
  10. Tomcat的实现原理
  11. Android 权限清单大全
  12. 电钻有刷好还是无刷好_有刷电机与无刷电机究竟哪个好?看完就知道了!
  13. 上小学的划片政策(by quqi99)
  14. 每一个互联网公司都要掌握的《计算广告》,它是数据与计算的灵魂
  15. Java中for循环的应用
  16. 【百度地图API】JS版本的常见问题
  17. 台式机怎样连接连接蓝牙耳机?搜索不到蓝牙耳机?
  18. VS2019如何修改字体
  19. ADRC自抗扰控制自学笔记(包含simulink仿真)(转载)
  20. rocksdb 备份backup

热门文章

  1. jpa日志 logback_SpringBoot | 第二十五章:日志管理之自定义Appender
  2. 运筹学与最优化matlab编程,运筹学与最优化MATLAB编程
  3. Ubuntu更换清华TUNA软件源
  4. 高通相机调试命令和记录
  5. Mac 请求CSR文件 CertificateSigningRequest
  6. 阿里云刘伟光:2 万字解读金融级云原生
  7. 台式电脑组装机相关知识之电源篇
  8. 【纪中集训2019.3.12】Mas的仙人掌
  9. Android震动器Vibrator调用
  10. 电脑C盘红了怎么办?—— 保姆级从根本上解决问题(C盘扩容)