提升方法(Boosting)

文章目录

    • 1. 提升方法AdaBoost算法
    • 2. AdaBoost算法训练误差分析
    • 3. AdaBoost算法的解释
    • 4. 提升树
    • 5. sklearn 实例

提升(boosting)方法是一种常用的统计学习方法,应用广泛且有效。

在分类问题中,它通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能

1. 提升方法AdaBoost算法

  • 思路:多个算法的判断结果综合
  • 弱学习方法容易获得,通过组合一系列弱学习方法,提升出来强学习方法
  • 大多数提升方法:改变训练数据的概率分布(权值分布)
  • 如何改变权值或概率分布:AdaBoost 的做法是,提高被前一轮弱分类器错误分类样本的权值,没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注
  • 如何将弱分类器组合:AdaBoost 采取加权多数表决的方法。
    加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用;减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

AdaBoost 模型是弱分类器的线性组合:

f(x)=∑m=1MαmGm(x)f(x)=\sum_{m=1}^{M} \alpha_{m} G_{m}(x)f(x)=m=1MαmGm(x)

  • AdaBoost 算法每次迭代中,提高前一轮分类器错误分类数据的权值,降低被正确分类的数据的权值。
  • AdaBoost 将基本分类器的线性组合作为强分类器,给分类误差率小的基本分类器大的权值,给分类误差率大的基本分类器小的权值。

算法步骤

1)给每个训练样本(x1,x2,….,xNx_{1},x_{2},….,x_{N}x1,x2,.,xN)分配权重,初始权重 w1iw_{1i}w1i 均为 1N\frac{1}{N}N1

2)针对带有权值的样本进行训练,得到基本分类器 GmG_mGm(初始模型为 G1G1G1)。

3)计算模型 GmG_mGm 的误分率 em=∑i=1NwmiI(yi≠Gm(xi))e_m=\sum\limits_{i=1}^N w_{mi} I(y_i\not= G_m(x_i))em=i=1NwmiI(yi=Gm(xi))

4)计算模型 GmG_mGm 的系数 αm=12ln⁡1−emem\alpha_m=\frac{1}{2} \ln \frac{1-e_m}{e_m}αm=21lnem1em

5)根据误分率 eee 和当前权重向量 wmw_mwm 更新权重向量 wm+1w_{m+1}wm+1
wm+1,i=wm,iZmexp⁡(−αmyiGm(xi))w_{m+1,i} = \frac{w_{m,i}}{Z_m} \exp (-\alpha_my_iG_m(x_i))wm+1,i=Zmwm,iexp(αmyiGm(xi))
ZmZ_mZm 是规范化因子, Zm=∑i=1Mwm,iexp⁡(−αmyiGm(xi))Z_m = \sum\limits_{i=1}^M w_{m,i} \exp (-\alpha_my_iG_m(x_i))Zm=i=1Mwm,iexp(αmyiGm(xi))

6)计算组合模型 f(x)=∑m=1MαmGm(xi)f(x)=\sum\limits_{m=1}^M \alpha_mG_m(x_i)f(x)=m=1MαmGm(xi) 的误分率。

7)当组合模型的误分率或迭代次数低于一定阈值,停止迭代;否则,回到步骤 2)

2. AdaBoost算法训练误差分析

书上有定理证明,AdaBoost 算法能在学习的过程中,不断减少训练误差。

AdaBoost 具有适应性,即它能适应弱分类器各自的训练误差率。这也是它的名称(适应的提升)的由来,Ada是Adaptive的简写。

3. AdaBoost算法的解释

AdaBoost 算法的一个解释是该算法实际是前向分步算法的一个实现。

在这个方法里,模型是加法模型,损失函数是指数损失,算法是前向分步算法。

每一步中极小化损失函数

(βm,γm)=arg⁡min⁡β,γ∑i=1NL(yi,fm−1(xi)+βb(xi;γ))\left(\beta_{m}, \gamma_{m}\right)=\arg \min _{\beta, \gamma} \sum_{i=1}^{N} L\left(y_{i}, f_{m-1}\left(x_{i}\right)+\beta b\left(x_{i} ; \gamma\right)\right)(βm,γm)=argβ,γmini=1NL(yi,fm1(xi)+βb(xi;γ))

得到参数 βm,γm\beta_{m}, \gamma_{m}βm,γm

4. 提升树

提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中最有效的方法之一。

提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。

决策树为基函数的提升方法称为提升树(boosting tree)。

5. sklearn 实例

sklearn.ensemble.AdaBoostClassifier

