【python】多种回归算法对比气温预测

news2024/9/23 3:14:29

目录

引言

决策树回归(Decision Tree Regression)

线性回归(Linear Regression)

随机森林回归(Random Forest Regression)

气温预测对比实例

数据集

预测值与实际值对比图

模型评价指标

代码实现


引言

决策树回归(Decision Tree Regression)

定义与原理

  • 决策树回归是一种非参数监督学习方法,它使用树形结构来对目标变量进行预测。与线性回归模型不同,决策树回归不需要预先假设数据的分布形式,因此能够很好地处理非线性和高维数据。
  • 决策树回归通过递归地将数据集划分为更小的子集,并在每个子集上构建简单的预测模型。树中的每个节点表示一个特征,节点的分裂则是根据该特征的某个阈值将数据集分成两部分。树的叶子节点包含目标变量的预测值。

构建过程

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

优缺点

  • 优点
    • 简单易理解,可视化效果好。
    • 对数据预处理要求较低(无需归一化或标准化)。
    • 能处理多种数据类型(数值型、分类型)。
    • 适用于处理非线性关系。
  • 缺点
    • 容易过拟合,特别是树的深度较大时。
    • 对小数据集敏感,容易产生较大波动。
    • 在某些情况下,结果不稳定(对噪声数据敏感)。

应用场景

决策树回归在金融、医疗、零售等领域都有广泛的应用,如预测股票价格、货币汇率、疾病风险、药物反应、销量预测等。

线性回归(Linear Regression)

定义

  • 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x + e,其中e为误差项,服从均值为0的正态分布。

类型

  • 如果回归分析中只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。
  • 如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。

方法

  • 线性回归模型经常用最小二乘逼近来拟合,即找到一条直线,使得所有观测点到这条直线的垂直距离的平方和最小。

优缺点

  • 优点
    • 模型简单,易于理解和解释。
    • 计算简便,适合大规模数据处理。
    • 适用于线性关系明显的数据。
  • 缺点
    • 无法处理非线性关系。
    • 对异常值较为敏感。
    • 需要预先假设数据的线性关系。

应用场景

线性回归在金融、经济学、流行病学等领域有广泛应用,如预测消费支出、固定投资支出、股票价格趋势等。

随机森林回归(Random Forest Regression)

定义与原理

  • 随机森林回归是一种集成学习方法,通过构建多个决策树并将它们的预测结果进行平均,来提高模型的稳定性和预测准确性。它通过引入随机性来增强模型的泛化能力,有效减轻了单棵决策树容易过拟合的问题。

构建过程

  1. 随机采样:从原始训练数据集中有放回地随机抽样,生成多个子数据集(Bootstrap样本)。
  2. 决策树构建:对每个子数据集构建一棵决策树。在每个节点分裂时,随机选择特征的一个子集,并在其中选择最佳特征进行分裂。
  3. 集成预测:对于新的输入数据,通过所有决策树进行预测,然后对结果进行平均(对于回归问题)或投票(对于分类问题)。

优缺点

  • 优点
    • 高精度:通过集成多个决策树,通常能取得比单棵决策树更高的预测精度。
    • 抗过拟合:由于多个决策树的结果是平均的,可以有效减轻过拟合现象。
    • 鲁棒性:对数据中的噪声和缺失值具有较强的鲁棒性。
    • 处理高维数据:能够处理大量特征,并能评估特征的重要性。
  • 缺点
    • 计算开销大:构建多个决策树的计算开销较大。
    • 模型解释性差:由于结果是多个决策树的平均,难以解释具体的决策路径。

应用场景

随机森林回归在金融、医疗、生物信息学等领域有广泛应用,如预测股票价格、疾病风险、基因表达等。

气温预测对比实例

数据集

预测值与实际值对比图

模型评价指标

  • MSE(均方误差):衡量模型预测值与真实值之间差异的平方的平均值。MSE越小,表示模型预测越准确。
  • MAE(平均绝对误差):衡量模型预测值与真实值之间差异的平均值的绝对值。MAE同样越小越好。
  • R²分数(R² score):表示模型对数据的拟合程度。R²分数的值范围从负无穷大到1,其中1表示完美预测,0表示模型的表现与简单预测(如平均值)相同,而负值则表示模型表现比简单预测还差。

代码实现

import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import numpy as np

# 加载数据集  
data = pd.read_csv("气温.csv")

# 数据预处理  
data['date'] = pd.to_datetime(data[['year', 'month', 'day']])

# 根据日期划分数据集  
train_mask = (data['date'] >= '2020-01-01') & (data['date'] <= '2022-11-30')
val_mask = (data['date'] >= '2022-12-01') & (data['date'] <= '2022-12-31')
test_mask = (data['date'] >= '2023-01-01') & (data['date'] <= '2023-12-31')

train_data = data[train_mask]  # 训练集
val_data = data[val_mask]  # 验证集
test_data = data[test_mask]  # 测试集

