AdaBoost算法2(基于单层决策树)
来源:互联网 发布:阳西县网络问政首页 编辑:程序博客网 时间:2024/05/16 18:27
上节我们介绍了单层决策树的生成算法,今天我们就利用单层决策树创建完整的AdaBoost算法:
def adaBoostTrainDS(dataArr,classLabels,numIt=40): weakClassArr = [] m = shape(dataArr)[0] D = mat(ones((m,1))/m) aggClassEst = mat(zeros((m,1))) for i in range(numIt): bestStump,error,classEst = buildStump(dataArr,classLabels,D) alpha = float(0.5*log((1.0-error)/max(error,1e-16))) bestStump['alpha'] = alpha weakClassArr.append(bestStump) expon = multiply(-1*alpha*mat(classLabels).T,classEst) D = multiply(D,exp(expon)) D = D/D.sum() aggClassEst += alpha*classEst aggErrors = multiply(sign(aggClassEst) != mat(classLabels).T,ones((m,1))) errorRate = aggErrors.sum()/m print "total error: ",errorRate if errorRate == 0.0: break return weakClassArr该算法的输入包括数据集、类别标签以及迭代的次数,其中迭代次数是用户唯一需要自己指定的,但是当错误率为0时程序会自动终止,否则就迭代指定次数。aggClassEst用来记录数据点的类别估计值。然后一个循环进行迭代,首先调用函数建立一个单层决策树,然后计算该分类器的权重值alpha,权重值是基于每个弱分类器的错误率计算的来的.接下来的几行用来计算下一次迭代的D,具体怎么计算没搞明白,接下来的几行进行错误率累加计算,最后判断如果错误率为0就结束,最后返回整个决策树。接下来进行测试上述算法。
def adaClassify(datToClass,classifierArr): dataMatrix = mat(datToClass) m = shape(dataMatrix)[0] aggClassEst = mat(zeros((m,1))) for i in range(len(classifierArr)): classEst = stumpClassify(dataMatrix,classifierArr[i]['dim'],\ classifierArr[i]['thresh'],\ classifierArr[i]['ineq']) aggClassEst += classifierArr[i]['alpha']*classEst print aggClassEst return sign(aggClassEst)该函数首先有两个输入参数分别为待测数据集和由多个弱分类器组成的数组,首先将测试数据集转换成矩阵,aggClassEst和上面函数中的功能一样。接着我们来看循环,首先利用每个弱分类器计算出分类结果,然后加权求和得出最后的结果,最后调用sign()函数得出最后预测结果
0 0
- AdaBoost算法2(基于单层决策树)
- AdaBoost算法1(基于单层决策树)
- Adaboost算法(单层决策树)
- 基于单层决策树的 AdaBoost的训练及测试过程
- 【读书笔记】机器学习实战 第7章 基于单层决策树的adaboost
- 【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)
- 【机器学习算法-python实现】Adaboost的实现(1)-单层决策树(decision stump)
- adaBoost使用单层决策树分类器实现分类功能(源代码)
- 单层决策树
- 机器学习实战(五)——基于单层决策树(dicision-stump)的adaBoosting
- 基于单层决策树构建弱分类器 boosting分类
- 机器学习技法实现(一):AdaBoost- Decision Stump (AdaBoost - 决策树的基于Matlab的实现)
- Adaboost(2)——基于Python的adaboost实例
- 基于ID3算法生成决策树
- 决策树算法实例(基于ID3)
- boosting(AdaBoost)算法
- 基于Adaboost的人脸检测算法
- 基于集成学习——Adaboost算法
- 大小写转化
- 斗地主游戏-应用程序-01
- 我的第一次C++上机实验
- C++ 学习之路(5):友元函数与友元类
- Java 8简明教程
- AdaBoost算法2(基于单层决策树)
- leetcode之Additive Number
- Java Thread Join Example with Explanation
- spark新手教程
- HDOJ 5640-King's Cake【数学】
- mac下使用Navicat
- 【leetcode】Array——Jump Game2(45)
- 简单探讨java中String类的hashCode()
- 羊皮书APP(Android版)开发系列(六)几个工具的选取