博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习实战5-AdaBoost
阅读量:5227 次
发布时间:2019-06-14

本文共 2328 字,大约阅读时间需要 7 分钟。

1.  前戏

集成学习,通过构建并结合多个学习器来完成学习任务,主要分以下两个种类:
  1. 个体学习器间存在强依赖关系、必须串行生成的序列化方法。代表为boosting,如adaboost。
  2. 个体学习器间不存在强依赖关系、可同时生成的并行化方法。代表为bagging和随机森林(RF)。

2.  adaboost解释

本质上就是三个臭皮匠顶个诸葛亮,将有限个弱分类器组合成为一个强分类器,从而增强分类效果。弱分类器的构建是串行的,也就是说有了上一个分类器的错误率才会构建下一个分类器,直到强分类器能够达到要求。如果想要了解具体数学算法,可搜索加法模型,损失函数(使用的是指数损失函数),前向分步函数,可参阅李航《统计学习方法》,讲的较清楚。
 
算法流程:
  1. 给定初始样本数据权重(1/m),权重相等
  2. 放入基础弱学习器学习,得到一个弱分类器
  3. 计算该分类器错误率,根据错误率计算分类器权重alpha(注意此处权重为分类器权重)
  4. 根据分类器权重计算样本权重矩阵D(分类错误的权重增加,分类正确的权重减少,注意此处的权重为样本的权重)
  5. 将所有的弱分类器按权重alpha线性组合得到最终的强分类器
  6. 判断强分类器的错误率是否为零,或者迭代次数是否到达阈值,否则重复步骤2,3,4,5

3. 实例:基于单层决策树的弱分类器

1 from numpy import * 2  3 # 1.新建数据 4 def loadSimpData(): 5     datMat=mat([[1,2.1], 6                    [2,1.1], 7                    [1.3,1], 8                    [1,1], 9                    [2,1]])10     classLabels=[1.0,1.0,-1.0,-1.0,1.0]11     return datMat,classLabels12 13 # 2. 通过阈值比较对数据进行分类14 def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):15     retArray=ones((shape(dataMatrix)[0],1))16     if threshIneq=='lt':17         retArray[dataMatrix[:,dimen]<=threshVal]=-1.018     else:19         retArray[dataMatrix[:,dimen]>threshVal]=-1.020     return retArray21 22 # 3. 单层决策树,是决策树的一个弱化版本23 #    遍历stumpClassify()函数所有的可能输入值,并找到数据集上的最佳单层决策树24 def buildStump(dataArr,classLabels,D):25     dataMatrix=mat(dataArr)26     labelMat=mat(classLabels).T27     m,n=shape(dataMatrix)28     numSteps=10.0;bestStump={};bestClassEst=mat(zeros((m,1)))29     minError=inf # 初始最小错误为正无穷30     # 数据集上的所有特征进行循环31     for i in range(n):32         rangeMin =dataMatrix[:,i].min()33         rangeMax =dataMatrix[:,i].max()34         stepSize=(rangeMax-rangeMin)/numSteps35         # 在每个特征里(即每一列数),从最小值到最大值之间按照固定步长遍历,寻找到一个最小分类错误率36         for j in range(-1,int(numSteps)+1):37             # 在大于和小于之间切换不等式38             for inequal in ['lt','gt']:39                 threshVal=(rangeMin+float(j)*stepSize)40                 predictedVals=stumpClassify(dataMatrix,i,threshVal,inequal) #按阈值分类41                 errArr=mat(ones((m,1)))42                 errArr[predictedVals==labelMat]=0 #分类错误为143                 weightedError=D.T*errArr44                 # print("split: dim %d,thresh %.2f,thresh inequal: %s,the weighted error is %.3f"%\45                 #       (i,threshVal,inequal,weightedError))46                 if weightedError

 

转载于:https://www.cnblogs.com/Ray-0808/p/10910119.html

你可能感兴趣的文章
二、create-react-app自定义配置
查看>>
Android PullToRefreshExpandableListView的点击事件
查看>>
系统的横向结构(AOP)
查看>>
linux常用命令
查看>>
NHibernate.3.0.Cookbook第四章第6节的翻译
查看>>
例1-1
查看>>
马达调速器,直流马达调速器,直流调速器
查看>>
前端编码规范小记
查看>>
c如何弹出保存路径/保存文件对话框
查看>>
HTML标签二
查看>>
Python 3语法小记(九) 异常 Exception
查看>>
使用shared memory 计算矩阵乘法 (其实并没有加速多少)
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>
IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
查看>>
Hive教程(1)
查看>>
第16周总结
查看>>
C#编程时应注意的性能处理
查看>>
Fragment
查看>>