《机器学习实战》(七)—— AdaBoost(提升树)

2024-06-02 04:38

本文主要是介绍《机器学习实战》(七)—— AdaBoost(提升树),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.csdn.net/u011239443/article/details/77294201

AdaBoost

提升树

例子

将“身体”设为A,“业务”设为B,“潜力”设为C。对该题做大致的求解:

这里我们只计算到了f2,相信读者也知道如何继续往下计算。这里特征的取值较少,所以直接使用是否等于某个取值来作为分支条件。实际中,可以设置是否大于或者小于等于某个阈值来作为分支条件。接下来我们就来看看如何实现提升树。

实现

# -*- coding: utf-8 -*-
from numpy import *# 加载数据
def loadSimpData():datMat = matrix([[ 1. ,  2.1],[ 2. ,  1.1],[ 1.3,  1. ],[ 1. ,  1. ],[ 2. ,  1. ]])classLabels = [1.0, 1.0, -1.0, -1.0, 1.0]return datMat,classLabels# 决策桩分类
# dimen : 选取的特征
# threshVal : 特征的阈值
# threshInseq : 判别大于或者小于等于该阈值
def stumpClassify(dataMat,dimen,threshVal,threshIneq):retArray = ones((shape(dataMat)[0],1))if threshIneq == 'lt':retArray[dataMat[:,dimen] <= threshVal] = -1.0else:retArray[dataMat[:,dimen] > threshVal] = -1.0return retArray#  构建决策树桩
def buildStump(dataArr,classLabels,D):dataMat = mat(dataArr);labelMat = mat(classLabels).Tm,n = shape(dataMat)numSteps = 10.0;bestStump = {};bestClassEst = mat(zeros((m,1)))minError = inffor i in range(n):rangeMin = dataMat[:,i].min();rangeMax = dataMat[:,i].max()stepSize = (rangeMax - rangeMin)/numSteps# 由于是 ‘<= threshVal’,所以要从-1开始,使得出现全都 > threshVal 的情况for j in range(-1,int(numSteps)+1):for inequal in ['lt','gt']:threshVal = rangeMin + j * stepSizepredictedVals = stumpClassify(dataMat,i,threshVal,inequal)errArr = mat(ones((m,1)))errArr[predictedVals == labelMat] = 0weightedError = D.T * errArrif weightedError < minError:minError = weightedErrorbestClassEst = predictedVals.copy()bestStump['dim'] = ibestStump['thresh'] = threshValbestStump['ineq'] = inequalreturn bestStump,minError,bestClassEstdef adaBoostTrainDS(dataArr,classLabels,numIt = 40):# 保存不同的决策树桩weakClassArr = []m = shape(dataArr)[0]# 权值初始化为 1/mD = mat(ones((m,1))/m)aggClassEst = mat(zeros((m,1)))for i in range(numIt):bestStump,error,ClassEst = buildStump(dataArr,classLabels,D)# 见式 8.2alpha = float(0.5*log((1-error)/max(error,1e-16)))bestStump['alpha'] = alphaweakClassArr.append(bestStump)# 见式 8.4expon = multiply(-1*alpha*mat(classLabels).T,ClassEst)D = multiply(D,exp(expon))D = D/D.sum()# 见式 8.6aggClassEst += alpha*ClassEstaggErrors = multiply(sign(aggClassEst) != mat(classLabels).T,ones((m,1)))errorRate = aggErrors.sum()/mprint ("error rate : ",errorRate)if errorRate == 0:breakreturn weakClassArrdef adaClassify(dataToClass,classifierArr):dataMat = mat(dataToClass)m = shape(dataMat)[0]aggClassEst = mat(zeros((m,1)))for i in range(len(classifierArr)):classEst = stumpClassify(dataMat,classifierArr[i]['dim'],\classifierArr[i]['thresh'], \classifierArr[i]['ineq'])# 见式 8.7aggClassEst += classifierArr[i]['alpha']*classEstprint aggClassEstreturn sign(aggClassEst)

测试

import myAdaboostdataMat,classLabels = myAdaboost.loadSimpData()classifierArray = myAdaboost.adaBoostTrainDS(dataMat,classLabels,30)print myAdaboost.adaClassify([0,0],classifierArray)

结果

('error rate : ', 0.20000000000000001)
('error rate : ', 0.20000000000000001)
('error rate : ', 0.0)
[[-0.69314718]]
[[-1.66610226]]
[[-2.56198199]]
[[-1.]]

这里写图片描述

这篇关于《机器学习实战》(七)—— AdaBoost(提升树)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023047

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;