决策树回归原理详解及Python代码示例

决策树回归原理详解

        决策树回归(Decision Tree Regression)是一种非参数监督学习方法,它使用树形结构来对目标变量进行预测。与线性回归模型不同,决策树回归不需要预先假设数据的分布形式,因此能够很好地处理非线性和高维数据。

目录

决策树回归原理详解

1. 决策树回归的基本概念

2. 决策树的构建过程

3. 决策树回归的优缺点

Python代码示例

详细代码及结果解释

代码解释


 

1. 决策树回归的基本概念

        决策树回归通过递归地将数据集划分为更小的子集,并在每个子集上构建简单的预测模型。树中的每个节点表示一个特征,节点的分裂则是根据该特征的某个阈值将数据集分成两部分。树的叶子节点包含目标变量的预测值。

2. 决策树的构建过程

  1. 选择最优分裂点:选择一个特征及其相应的分裂点,使得数据集在该特征上的分裂能最大程度地减少目标变量的方差(或均方误差)。
  2. 递归分裂:在每个分裂的子集上重复上述过程,直到满足停止条件(如达到最大深度或叶节点样本数量小于某个阈值)。
  3. 生成叶子节点:停止分裂后,叶子节点的值设为该子集上目标变量的均值。

3. 决策树回归的优缺点

优点

  • 简单易理解,可视化效果好。
  • 对数据预处理要求较低(无需归一化或标准化)。
  • 能处理多种数据类型(数值型、分类型)。
  • 适用于处理非线性关系。

缺点

  • 容易过拟合,特别是树的深度较大时。
  • 对小数据集敏感,容易产生较大波动。
  • 在某些情况下,结果不稳定(对噪声数据敏感)。

Python代码示例

详细代码及结果解释

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error# 生成一些示例数据
np.random.seed(0)
x = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(x).ravel()
y[::5] += 3 * (0.5 - np.random.rand(16))  # 添加噪声# 可视化原始数据
plt.scatter(x, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.title("Original Data")
plt.show()# 创建决策树回归模型并进行拟合
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(x, y)
regr_2.fit(x, y)# 预测结果
x_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis]
y_1 = regr_1.predict(x_test)
y_2 = regr_2.predict(x_test)# 可视化拟合结果
plt.figure()
plt.scatter(x, y, s=20, edgecolor="black", c="darkorange", label="data")
plt.plot(x_test, y_1, color="cornflowerblue", label="max_depth=2", linewidth=2)
plt.plot(x_test, y_2, color="yellowgreen", label="max_depth=5", linewidth=2)
plt.title("Decision Tree Regression")
plt.legend()
plt.show()# 打印模型参数和均方误差
print("Max depth 2 - Mean Squared Error:", mean_squared_error(y, regr_1.predict(x)))
print("Max depth 5 - Mean Squared Error:", mean_squared_error(y, regr_2.predict(x)))

 

代码解释

  1. 数据生成

    • 生成80个随机点,并将这些点排序。
    • 使用正弦函数生成目标值,并在每五个数据点上添加噪声以增加数据的复杂性。
  2. 数据可视化

    • 绘制生成的原始数据点,用散点图表示。
  3. 模型训练

    • 创建两个决策树回归模型,一个最大深度为2,另一个最大深度为5。
    • 在生成的数据集上训练两个模型。
  4. 结果预测

    • 在测试数据集(0到5的范围内,每隔0.01一个点)上进行预测。
    • 分别得到深度为2和5的模型的预测结果。
  5. 可视化拟合结果

    • 绘制原始数据点和两个模型的拟合曲线,观察不同深度下的拟合效果。
    • 深度为2的模型(蓝色曲线)较为平滑,但可能欠拟合。
    • 深度为5的模型(绿色曲线)较为复杂,能够更好地拟合数据,但有可能过拟合。
  6. 模型评估

    • 计算并打印两个模型的均方误差(MSE),评估其在训练数据上的拟合效果。
    • 打印结果表明,随着树的深度增加,MSE可能会降低,但也会增加过拟合的风险。

 

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

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