class sklearn.ensemble.AdaBoostClassifier(base_estimator=None,
n_estimators=50, learning_rate=1.0, algorithm='SAMME.R',random_state=None)
  • algorithm:这个参数只有AdaBoostClassifier有。有两种Adaboost分类算法,SAMME和SAMME.R。
    主要区别是弱学习器权重的度量,SAMME使用分类效果作为弱学习器权重,而SAMME.R使用预测概率大小来作为弱学习器权重。
    由于SAMME.R使用了概率度量的连续值,迭代一般比SAMME快,因此AdaBoostClassifier的默认算法algorithm的值也是SAMME.R。
    注意使用了SAMME.R, 则弱分类学习器参数base_estimator必须限制使用支持概率预测的分类器。SAMME算法则没有这个限制。

  • n_estimators: AdaBoostClassifier和AdaBoostRegressor都有,是弱学习器的最大迭代次数,或者说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,又容易过拟合,一般选择一个适中的数值。默认是50。

  • learning_rate: AdaBoostClassifier和AdaBoostRegressor都有,即每个弱学习器的权重缩减系数ν

  • base_estimator:AdaBoostClassifier和AdaBoostRegressor都有,即弱分类学习器或者弱回归学习器。常用的是CART决策树或者神经网络MLP。

参考:https://github.com/fengdu78/lihang-code