# 特征工程:将年份、月份、日期作为特征,实际气温为目标变量 
X_train = train_data[['year', 'month', 'day']]
y_train = train_data['average']
X_val = val_data[['year', 'month', 'day']]
y_val = val_data['average']
X_test = test_data[['year', 'month', 'day']]
y_test = test_data['average']

#决策树回归
dtr = DecisionTreeRegressor(random_state=42)
dtr.fit(X_train, y_train)
y_pred_dtr = dtr.predict(X_test)

# 线性回归  
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred_lr = lr.predict(X_test)

# 随机森林回归  
rfr = RandomForestRegressor(n_estimators=100, random_state=42)
rfr.fit(X_train, y_train)
y_pred_rfr = rfr.predict(X_test)


# 为可视化创建一个画布和三个子图  
fig, axs = plt.subplots(3, 1, figsize=(10, 15))

# 决策树回归的预测结果与实际值对比  
axs[0].scatter(y_test, y_pred_dtr, color='blue', alpha=0.5)
axs[0].set_title('Decision Tree Regression Predictions vs Actual')
axs[0].set_xlabel('Actual Values')
axs[0].set_ylabel('Predicted Values')
axs[0].plot([np.min((y_test.min(), y_pred_dtr.min())), np.max((y_test.max(), y_pred_dtr.max()))],
            [np.min((y_test.min(), y_pred_dtr.min())), np.max((y_test.max(), y_pred_dtr.max()))], 'r--')

# 线性回归的预测结果与实际值对比  
axs[1].scatter(y_test, y_pred_lr, color='green', alpha=0.5)
axs[1].set_title('Linear Regression Predictions vs Actual')
axs[1].set_xlabel('Actual Values')
axs[1].set_ylabel('Predicted Values')
axs[1].plot([np.min((y_test.min(), y_pred_lr.min())), np.max((y_test.max(), y_pred_lr.max()))],
            [np.min((y_test.min(), y_pred_lr.min())), np.max((y_test.max(), y_pred_lr.max()))], 'r--')

# 随机森林回归的预测结果与实际值对比  
axs[2].scatter(y_test, y_pred_rfr, color='red', alpha=0.5)
axs[2].set_title('Random Forest Regression Predictions vs Actual')
axs[2].set_xlabel('Actual Values')
axs[2].set_ylabel('Predicted Values')
axs[2].plot([np.min((y_test.min(), y_pred_rfr.min())), np.max((y_test.max(), y_pred_rfr.max()))],
            [np.min((y_test.min(), y_pred_rfr.min())), np.max((y_test.max(), y_pred_rfr.max()))], 'r--')

# 显示整个画布上的图形  
plt.tight_layout()
plt.show()

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

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

相关文章

【Neural signal processing and analysis zero to hero】- 2

Nonstationarities and effects of the FT course from youtube: 传送地址 why we need extinguish stationary and non-stationary signal, because most of neural signal is non-stationary. Welch’s method for smooth spectral decomposition Full FFT method y…

vim网络和安全的操作及shell的使用

目录 vim模式 一般模式下的基本操作&#xff1a; 一般模式切换到编辑模式&#xff1a; 一般模式切换到命令模式&#xff1a; Vim多窗口使用技巧 横向切割打开&#xff1a; 纵向切割打开&#xff1a; 关闭多窗口&#xff1a; 窗口的切换&#xff1a; 网络&#xff1a;…

django学习入门系列之第四点《BootStrap依赖》

文章目录 往期回顾 BootStrap依赖于JavaScript的类库&#xff0c;JQuery下载 下载JQuery&#xff0c;在界面上应用JQuery 在页面上应用BootStrap和avaScript的类库【JQuery是avaScript的类库】 JQuery的官网&#xff1a; jQuery 如果要应用JQuery 则要在body里面导入文件…

信息安全CISSP认证重点学什么?学习后能掌握哪些安全技能?

引言&#xff1a; 想要在信息安全领域取得突破&#xff1f;那么CISSP认证是您必不可少的一步&#xff01;本文将为您介绍CISSP认证的重点学习内容以及学习后可以掌握的安全技能&#xff0c;助您更好地了解并准备这一全球认可的信息安全证书。 随着信息安全领域的不断发展&…

uniapp小程序上传pdf文件

<template><view class"mainInnBox"><view class"formBox"><!-- 注意&#xff0c;如果需要兼容微信小程序&#xff0c;最好通过setRules方法设置rules规则 --><u-form :model"form" ref"uForm" :rules&quo…

抖音seo短视频账号矩阵系统源码-SaaS开源部署流程开发者技术分享

抖音seo账号矩阵系统&#xff0c;短视频矩阵系统源码&#xff0c; 短视频矩阵是一种常见的视频编码标准&#xff0c;通过多账号一键授权管理的方式&#xff0c;为运营人员打造功能强大及全面的“矩阵式“管理平台。使用矩阵系统也能保证账号的稳定性&#xff0c;降低账号的风险…

