Adboost算法

1描述

AdaBoost算法每次都是使用全部的样本进行训练,每一轮训练结束后,得到一个基学习器,并计算该基学习器在训练样本的预测误差率,然后根据这个误差率来更新下一轮训练时训练集合样本的权重系数和本轮基学习器的投票权重,目标是使得本轮被错误预测的样本在下一轮训练中得到更大的权重,使其得到更多的重视,并且预测越准确的基学习器在最后集成时占的投票权重系数更大,使其受到更多的重视,并且预测越准确的基学习器在最后集成时占的投票权重系数越大。这样,通过多轮迭代可以得到多个基学习器及其对应的投票权重,最后按照各自的权重进行投票来输出最终预测结果。

2.AdaBoost的工作过程

AdaBoost运行过程有四个需要解决的问题

(1).计算每一个训练集样本的权重

(2).训练基模型

(3).计算基学习器的投票权重

(4).计算各个基学习器的投票权重

第一个问题 计算每一次训练集样本的权重

首先,AdaBoost每一轮都会使用全部样本进行训练,但是每一轮都会改变样本的权重,它的方法是:用本轮得到的基训练器对所有训练样本进行一次预测,得到一个预测误差率;下一轮训练中各个训练样本的情况由该训练样本自身,本轮基学习器对该样本的预测值,本轮基学习器对训练样本的预测值,本轮基学习器对样本的整体预测误差率三者共同决定。

第二个问题 如何训练基模型

基分类器使用的是CART决策树,只要每一轮将原始样本按新的权重系数重新计算出来后,基学习器的训练和普通单模型训练过程是完全一致的。

第三个问题 如何计算基模型的预测误差率

对于分类问题可以使用0-1损失函数;对于回归问题,计算基模型的预测误差率可以使用均方差或者指数损失函数。

第四个问题 如何训练各个基学习器的投票权重

各个基学习器的投票权重ak是根据每一轮的预测误差率得到的,假设通过K轮迭代,得到了各个基学习器的投票权重ak,k=1,2,3,...K,那么对于结果为{-1,1}的二分类问题,最后的投票公式为:

f(x)=sign\sum_{k=1}^{k}a_k*T_k(x)

其中,Tk(x)是第k个基学习器的预测结果值。但是实际问题不会是简单的二分类问题。

3.AdaBoost的多分类问题

假设有M个样本{(x1,y1),(x2,y2)......(xm,ym)},样本可以分为L个类别,类别分别为{c1,c2,...cl}

函数I代表0-1损失函数

1.SAMME算法

(1).初始化数据的分布权重,采样平等对待的方式,也就是给每个样本的权重设置为wij=1/m

(2).使用带有权重的样本训练第一个基分类器T1(x)

(3).计算基分类器T1(x),在训练集上的分类误差率e1

e_1=\sum_{i=1}^{m}\omega _{1i}I(T(x_i) \neq y)

(4).计算基分类器T1(x)的投票权重a1

(5).第二轮训练更新样本权重

w_{i}=\frac{w_i*exp(-\alpha*y_iT_1(x_i))}{\sum_{i=1}^{M}w_i*exp(\alpha_1y_i*T_1(x_i))}

分母是归一化,不影响,唯一有影响的是yi*T1(xi),代表预测和实际的乘积,当预测相同的时候,下一轮w会变小,如果不相同,则下一轮w会变大,代表对这个数据的关注度更高。其实我们可以令yi*Ti(xi) = 1或者-1,当预测与实际一致,则取1,不一致取-1

(6).利用更新后的第二轮样本权重再次训练得到第二个基分类器T2(x),计算分类器误差e2和投票权重a2,重复上面的步骤得到多个分类器和投票权重,最后把分类器组合起来

f(x)=arg Max[\sum_{k=1}^{K}\alpha_k*I(T_k(x)=c_l)]

L={1,3,......k}

代表让分类器带权对样本x进行投票,然后选出得票最多的类别cl作为样本x的最终预测类别。

2.SAMME.R算法

1.同样的,先初始化每个数据的分布权重,采用平等对待的方式,每一个数据的权重设置为1/M

2.利用带权重的的训练数据集,采用单个基本模型进行训练,得到第一个基分类器T1(x)

