【Python机器学习】树回归——树回归与标准回归的比较

news2024/9/23 1:33:04

模型树、回归树和一般的回归方法,为了测试哪个模型最好,可以设计一些函数,它们可以在树构建好的情况下对给定的输入进行预测,之后利用那个这些函数来计算三种回归模型的测试误差。这些模型将在某个数据上进行测试,该数据涉及人的智力水平和自行车的速度的关系。

这里的数据是非线性的,且均纯属虚构

下面给出在给定输入和树结构情况下进行预测的几个函数:

def regTreeEval(model,inDat):
    return float(model)

def modelTreeEval(model,inDat):
    n=shape(inDat)[1]
    X=mat(ones((1,n+1)))
    X[:,1:n+1]=inDat
    return float(X*model)

def treeForeCast(tree,inData,modelEval=regTreeEval):
    if not isTree(tree):
        return modelEval(tree,inData)
    if inData[tree['spInd']]>tree['spVal']:
        if isTree(tree['left']):
            return treeForeCast(tree['left'],inData,modelEval)
        else:
            return modelEval(tree['left'],inData)
    else:
        if isTree(tree['right']):
            return treeForeCast(tree['right'], inData, modelEval)
        else:
            return modelEval(tree['right'],inData)

def createForeCase(tree,testData,modelEval=regTreeEval):
    m=len(testData)
    yHat=mat(zeros((m,1)))
    for i in range(m):
        yHat[i,0]=treeForeCast(tree,mat(testData[i]),modelEval)
    return yHat

上述代码有4个函数,对于输入的单个数据点或者行向量,函数treeForeCast()会返回一个浮点值。在给定树结构的情况下,对于单个数据点,该函数会给出一个预测值。调用函数treeForeCast()时需要指定树的类型,以便在叶节点上能够调用合适的模型。参数modelEval是对叶节点数据进行预测的函数的引用。函数treeForeCast()自顶向下遍历整棵树,直到命中叶节点为止。一旦到达叶节点,它就会在输入数据上调用modelEval()函数,而该函数的默认值是regTreeEval()。

要对回归树叶节点进行预测,就要调用regTreeEval();要对模型树节点进行预测时,就调用modelTreeEval()函数,它们会对输入数据进行格式化处理,在原数据矩阵上增加第0列,然后计算并返回预测值。为了与函数modelTreeEval()保持一致,尽管regTreeEval()只使用一个输入,但仍保留了两个输入参数。

最后一个函数是createForeCase(),它会多次调用treeForeCast()函数。由于它能够以向量形式返回一组预测值,因此该函数在对整个测试集进行预测时非常有用。

上图中给出的是骑自行车速度和人智商之间的关系,下面将基于该数据集建立多个模型并在另一个测试集上进行测试。

下面为上图数据构建三个模型,首先创建一棵回归树:

trainMat=mat(loadDataSet('test/bikeSpeedVsIq_train.txt'))
testMat=mat(loadDataSet('test/bikeSpeedVsIq_test.txt'))
myTree=createTree(trainMat,ops=(1,20))
yHat=createForeCase(myTree,testMat[:,0])
print(corrcoef(yHat,testMat[:,1],rowvar=0)[0,1])

同样的,再创建一棵模型树:

myTree=createTree(trainMat,modelLeaf,modelErr,(1,20))
yHat=createForeCase(myTree,testMat[:,0],modelTreeEval)
print(corrcoef(yHat,testMat[:,1],rowvar=0)[0,1])

我们知道,R^{2}值越接近1.0越好,所以从上面的结果来看,这里模型树的结果比回归树好。下面看标准的线性回归效果:

ws,X,Y=linearSolve(trainMat)
print(ws)

为了得到测试集上所有的yHat预测值,在测试数据上循环执行:

for i in range(shape(testMat)[0]):
    yHat[i]=testMat[i,0]*ws[1,0]+ws[0,0]
print(corrcoef(yHat,testMat[:,1],rowvar=0)[0,1])

可以看到,该方法在R^{2}值上的表现不如上面两种树回归方法。所以,树回归方法在预测复杂数据时会比简单的线性模型更有效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DC系列靶场---DC 9靶场的渗透测试

信息收集 地址探测 使用arp-scan 对目标主机做地址探测 arp-scan -l -I eth0 目标主机IP地址为172.30,1,134 端口扫描 使用nmap对目标主机做端口扫描 nmap -sS -sV -T4 -p- -O 172.30.1.134 目标主机开放了80端口,但是22端口是过滤。这个22端口应该是关闭的&a…

95% 向量资源节省,火山引擎云搜索 RAG 技术体系演进

采访嘉宾 | 火山引擎云搜索团队 鲁蕴铖、李杰辉、余炜强 编辑 | Tina InfoQ 2023 年,大模型惊艳了世界。2024 年,RAG 技术如日中天。 RAG 使得大模型能够在不更新模型参数的情况下,获得必要的上下文信息,从而减少大模型的幻觉。…

pytorch,用lenet5识别cifar10数据集(训练+测试+单张图片识别)

目录 LeNet-5 LeNet-5 结构 CIFAR-10 pytorch实现 lenet模型 训练模型 1.导入数据 2.训练模型 3.测试模型 测试单张图片 代码 运行结果 LeNet-5 LeNet-5 是由 Yann LeCun 等人在 1998 年提出的一种经典卷积神经网络(CNN)模型,主要…

dos命令获取java进程的pid并停止 bat脚本 第二篇