# -*- coding:utf-8 -*-
# @Python Version: 3.7
# @Time: 2020/3/24 23:13
# @Author: Michael Ming
# @Website: https://michael.blog.csdn.net/
# @File: AdaBoost.py
# @Reference: https://github.com/fengdu78/lihang-code
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import load_irisdata = [[0, 1, 3, -1],[0, 3, 1, -1],[1, 2, 2, -1],[1, 1, 3, -1],[1, 2, 3, -1],[0, 1, 2, -1],[1, 1, 2, 1],[1, 1, 1, 1],[1, 3, 1, -1],[0, 2, 1, -1]]
data = pd.DataFrame(np.array(data))
X, y = data.iloc[:, 0:-1], data.iloc[:, -1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
clf = AdaBoostClassifier(n_estimators=50, learning_rate=0.5)
clf.fit(X_train, y_train)
print(clf.score(X_test, y_test))

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

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

相关文章

在两个页面之间传递信息

在asp.net不同页面之间传值的方法主要有三种:(1)用querystring方法:在vs2005中新建asp.net网站(发送端),在页面上添加button,两个TextBox,代码如下:protectedvoidButton1_Click(objectsender, EventArgs e) { string url; u…

英特尔或将大幅裁员

编辑 | David来源 | 新智元受PC业务持续不振影响,曝英特尔计划裁员数千人,可能将影响20%的员工。据知情人士透露,英特尔公司正计划大幅裁员,人数可能达到数千人,以削减成本,应对不景气的个人电脑市场的萎缩…

pandas object转float_25个Pandas实用技巧

本文一共为大家分享25个pandas技巧,此为上篇~显示已安装的版本输入下面的命令查询pandas版本:In [7]:pd.__version__Out[7]:0.24.2如果你还想知道pandas所依赖的模块的版本,你可以使用show_versions()函数:In [9]:pd.show_version…

LeetCode 820. 单词的压缩编码(后缀树)

文章目录1. 题目2. 解题2.1 反转字符串字符查找2.2 后缀树1. 题目 给定一个单词列表,我们将这个列表编码成一个索引字符串 S 与一个索引列表 A。 例如,如果这个列表是 ["time", "me", "bell"],我们就可以将其…

sql查询分页

用sql 查询时select top 10 * from Orders order by orderid desc操作时,我们先对查询结果进行ordersby排序 然后才取出其最前边10个使用sql查询分页时的几点思路(举例均从查询第100到120之间20条记录)1.取前120条记录orderby主键&#xff0c…

openstack实例状态错误_Openstack虚机操作总结

1. 概览Openstack作为常见的IAAS服务,其最核心的对象就是虚机实例,而Openstack下支持的虚机操作有很多种,有些是特别常见的虚机操作比如创建虚机、启动虚机、删除虚机等,而有些虚机操作则是针对特定场景下比如出现故障而提供的保护…

神网站PaperWithoutCode:举报无法复现的论文,让一作社死??

文 | 小戏几乎是可以肉眼可见的看到机器学习领域的论文几何级的增长,在铺天盖地的论文雪花纸片般涌来时,灌水、可复现性、工作真实的意义这些概念也伴随着 Paper 的洪水进入了人们的视野。谈及科研,我们总是站在以往研究的基础上,…

仿WINDWS无限级Ajax菜单树升级1.3版(修补了严重BUG)

仿WINDWS无限级Ajax菜单树升级1.3版(修补了严重BUG) WINDWS无限级Ajax菜单树又升级了(1.3版) 对以下BUG进行了修复 1.只能在文字上拖拽(不能从文件夹图标上拖) 2.拖拽后不刷新菜单的BUG(拖拽为子级菜单后,菜单原地不消失的情况。也…

程序员面试金典 - 面试题 08.11. 硬币(背包DP)

文章目录1. 题目2. 解题1. 题目 硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算 n 分有几种表示法。(结果可能会很大,你需要将结果模上1000000007) 示例1:输入: n 5输出:2解释: 有两种方式可以凑成总金额:…

ab的plc跟西门子哪个好些_2020滚筒洗衣机哪个牌子好?想买滚筒洗衣机的看过来!...

滚筒洗衣机哪个牌子好?想买滚筒洗衣机的人越来越多,滚筒洗衣机无疑是现在大多数年轻人更喜欢的款式,颜值高、功能多、追求个性化洗衣操作,滚筒的不伤衣物更温柔对于有真丝雪纺面料衣物的,滚筒洗衣机现在真是越来越智能…

AI开始参与政治选举了??

编 | David 好困源 | 新智元让AI去参加议会选举,能成吗?一个丹麦政党让AI聊天机器人当了领袖,试图在议会中拿下一席,现距离20000个提名的门槛线仅差19988个了。现在的AI能干的事情太多了,写作文、画画、下棋、玩游戏&a…

Linux NAT设定

1:echo "1" >/proc/sys/net/ipv4/ip_forward 或vi /proc/sys/net/ipv4/ip_forward把0改为1,0表示IP FORWARDING功能是关闭,1表示开启。2:iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0/24 -j MASQUERADE &a…

程序员面试金典 - 面试题 16.02. 单词频率(哈希表/Trie树)

文章目录1. 题目2. 解题2.1 哈希解法2.2 Trie树1. 题目 设计一个方法,找出任意指定单词在一本书中的出现频率。 你的实现应该支持如下操作: WordsFrequency(book)构造函数,参数为字符串数组构成的一本书get(word)查询指定单词在数中出现的…

加州大学博士生Wendy:谈论文精读与方法创新

最近刷朋友圈,很多童鞋的状态都是,不是在搞科研,就是在搞科研的路上,每日为了科研废寝忘食……每天的生活日常,除了下文献、读文献,就是做实验、写论文,debug,二十多岁的自己看着像三…

小米10pro第二个摄像头下面_小米10至尊纪念版、小米10 Pro对比评测:至尊版“至尊”在哪里?...

在几天前的雷军十周年演讲中,小米10至尊纪念版正式面世,价格刚公布,就引起了不小轰动。在吃瓜群众看来,小米终于迈向了高端,毕竟最贵的版本,售价可以卖到6999元,和三星、苹果旗舰保持在一个水准…

转:程序员每天该做的事

程序员每天该做的事 1、总结自己一天任务的完成情况 最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多 >> 好记性不如烂笔头。呵呵 2、考虑自己明天应该做的主要工作 把明天要做的事情…

MiOJ 3. 大数相减(字符串减法)

1. 题目 描述 两个长度超出常规整形变量上限的大数相减,请避免使用各语言内置大数处理库,如 Java.math.BigInteger 等。 输入 有 N 行测试数据,每一行有两个代表整数的字符串 a 和 b,长度超过百位。规定 a>b,a, …

Saleforce发布跨模态框架LAVIS,涵盖数据、任务、模型

作者 | HJZ来源 | 机器之心Salesforce 亚洲研究院推出了一站式视觉语言开源框架 LAVIS。视觉语言模型在内容推荐、电子商务里有广泛应用,例如图像描述生成、文本图像检索以及多模态内容分类。依托于海量互联网数据,多模型模型近期得到长足发展&#xff0…

python 跳过_python-pytest学习(九)-跳过用例skip

一、前言 pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者你希望是吧的测试功能。 skip意味着只有满足某些条件时才希望测试通过,否则pytest应该跳过运行测试。常见示例是在非windows平台上跳过仅限windows的测试,或跳过测试依…

Alexa世界排名原理+作弊源码,为网站赢得好排名

虽然说 Alexa世界排名存在水分,高低都无所谓,只要能在搜索引擎中排名靠前就好了,但是一些风险投资还是把它当作网站的一个参考依据,就迫使一些网站不得不提升自己的Alexa世界排名,那如何让你的网站在Alexa世界排名靠前…