机器学习-集成之AdaBoost算法原理及实战
Boosting和AdaBoost
- 简介
- Bagging采用的是一种多个分类器简单评分的方式。而Boosting是和Bagging对应的一种将弱分类器组合成为强分类器的算法框架,它根据分类器学习误差率来更新训练样本的权重。AdaBoost算法就是Boosting算法的一种。它建立在多个若分类器的基础上,为分类器进行权重赋值,性能好的分类器能获得更多权重,从而使评分效果更理想。
- 原理
- AdaBoost算法的基本步骤有以下三步。
- 初始化样本权重,一般进行等权重处理。
- 训练弱分类器,根据每个分类器的结果更新权重,再进行训练,直到符合条件。
- 将弱分类器集合成为强分类器,一般是分类器误差小的权重大。
- 以二元分类问题为例分析AdaBoost算法的原理,对于多元问题和回归问题可以进行类似推理。
- 假设训练集样本是:T={(x1,y1),(x2,y2),...,(xm,ym)}T=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\} T={(x1,y1),(x2,y2),...,(xm,ym)}
- 训练集第k个弱学习器的输出权重为:D(k)=(wk1,wk2,...wkn);w1i=1/m;i=1,2,...mD(k)=(w_{k1},w_{k2},...w_{kn}); w_{1i}=1/m;i=1,2,...m D(k)=(wk1,wk2,...wkn);w1i=1/m;i=1,2,...m
- 假设二元分类问题的输出为{−1,1}\{-1,1\}{−1,1},则第k个弱分类器Gk(x)G_k(x)Gk(x)在训练集上的加权误差率为ek=p(Gk(xi)̸=yi)=∑i=1mWki∣(Gk(xi)̸=yi)e_k=p(G_k(x_i) \not= y_i)=\sum_{i=1}^m W_{ki}|(G_k(x_i) \not= y_i) ek=p(Gk(xi)̸=yi)=i=1∑mWki∣(Gk(xi)̸=yi)
- 第k个弱分类器Gk(x)G_k(x)Gk(x)的权重系数为:αk=12log1−ekek\alpha_k={1 \over 2}\log {1-e_k \over e_k} αk=21logek1−ek
- 从上式可以看出,如果分类误差率eke_kek越大,则对应的弱分类器权重系数αk\alpha_kαk越小。也就是说,误差率小的弱分类器权重系数越大。
- 样本权重的更新过程如下,假设第k个弱分类器的样本集权重系数为D(k)=(wk1,wk2,...wkm)D(k)=(w_{k1},w_{k2},...w_{km})D(k)=(wk1,wk2,...wkm),则对应的第k+1个弱分类器的样本集权重系数为:wk+1,i=wkiZKexp(−αkyiGk(xi))w_{k+1,i}={w_{ki} \over Z_K}exp(-\alpha_ky_iG_k(x_i)) wk+1,i=ZKwkiexp(−αkyiGk(xi)),这里ZKZ_KZK是规范因子。
- 从上面的wk+1,iw_{k+1,i}wk+1,i的计算公式可以看出,如果第i个样本分类错误,则yiGk(xi)y_iG_k(x_i)yiGk(xi)导致样本的权重在第k+1个弱分类器中增大;如果分类正确,则权重在第k+1个弱分类器中减小。
- AdaBoost算法采用加权平均方法进行融合,最终的强分类器为:f(x)=sign(∑k=1kαkGk(x))f(x)=sign(\sum_{k=1}^k \alpha_kG_k(x)) f(x)=sign(k=1∑kαkGk(x))
- AdaBoost具有原理简单、分类精度高、能使用各种分类模型来构建弱学习器、不容易过拟合等特点,在实际中得到了广泛应用。
- AdaBoost算法的基本步骤有以下三步。
- 实战
- 使用AdaBoost进行二元分类
- 分类器使用sklearn模型(默认使用CART决策树作为弱分类器)
- 数据集随机生成
- 代码
# -*-coding:utf-8-*-import numpy as npimport matplotlib.pyplot as pltfrom sklearn.ensemble import AdaBoostClassifierfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.datasets import make_gaussian_quantiles# 生成随机数据集X1, y1 = make_gaussian_quantiles(cov=2.0,n_samples=500,n_features=2,n_classes=2,random_state=1)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))# 绘制散点图,将数据可视化plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)plt.show()# 该参数准确率最高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)# 生成网格图查看拟合区域x_min, x_max = X[:, 0].min()-1, X[:, 0].max()+1y_min, y_max = X[:, 1].min()-1, X[:, 1].max()+1xx, 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)plt.contour(xx, yy, Z, cmap=plt.cm.Paired)plt.scatter(X[:, 0], X[:, 1], marker='o', c=y)plt.show()# 查看AdaBoost方法的分类精度print(bdt.score(X, y))
- 运行效果
- 补充说明
- 参考书为《Python3数据分析与机器学习实战》,对部分错误修改
- 具体数据集和代码见我的Github,欢迎Star或者Fork
机器学习-集成之AdaBoost算法原理及实战相关推荐
- 机器学习-关联之FP-Growth算法原理及实战
FP-Growth 简介 FP-Growth算法是一种发现数据集中频繁模式的有效方法,它在Apriori算法的原理的基础上,采用FP(Frequent Pattern,频繁模式)树数据结构对原始数据进 ...
- 机器学习-关联之Apriori算法原理及实战
Apriori算法 前言 关联分析是一种无监督的机器学习方法,主要用于发现大规模数据集中事物之间的依存性和关联性.挖掘数据中隐藏的有价值的关系(如频繁项集.关联规则),有利于对相关事物进行预测,也能帮 ...
- adaboost 算法 原理
Adaboost 算法 算法简介 (1)adaboost是有监督的分类算法 有监督 无监督的区别,直观来看,区别在于训练集中,是否需要包括因变量Y. 例如: 无监督算法 -- K-means聚类算法, ...
- Adaboost算法原理分析和实例+代码(简明易懂)
Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333 ...
- Adaboost算法原理分析和实例+代码(转载)
[尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333 本人最初了解AdaBoost算法着实是花了几天时 ...
- 【机器学习】Softmax Regression算法原理与java实现
[机器学习]Softmax Regression算法原理与java实现 1.Softmax Regression算法原理 1.1.样本概率 1.2.损失函数 1.3.梯度下降法训练模型 2.java实 ...
- 【AdaBoost算法】集成学习——AdaBoost算法实例说明
[AdaBoost算法]集成学习--AdaBoost算法实例说明 AdaBoost算法是数据挖掘十大算法之一,但是部分参考书上只给了该算法的数学推导过程,具体的流程并未详细举例加以解释,因此不利于学习 ...
- 机器学习 - [集成学习]Bagging算法的编程实现
机器学习 - [集成学习] Bagging算法的编程实现 李俊才 的 CSDN 博客:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 ...
- AdaBoost算法原理
AdaBoost算法原理 前言 1.AdaBoost(Adaptive Boosting)是boosting类算法最著名的代表. 2.Kearns 和 Valiant首先提出了"强可学习&q ...
最新文章
- 计算机学院会会,学生分会——计算机学院学生会
- 2020全球Top10 AI专利公司:美国过半,中国仅占两席
- [CTO札记]高效能辅导(Coach)转摘
- TypeScript的推介与应用
- c语言编程功率谱,有谁会用C编写求功率谱(答案越多越好)
- zblog php 指定分类,zblogPHP 为某些分类指定分类模板,后台版方法
- Qt图形界面编程入门(基本窗口及控件)
- linux runqueue定义,Linux中多CPU的runqueue及抢占
- PHP:10个不常见却非常有用的PHP函数
- mysql 复制_MySQL的复制功能
- 2019蓝桥杯Java决赛题答案_2019-01-15 第八届蓝桥杯javaB组第二题
- linux嵌入式第一阶段,零基础学嵌入式编程系列第一阶段Linux操作系统基础知识.ppt...
- 林锐:5 C++/C程序的基本概念
- 兰州大学计算机基础在线考试,[兰州大学]《计算机基础》2020年5月考试在线考核试题...
- open3d 0.13的c++版本使用demo
- c语言数组回文数编写字符串,回文数C语言(示例代码)
- 计算机相关知识——前端Base64编码解码的基础使用
- 奥斯卡大乌龙,然而人工智能也预测《爱乐之城》为最佳影片
- 轻体重者入门跑鞋选购全攻略(包括跑姿分析及跑鞋推荐)
- Linux命令详解之 ls