最近要做一个java程序一键重启的功能,主要思路是用批处理命令先将java程序停止,然后重新启动,研究了一把dos命令, taskkill /?取得帮助, taskkill /FI是筛选器: 然后很happy的写好停止脚本如下: taskkill /f /fi "IMAGENAME eq javaw.exe"是不是这样就行了…

spring中使用到的设计模式有哪些

Spring 框架是一个高度模块化和灵活的框架,广泛使用了各种设计模式来实现其核心功能和架构。这些设计模式帮助 Spring 提供了高可配置性、可扩展性和可维护性。以下是 Spring 框架中使用到的一些关键设计模式:

linux 安装jdk步骤

建议用免安装版的,安装方法如下: 一、软件下载 查看系统多少位 getconf LONG_BIT 下载JDK(下面分别是32位系统和64位系统下的版本) # 32位 http://download.oracle.com/otn-pub/java/jdk/7u9-b05/jdk-7u9-linux-i586.tar.gz?…

来电、消息提醒延时很久,该如何解决

使用华为穿戴设备且同时使用三方安卓手机的朋友们,是否发现自己的华为手表经常接不到电话,接到消息提醒也是延时很久?不是手表有问题,而是因为三方安卓手机系统管控华为运动健康App,导致推动来电和消息有延迟。 若您使…

《实现 DevOps 平台(2) · GitLab CI/CD 交互》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

猫头虎 分享:Python库 Flask 的简介、安装、用法详解入门教程

🐯 猫头虎 分享:Python库 Flask 的简介、安装、用法详解入门教程 这是猫头虎带给大家的一篇关于Flask框架的入门教程!🎉 今天猫头虎要跟大家聊聊Python中的一个非常重要且流行的库——Flask。如果你正在寻找一个轻量级、易上手、…

基于CANopen的LabVIEW同步与PDO通信示例

该程序展示了在LabVIEW中使用CANopen协议实现同步消息(SYNC)和PDO(过程数据对象)通信的流程。 以下是程序各部分的详细解释: 接口创建 (Interface Create): 创建一个CANopen接口,并设定通信的波…

git常见命令和常见问题解决

文章目录 常见命令问题问题1(git push相关)问题2(git push相关)问题3(git push相关)删除github的仓库github新创建本地仓库的操作…or create a new repository on the command line…or push an existing …

【burp + ddddocr 加载验证码识别插件对登录页面进行爆破】

1 插件下载 项目地址: https://github.com/c0ny1/captcha-killer https://github.com/f0ng/captcha-killer-modified 安装burp插件: 下载已编译好的jar文件 https://github.com/f0ng/captcha-killer-modified/releases 2 验证码识别平台使用 https://g…

三防平板满足多样化定制为工业领域打造硬件解决方案

在当今工业领域,数字化、智能化的发展趋势日益显著,对于高效、可靠且适应各种复杂环境的硬件设备需求不断增长。三防平板作为一种具有坚固耐用、防水防尘防摔特性的工业级设备,正以其出色的性能和多样化的定制能力,为不同行业的应…

从OFD文件提取数字证书过程详解

OFD 文件是“Open Fixed Document”的缩写,它是一种用于电子文档的开放标准格式。OFD 文件格式由中国国家标准化管理委员会(SAC)制定,目的是提供一种开放、稳定且兼容性强的电子文档格式。下面是 OFD 文件的一些主要特点&#xff…

火语言RPA--火语言自动化插件安装方法

使用自动化控制浏览器插件实现自动化操作: 自动安装插件步骤 ① 点击下图中星标位置图标按钮 ② 点击上一步骤图标按钮后,弹出如下图所示插件安装对话框 ③ 点击下图中星标位置图标安装按钮 ④ 如果Chrome浏览器正在运行,则会弹出如下图所示…

Python大数据分析——DBSCAN聚类模型(密度聚类)

Python大数据分析——DBSCAN聚类模型 介绍数学基础模型步骤函数密度聚类对比Kmeans聚类球形簇聚类情况非球形簇的情况 示例 介绍 Kmeans聚类存在两个致命缺点,一是聚类效果容易受到异常样本点的影响(因为求的是均值,而异常值对于均值聚类非常…

移动UI:阅读类应用如何从设计上吸引读者?

阅读类应用的用户界面设计对于吸引读者和提升用户体验至关重要。 以下是一些设计上的建议,可以帮助阅读类应用吸引读者: 1. 清晰的内容布局: 确保内容排版清晰,字体大小适中,行间距和段落间距合适,让用户…

纯技巧,伦敦金投资入门阶段怎么学习K线?

投资者刚进入伦敦金市场,都需要学习一定的交易知识,否则没办法在市场中立足。而K线很可能是我们做伦敦金投资入门时第一个碰到的需要学习的理论。下面我们就来讨论一下,在投资入门阶段,我们怎么学习K线。其实作为伦敦金投资的工具…

vega ai创作平台官网基础教程-文生图功能使用

我们都知道vega ai创作平台是右脑科技公司发布的一款革新性的在线AI艺术创作工具,它凭借先进的人工智能技术,为艺术家们打开了一扇通往无限创作可能的大门。无论是将文字灵感转化为视觉艺术,还是通过融合多张图片来训练出独特的艺术风格&…

2024.8.12

2024.8.12 【梦最让我费解的地方在于&#xff0c;明明你看不清梦里人们的脸&#xff0c;却清晰地知道他们是谁。】 Monday 七月初九 序理论 最小链覆盖&最长反链长度 我们设定一个二元关系符R和一个集合A 我们设定<A,R>这样一个类群&#xff0c;那么对于任意 a i…