【Python机器学习】利用AdaBoost元算法提高分类性能——基于AdaBoost的分类

一旦拥有了多个弱分类以及其对应的alpha值,进行测试就变得非常容易了。现在,要将弱分类器的训练过程从程序中抽出来,然后应用在某个具体的实例上。每个弱分类器的结果以其对应的alpha值作为权重。所有这些弱分类器的结果加权求和就得到了最后的结果。

下面,用代码具体实现:

python 复制代码
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=aggClassEst+classifierArr[i]['alpha']*classEst
        print(aggClassEst)
    return sign(aggClassEst)

上述的adaClassify()函数就是利用训练出的多个弱分类器进行分类的函数。该函数的输入是由一个或多个待分类样例datToClass以及多个弱分类器组成的数组classifierArr。函数adaClassify()首先将datToClass转换成了一个NumPy矩阵,并且得到datToClass中的待分类样例的个数m。然后构建一个0列向量aggClassEst,这个列向量与adaBoostTrainDS()中的含义相同。

接下来,遍历classifierArr中的所有弱分类器,并基于stumpClassify()对每个分类器得到一个类别的估计值。在前面构建单层决策树时,stumpClassify()在所有可能的树桩值上进行迭代来得到具有最小加权错误率的单层决策树。但在这里我们只是简单地应用了单层决策树。输出的类别估计值乘上该单层决策树的alpha权重然后累加到aggClassEst上,就完成了这一过程。最后,程序返回aggClassEst的符号,即如果aggClassEst大于0则返回+1,而如果小于0则返回-1。

实际运行:

python 复制代码
datArr,labelArr=loadSimpData()
classifierArr=adaBoostTrainDS(datArr,labelArr,30)
print(adaClassify([0,0],classifierArr))

可以发现,随着迭代的进行,数据点0,0的分类结果越来越强。

相关推荐
外收内放2 分钟前
Python基础语法练习题(57-58)
开发语言·python
时间的拾荒人8 分钟前
Qt 界面美化实战:QSS 样式表
开发语言·qt·面试
赛博守夜人14 分钟前
跨境业务与出海合规之九:海外买量投放与营销虚假流量(Ad Fraud):跨国机房群控与归因欺诈识别算法
算法·安全
wuyk55521 分钟前
ROS2 Humble 从入门实战教程:第六章:节点:机器人的工作细胞
机器学习
朝朝辞暮i24 分钟前
VLA 系统学习第 3 课:从一次机器人示范,到真正送进神经网络的 Batch
人工智能·python·深度学习·神经网络·vla
Joy T31 分钟前
Spring AI 接入已有 Java 项目的三种架构设计
java·人工智能·springai·ai入门·chatclient·ai service·ai能力接入
杨运交37 分钟前
[076][核心模块]构建优雅的Java异常处理框架:从错误码到全局异常处理
java·开发语言
m4Rk_40 分钟前
【论文阅读】Agent 记忆机制(94):MemGen——在推理过程中动态生成并织入潜在记忆
论文阅读·人工智能·学习·开源·github
IT_陈寒41 分钟前
Redis卡顿的锅,这次真不是大key的错
前端·人工智能·后端
可乐鸡翅yeah_1 小时前
video.js 集成 hls.js 开发 M3U8 播放器,新手高频踩坑
开发语言·前端·javascript·后端·ecmascript·m3u8·音视频在线播放