3.利用基分类器T1(x)计算各训练样本xi属于各类别的c_m的加权概率p_{1i}^{(l)}

p_{(1i)}^{(l)}=w_{1i}p(y_i=c_l/x_i)

4.计算基分类器T1(x)对样本xi在第L个类别上的投票权重

a_1^{l}=(L-1)(ln p_{1i}^{(l)}-\frac{1}{L}\sum_{L=1}^{L}lnp_{1i}^{(l)}),l=1,2,...L

5.然后更新第二轮的训练集权重

w_1=w_{1i}*exp(-\frac{L-1}{L}\sum_{l=1}^{L}\delta _{i}^{l}lnp_{1i}^{(l)}), i =1,2,...,M

\delta_{i}^{(l)}=\left\{\begin{matrix}1,y_i=c_l & \\-\frac{1}{L-1},y \neq c_l & \end{matrix}\right.

6.归一化权重

7.利用更新后的第二轮样本权重再次训练第二个基分类器T2(x),再次计算预测概率和投票权重,重复上面的步骤,然后对基分类器进行组合。

f(x)=arg Max[\sum_{k=1}^{K}\alpha_k*(x_i)]

4.AdaBoost回归

AdaBoost的回归问题与分类分类问题的基本过程差不多,只是在计算预测误差率时采用的方式不同,分类问题采用的是0-1损失,回归问题采用的是平方误差或者指数误差。在预测结果的时候,分类问题采用的是按权重投票决定最后的结果,而回归问题是取各基学习器预测结果乘以各自的权重后求和作为结果。

回归问题的处理过程与分类差不多

(1).初始化样本权重,采用平等对待的方式

(2).利用权重对数据进行分类,训练基学习器T1(x)

(3).计算误差e1,这里的误差是计算相对误差,先求最大的误差,然后所有误差除以最大误差,最后根据样本权重求加权误差

(4).计算投票权重

a1 = e1/(1-e1)

(5)按照上面的流程训练第二个分类器

(6).把全部的分类器集成起来

5.scikit-learn关于AdaBoost的用法

以分类为例子    

class sklearn.ensemble.AdaBoostClassifier(
estimator=None, #基分类器的设置,新版本以及不是这样了
*
n_estimators=50, #分类器个数
learning_rate=1.0, #学习率
algorithm='SAMME.R',#算法类型
 random_state=None, #随机数种子
base_estimator='deprecated'#基分类器

)
 

可以获得属性
 

estimator_:estimator

The base estimator from which the ensemble is grown.

New in version 1.2: base_estimator_ was renamed to estimator_.

base_estimator_ :estimator

Estimator used to grow the ensemble.

estimators_:list of classifiers

The collection of fitted sub-estimators.

classes_:ndarray of shape (n_classes,)

The classes labels.

n_classes_:int

The number of classes.

estimator_weights_:ndarray of floats

Weights for each estimator in the boosted ensemble.

分类器权重

estimator_errors_:ndarray of floats

Classification error for each estimator in the boosted ensemble.

分类器误差

feature_importances_:ndarray of shape (n_features,)

The impurity-based feature importances.

特征重要性

n_features_in_:int

Number of features seen during fit.

特征数量

feature_names_in_:ndarray of shape (n_features_in_,)

Names of features seen during fit. Defined only when X has feature names that are all string

特征的名称-只有在特征有被定义名字的时候用的上

也就是我们可以指定学习率,基分类器数量。

能够查看特征的重要程度。

from sklearn.datasets import load_iris
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
#加载数据
data = load_iris()#分数据
X = data['data']
y = data['target']X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2, random_state=42)cls = AdaBoostClassifier(n_estimators=10,learning_rate=0.9)cls.fit(X_train, y_train)
y_pred = cls.predict(X_test)
print(confusion_matrix(y_test, y_pred))#查看各个属性
print('特征重要性',cls.feature_importances_)
print('类别',cls.n_classes_)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/326672.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot实现数据加密脱敏:注解 + 反射 + AOP