数据结构之双向链表(赋源码)

数据结构之双向链表(源码) 线性表 双向链表是线性表链式存储结构的一种&#xff0c;若对链式存储结构进行分类可以分为八种。 带头、不带头&#xff1a;指的是该连链表有无头节点&#xff0c;头节点不存放任何内容&#xff0c;它不一定是链表必备的元素&#xff0c;而一个链…

ros2--launch

是什么 ros2的多节点启动工具。 作用 通过launch工具执行launch文件&#xff0c;可以启动launch文件中配置的多个节点&#xff0c;以及这些启动的节点配置数据。 launch文件的实现 ROS2的launch文件有三种格式&#xff0c;python、xml、yaml。 链接 python语言创建launch文…

Elasticsearch 批量更新

Elasticsearch 批量更新 准备条件查询数据批量更新 准备条件 以下查询操作都基于索引crm_flow_info来操作&#xff0c;索引已经建过了&#xff0c;本文主要讲Elasticsearch批量更新指定字段语句&#xff0c;下面开始写更新语句执行更新啦&#xff01; 查询数据 查询指定shif…

微服务实战系列之玩转Docker(三)

前言 镜像&#xff08;Image&#xff09;作为Docker的“水源”&#xff0c;取之于它&#xff0c;用之于它。这对于立志成为运维管理的撒手锏——Docker而言&#xff0c;重要性不言而喻。 我们在虚拟机时代&#xff08;当然现在依然ing…&#xff09;&#xff0c;如何快速完成…

硅谷裸机云多IP服务器怎么样?

硅谷裸机云多IP服务器是一种在硅谷地区提供的、具有多个IP地址的裸机云服务器。这种服务器结合了裸机服务器的高性能和云服务器的灵活性&#xff0c;同时提供了多个IP地址&#xff0c;为用户的各种需求提供了支持。以下是关于硅谷裸机云多IP服务器的一些详细信息&#xff0c;ra…

3.RabbitMQ安装-Centos7

官方网址&#xff1a;gInstalling RabbitMQ | RabbitMQ 安装前提&#xff0c;需要一个erlang语言环境。 下载 erlang: Releases rabbitmq/erlang-rpm GitHub rabbitmq-server: 3.8.8 Releases rabbitmq/rabbitmq-server GitHub 安装命令 (说明i表示安装&#xff…

华清数据结构day2 24-7-17

1> 完成班级的创建&#xff0c;创建时&#xff0c;需要传递班级实际人数 2> 完成班级学生的信息录入工作 3> 完成将班级学生按成绩进行降序排序工作 4> 输出班级中成绩最好和最差学生的信息 5> 完成信息的输出工作 6> 完成班级的销毁工作 要求&#xff1a;班…

基于springboot+vue+uniapp的驾校预约平台小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

小程序图片下载保存方法,图片源文件保存!

引言 现在很多时候我们在观看到小程序中的图片的时候&#xff0c;想保存图片的原文件格式的话&#xff0c;很多小程序是禁止保存的&#xff0c;即使是让保存的话&#xff0c;很多小程序也会限制不让保存原文件&#xff0c;只让保存一些分辨率很低的&#xff0c;非常模糊的图片…

leetcode简单题27 N.119 杨辉三角II rust描述

// 直接生成杨辉三角当前行 pub fn get_row(row_index: i32) -> Vec<i32> {let mut row vec![1; (row_index 1) as usize];for i in 1..row_index as usize {for j in (1..i).rev() {row[j] row[j] row[j - 1];}}row } // 空间优化的方法 pub fn get_row2(row_ind…

数据结构——线性表(循环链表)

一、循环链表定义 将单链表中终端结点的指针端由空指针改为指向头结点&#xff0c;就使整个单链表形成一 个环&#xff0c;这种头尾相接的单链表称为单循环链表&#xff0c;简称循环链表(circular linked list)。 循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发&am…

stm32学习:(寄存器3)系统架构

时钟系统 时钟树 在STM32中有3种不同的时钟源用来驱动系统时钟(SYSCLK)&#xff1a; HSI振荡器时钟&#xff08;High Speed Internal oscillator&#xff0c;高速内部时钟&#xff09;HSE振荡器时钟&#xff08;High Speed External&#xff08;Oscillator / Clock&#xff…

RK3588读取不到显示器edid

问题描述 3588HDMIout接老的显示器或者HDMI转DVI接DVI显示器显示不了或者显示内容是彩色条纹,但是这种显示器测试过如果接笔记本或者主机是可以直接显示的。这一类问题是HDMI下的i2c与显示器通讯没成功,读取不到设备的edid。问题包括全志的H3 、AML的S905都有遇到 测试环境…

基于Web的特产美食销售系统的设计与实现

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…