【笔记】Ada Boosting和Gradient Boosting
Ada Boosting和Gradient Boosting
Ada Boosting
除了先前的集成学习的思路以外,还有一种集成学习的思路boosting,这种思路,也是集成多个模型,但是和bagging不同的是,bagging的模型之间是独立的关系,但是在boosting中,模型之间不是独立的关系,而是一种相互增强的关系
集成多个模型,每个模型都在尝试增强整体的效果,这种效果就叫做boosting
其中最为典型的就是Ada boosting,以简单的回归问题为例,首先对原始的数据集(所有点的权值都一样大)进行学习(使用某一种学习方法),学习完以后可以得到模型,基本所有的算法都会犯一些错误,那么就对错误的点(基本没有错误的点以外的点)进行标记,让这些点产生权重的差别(改变权值可以看出是极值的问题),让上一次学习中没有学习到的点的权值增大,减小上次学习中已经学习过的点的权值,这样形成了新的样本数据
然后再使用学习算法进行学习,由于权值的差距,因此学习的时候可能优先选择上次没有学习的点,然后又可以得到一个模型,同样的,其中也有着没有被学习和被学习了的点,然后重复操作,将两种类型的点进行权值的变化,形成新的样本数据,再次学习,然后再进行上面的操作,依次进行下去
这样生成的模型都是在弥补上次没有被预测成功地样本点,也就是说每一个模型都在boost上一个模型犯的错误,经过这个过程,也可以生成很多的子模型,但是是基于同样的样本点形成的,不过区别在权重的不一样,最后用这些有差异的子模型进行综合投票,来作为Ada boosting整体的学习结果

Ada boosting的具体实现
(在notebook中)
加载好需要的包,然后使用虚拟数据,设置随机种子为666,然后绘制图像
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
X,y = datasets.make_moons(n_samples=500,noise=0.3,random_state=666)
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
图像如下

对数据进行分割
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=42)
调用sklearn中的AdaBoostClassifier类就可以实现Ada boosting,同样的使用决策树算法作为基本的算法,在实例化的时候传入参数,设置算法为决策树算法,在实例化决策树的时候也可以进行传参,这里设置最大深度为2,然后设置集成的分类器数量为500,然后进行训练,计算准确度
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
ada_clf = AdaBoostClassifier(DecisionTreeClassifier(max_depth=2),n_estimators=500)
ada_clf.fit(X_train,y_train)
ada_clf.score(X_test,y_test)
结果如下

Gradient Boosting
另外一个比较常见的boosting算法是gradient boosting,这种算法的思想是,现针对整体的数据集使用某一个算法进行训练,训练出模型后设这个模型为m1,这个模型的对应的产生的错误为e1,然后针对e1训练第二个模型m2,同时得到的错误设置为e2,然后再针对e2训练第三个模型m3,得到的错误称为e3,以此类推,在这其中,m2的作用是可以预测出m1将会犯的错误,m2的输出是就是m1所犯的错误,同理往下,每一个模型都是对前面的模型所犯的错误的补偿,当有一个新的数据,那么最终预测的结果应该就是这些预测模型的总和
具体实现,只要调用sklearn中的GradientBoostingClassifier类就可以了,传入的参数这里设置为最大深度为2,子模型的数量为30,然后进行训练以后计算出准确度
from sklearn.ensemble import GradientBoostingClassifier
gb_clf = GradientBoostingClassifier(max_depth=2,n_estimators=30)
gb_clf.fit(X_train,y_train)
gb_clf.score(X_test,y_test)
结果如下

boosting也可以解决回归问题,和bagging一样,只要使用sklearn中的解决回归问题的类就可以了,比如adaboostregressor和GradientBoostingregressor这两个类都可以解决回归问题