文章目录 1. 引言2. 数据加密和脱敏的需求3. Spring Boot项目初始化4. 敏感数据加密注解设计5. 实现加密和脱敏的工具类6. 实体类和加密脱敏注解的使用7. 利用AOP实现加密和脱敏8. 完善AOP切面9. 测试10. 拓展功能与未来展望10.1 加密算法的选择10.2 动态注解配置 11. 总结 &am…

三剑客前端教程

前端教程 结构层(html)表现层(css)行为层(javascript) HTML 超文本标记语言) HTML(超文本标记语言——HyperText Markup Language)是构成 Web 世界的一砖一瓦。它定义…

云服务器ECS搭建个人项目

一、登录云服务器ECS 在ECS实例的操作列中点击远程连接云服务器ECS,点击实例最右侧的远程连接按钮,并立即登录后会跳转至Workbench的登录页面。但是第一次进去不知道密码?可以重置密码 登录后可以看到如下页面,说明已经成功登录到…

【数据结构】树的遍历

树的遍历 前序遍历 前序遍历是按照根节点->左子树->右子树的顺序进行遍历 图片来源维基百科深度优先遍历(前序遍历): F, B, A, D, C, E, G, I, H. 代码实现 递归 # class TreeNode: # def __init__(self, x): # self.val x # …

RFID标签在汽车监管方面的应用与实施方案

RFID技术在汽车工业领域得到了广泛应用,主要体现在汽车资质证书远程监管系统的普及化,系统包括OBD接口监视器、车证监管箱、超高频读写设备、应用系统软件以及大数据采集与处理等组成部分。 在汽车物流监管方面,系统利用OBD接口监控车辆并实时…

idea中使用Lombok 失效,@Slf4j 找不到符号的解决办法

文章目录 一、前言二、问题排查和解决方案三、 其他解决方案3.1 另一种解决方案3.2 参考文章 一、前言 今天在一个多module工程中,新增了一个 springboot(版本 2.2.4.RELEASE) module,像往常一样,我引入了lombok依赖&…

Nacos 持久化及集群的搭建【微服务】

文章目录 一、统一配置管理二、微服务配置拉取三、配置热更新四、多环境共享配置五、Nacos 集群搭建1. 集群结构2. 初始化数据库3. 搭建集群 六、Nginx 反向代理七、启动项目测试 一、统一配置管理 案例练习的时候我们只有两个微服务,管理起来非常简单,但…

数据采集有哪些方法?HTTP代理起到什么作用?

在这个数字化的时代,数据就如同生活中不可或缺的元素,我们的行为、喜好、甚至是想法都被转化成了数字化的信息。那么,现代社会是如何进行数据的采集的呢?让我们一同来看看! 1. 网络浏览行为的追踪 在我们浏览互联网的…

如何从 Android手机存储卡中恢复已删除的文件

作为 Android 用户,您可能会使用 存储卡来扩展手机的存储容量,并存储照片、视频和其他类型的文件。但意外发生时,您可能会错误地删除其中一些文件,或者由于其他原因而丢失它们。在大多数情况下,您可以通过主动并遵循正…

【SpringBoot实战专题】「开发实战系列」全方位攻克你的技术盲区之Spring定义Jackson转换Null的方法和实现案例

Spring自动定义Jackson转换Null得方法 背景MessageConverter 使用Jackson原生方式处理空字段(次重点方案)ObjectMapper的配置选项通过使用注解的方式 MappingJackson2HttpMessageConverter(重点方案)创建MappingJackson2HttpMessa…

vue3+echart绘制中国地图并根据后端返回的坐标实现涟漪动画效果

1.效果图 2.前期准备 main.js app.use(BaiduMap, {// ak 是在百度地图开发者平台申请的密钥 详见 http://lbsyun.baidu.com/apiconsole/key */ak: sRDDfAKpCSG5iF1rvwph4Q95M6tDCApL,// v:3.0, // 默认使用3.0// type: WebGL // ||API 默认API (使用此模式 BMapBMapGL) });i…

vue3 实现el-date-picker日期筛选过程

一、图例 二、需求&#xff1a; 有2个查询条件&#xff0c;startTime 和 endTime 选中时间1&#xff0c;禁止选中时间2&#xff0c;当前值传递给 startTime 选中时间2&#xff0c;禁止选中时间1&#xff0c;当前值传递给 startTime 和 endTime 三、完整代码 <div class…