相关文章

2024年上半年软件设计师上午真题及答案解析

1.在计算机网络协议五层体系结构中,( B )工作在数据链路层。 A.路由器 B.以太网交换机 C.防火墙 D.集线器 网络层:路由器、防火墙 数据链路层:交换机、网桥 物理层:中继器、集线器 2.软件交付之后&#xff…

数据可视化期末考试(编程)

1.KNN 1.新增数据的分类 import pandas as pd # 您的原始数据字典 data { 电影名称: [电影1, 电影2, 电影3, 电影4, 电影5], 打斗镜头: [10, 5, 108, 115, 20], 接吻镜头: [110, 89, 5, 8, 200], 电影类型: [爱情片, 爱情片, 动作片, 动作片, 爱情片] } …

uni-app uni-data-picker级联选择器无法使用和清除选中的值

出现问题&#xff1a; 使用点击右边的叉号按钮无法清除已经选择的uni-data-picker值 解决办法&#xff1a; 在uni-app uni-data-picker使用中&#xff0c;要添加v-model&#xff0c;v-model在官网的示例中没有体现&#xff0c;但若不加则无法清除。 <uni-data-picker v-m…

OpenAI用GPT-4o打造癌症筛查AI助手;手机就能检测中风,准确率达 82%!中国气象局发布AI气象大模型...

AI for Science 企业动态速览—— * 皇家墨尔本大学用 AI 检测患者中风&#xff0c;准确率达 82% * OpenAI 用 GPT-4o 模型打造癌症筛查 AI 助手 * 中国气象局发布 AI 气象大模型风清、风雷、风顺 * AI 药企英矽智能&#xff1a;小分子抑制剂已完成中国 IIa 期临床试验全部患者…

GPT-5智能新纪元的曙光

在美国达特茅斯工程学院周四公布的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布&#xff0c;给出了肯定答案并表示将在一年半后发布。穆拉蒂在采访中还把GPT-4到GPT-5的飞跃描述为高中生到博士生的成长。 这一爆炸性的消息&#xff0c;震动了整体…

linux下进度条的实现

目录 一、代码一版 1.processbar.h 2.processbar.c 3.main.c 二、代码二版 1.processbar.h 2.processbar.c 3.main.c 三、改变文字颜色 一、代码一版 使用模块化编程 1.processbar.h #include<stdio.h> #define capacity 101 //常量使用宏定义 #define style…

Perl文件句柄深度解析:掌握文件操作的核心

Perl中的文件句柄是进行文件输入输出操作的关键。它们提供了一种机制&#xff0c;允许Perl脚本打开文件、读写数据、定位文件指针&#xff0c;以及关闭文件。理解文件句柄的使用对于编写高效的Perl脚本至关重要。本文将深入探讨Perl文件句柄的概念、使用方法和最佳实践。 1. 文…

【Pytorch使用教程】torch.backends.cudnn.benchmark = True的作用

在 PyTorch 中,设置 torch.backends.cudnn.benchmark = True 是一种优化深度学习应用程序性能的方法,特别是当你有固定输入大小的时候。 解释 CuDNN:CUDA Deep Neural Network library(CuDNN)是 NVIDIA 提供的一个 GPU 加速库,用于深度神经网络。PyTorch 在底层使用 Cu…

代码随想录——买股票的最佳时机Ⅱ(Leecode122)

添加链接描述 贪心 局部最优&#xff1a;手机每天的正利润 全局最优&#xff1a;求最大利润 class Solution {public int maxProfit(int[] prices) {int res 0;for(int i 1; i < prices.length; i){res Math.max(prices[i] - prices[i - 1], 0);}return res;} }

【计算机视觉】mmcv库详细介绍

