《机器学习实战》(七)—— 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

相关文章

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

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