【笔记】Ada Boosting和Gradient Boosting的更多相关文章
- 机器学习:集成学习(Ada Boosting 和 Gradient Boosting)
一.集成学习的思路 共 3 种思路: Bagging:独立的集成多个模型,每个模型有一定的差异,最终综合有差异的模型的结果,获得学习的最终的结果: Boosting(增强集成学习):集成多个模型,每个 ...
- 机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 模型组合(Model Combining)之Boosting与Gradient Boosting
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- A Gentle Introduction to the Gradient Boosting Algorithm for Machine Learning
A Gentle Introduction to the Gradient Boosting Algorithm for Machine Learning by Jason Brownlee on S ...
- How to Configure the Gradient Boosting Algorithm
How to Configure the Gradient Boosting Algorithm by Jason Brownlee on September 12, 2016 in XGBoost ...
- 论文笔记:LightGBM: A Highly Efficient Gradient Boosting Decision Tree
引言 GBDT已经有了比较成熟的应用,例如XGBoost和pGBRT,但是在特征维度很高数据量很大的时候依然不够快.一个主要的原因是,对于每个特征,他们都需要遍历每一条数据,对每一个可能的分割点去计算 ...
- 论文笔记:GREEDY FUNCTION APPROXIMATION: A GRADIENT BOOSTING MACHINE
Boost是集成学习方法中的代表思想之一,核心的思想是不断的迭代.boost通常采用改变训练数据的概率分布,针对不同的训练数据分布调用弱学习算法学习一组弱分类器.在多次迭代的过程中,当前次迭代所用的训 ...
- Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting的区别
引自http://blog.csdn.net/xianlingmao/article/details/7712217 Jackknife,Bootstraping, bagging, boosting ...
- 【机器学习】Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting
Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting 这些术语,我经常搞混淆, ...
随机推荐
- 获取 Windows 密码「GitHub 热点速览 v.21.28」
作者:HelloGitHub-小鱼干 安全问题一直是 GitHub 的一大热点,因为数据安全问题诞生的各类自托管服务便是.而本周周榜上的 2 个和安全主题相关的项目,有些不同.mimikatz 是个老 ...
- java.util.Date 与 java.sql.Date
java.sql.Date 继承 java.util.Date 区别: 1.java.sql.Date 一般用于数据库 2.java.sql.Date 没有时分秒,涉及时分秒的函数都会报异常(且这些方 ...
- ROS2学习之旅(2)——配置ROS2环境
目录 1.source一下setup文件 2.自动source 3.自动进入工作区(不常用) 4.检查环境变量是否设置成功 5.总结 ROS2依赖于使用shell(终端)环境组合工作空间的概念.工作空 ...
- 每日英语——the rest of my life
<the rest of My life> 词面意思:我的余生 实际意思:我的余生 1. 歌曲:<The Rest of My life> Less Than Jake 歌词 ...
- C语言代码段
/* 功 能:将str字符串中的oldstr字符串替换为newstr字符串 * 参 数:str:操作目标 oldstr:被替换者 newstr:替换者 * 返回值:返回替换之后的字符串 */ char ...
- ESP32引脚参考(转)
ESP32芯片配有48个具有多种功能的引脚.并非所有的引脚都暴露在所有的ESP32开发板中,有些引脚不能使用. 关于如何使用ESP32 GPIO有很多问题.你应该用什么pin?在项目中应该避免使用哪 ...
- Java | 一个".java"源文件中是否可以包括多个类(不包括内部类)
第一种情况:(有public) 定义一个java源文件(Hello.java),里面只有一个类: public class Hello { public static void main(string ...
- 【动态规划】合唱队形 luogu-
分析 做两遍最长上升子序列,在遍历一下,取最大值. AC代码 #include <bits/stdc++.h> using namespace std; #define ms(a,b) m ...
- 给KVM添加新的磁盘
给KVM添加新的磁盘 两种方案 1 添加虚拟磁盘文件 2 添加物理磁盘 硬件配置: 物理主机(宿主机):foundation 物理主机磁盘情况: 我们有三块物理磁盘,sda.sdb和sdc(这里都是S ...
- vulnhub-XXE靶机渗透记录
准备工作 在vulnhub官网下载xxe靶机 导入虚拟机 开始进行渗透测试 信息收集 首先打开kali,设置成NAT模式 查看本机ip地址 利用端口扫描工具nmap进行探测扫描 nmap -sS 19 ...