文章目录 MMVC库概览特点和优势主要组件应用案例示例一:数据加载和处理示例二:模型训练和验证MMVC库概览 MMCV 是一个用于计算机视觉研究的开源库,它为各种视觉任务提供了底层的、高度优化的 API。该库涵盖了从数据加载到模型训练的各个方面,广泛应用于开源项目,如 MMDet…

webstorm无法识别tsconfig.json引用项目配置文件中的路径别名

问题 vite项目模板中&#xff0c;应用的ts配置内容写在tsconfig.app.json文件中&#xff0c;并在tsconfig.json通过项目引用的方式导入 {"files": [],"references": [{"path": "./tsconfig.app.json"},{"path": "./t…

2024-06-25 问AI: 在大语言模型中, Hugging Face 是什么?

文心一言 Hugging Face 在大语言模型领域中是一个非常重要的存在&#xff0c;它主要提供了一系列自然语言处理&#xff08;NLP&#xff09;相关的工具和资源。以下是关于 Hugging Face 的详细介绍&#xff1a; 公司背景&#xff1a;Hugging Face 是一家成立于2016年的开源模型…

2024年第十五届蓝桥杯青少组大赛8月24日开启

据蓝桥杯青少组官网显示&#xff0c;2024年第十五届蓝桥杯青少组大赛8月24日开启。 蓝桥杯青少组历届题库地址&#xff1a;http://www.6547.cn/question/cat/2 蓝桥杯青少组历届真题下载&#xff1a;http://www.6547.cn/wenku/list/10

python基础1.2----爬虫基础

python基础内容之爬虫 ## 1. 关于爬虫的特殊性 爬虫是一个很蛋疼的东西, 可能今天讲解的案例. 明天就失效了. 所以, 不要死盯着一个网站干. 要学会见招拆招(爬虫的灵魂) 爬虫程序如果编写的不够完善. 访问频率过高. 很有可能会对服务器造成毁灭性打击, 所以, 不要死盯着一个网…

MySQL用户管理和高级SQL语句

一、用户管理 1.新建用户 mysql> create user zhangsanlocalhost identified by pwd123; Query OK, 0 rows affected (0.00 sec)mysql> create user lisilocalhost identified by pwd123; Query OK, 0 rows affected (0.00 sec)mysql> create user wangwulocalhost …

统一视频接入平台LntonCVS视频共享交换平台智慧景区运用方案

随着夏季的到来&#xff0c;各地景区迎来了大量游客&#xff0c;而景区管理面临的挑战也愈加严峻&#xff0c;尤其是安全问题显得格外突出。 视频监控在预防各类安全事故方面发挥着重要作用&#xff0c;不论是自然景区还是人文景区&#xff0c;都潜藏着诸多安全隐患&#xff0…

每日一道算法题 成绩排序

题目 成绩排序_牛客题霸_牛客网 (nowcoder.com) Python nint(input()) flagint(input()) ans[] for _ in range(n):name,scoreinput().split( )ans.append([name,int(score)]) ans.sort(keylambda x:x[1],reverse not flag)for e in ans:print(e[0],e[1],sep )C #include &…

排序之插入排序----直接插入排序和希尔排序(1)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 排序之插入排序----直接插入排序和希尔排序(1) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记&#xff0c;欢迎大家在评论区交流讨…

图形编辑器基于Paper.js教程04: Paper.js中的基础知识

背景 了解paper.js的基础知识&#xff0c;在往后的开发过程中会让你如履平地。 基础知识 paper.js 提供了两种编写方式&#xff0c;一种是纯粹的JavaScript编写&#xff0c;还有一种是使用官方提供的PaperScript。 区别就是在于&#xff0c;调用paper下的字对象是否需要加pa…

使用Python获取1688商品详情的教程

如何使用Python编程语言来获取1688网站上的商品详情信息。通过本教程&#xff0c;读者将学会使用Python的请求库和解析库来爬取商品数据。 目录 简介环境准备编写爬虫代码处理和存储数据快速获取遵守法律法规和网站政策 1. 简介 1688是中国领先的B2B电子商务平台&#xff0…