最小二乘法实际应用

最小二乘法

使用最小二乘法拟合大气二氧化碳浓度数据

数据保存在monthly_co2.xls文件中(只截取部分)

python需要安装的库

  1. xlrd
  2. numpy
  3. pandas
  4. matplotlib

绘制图像代码(绘制整体数据趋势图)

# -*- coding: utf-8 -*- 
"""
@File    :   绘制趋势图.py
@Time    :   2024/11/27 23:52:44
@Version :   
@Desc    :   
""""""
@Python version         : 3.8.7
@matplotlib version     : 3.5.1
@pandas version         : 1.4.2
@numpy version          : 1.22.3
"""import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator                   #从ticker中导入MultipleLocator类df = pd.read_excel(io="./monthly_co2.xls", header=2)            # 数据在第一个sheet中# 删除索引为0的行
df.drop(index=0, inplace=True)                                  # 删除第三行数据    直接在原始dataframe上修改   
df.replace(-99.99, np.nan, inplace=True)                        # 处理缺失值
df.dropna(inplace=True)                                         # 删除缺失值的行# df['Year_Month'] = df['Yr'] + (df['Mn'] - 1) / 12             # 将年份和月份转换为小数形式
# [:, 0]    表示选择所有行
df['Year_Month'] = df.iloc[:, 0] + (df.iloc[:, 1] - 1) / 12     # 使用列index索引而不是名称索引x_vec = df['Year_Month'].values                                 # x
y_vec = df.iloc[:, 2].values                                    # y# matplotlib字体设置
plt.rcParams['font.family'] = "Times New Roman"                 # 设置全局字体# marker='o'    散点图绘制为圆形
# edgecolor='r' 设置圆圈的边缘颜色为红色
custom_color = '#f0a1a8'
plt.scatter(x_vec, y_vec, marker='o', edgecolors=custom_color, facecolors='none', label='Actual Data')                  # 原始数据
plt.xlabel("Year_Month", fontsize=16)
plt.ylabel("CO2 Concentration [ppm]", fontsize=16)
plt.title("Trend Chart of CO2 Concentration Over Time", fontsize=20)         # 二氧化碳浓度随时间变化趋势图
plt.legend(loc='upper left')# 美化图表plt.rcParams['axes.facecolor'] = 'lightgray'
plt.rcParams['legend.fontsize'] = 10                            # 设置图例字体大小# 刻度值设置
ax = plt.gca()                                                  # 获取当前坐标轴
ax.xaxis.set_major_locator(MultipleLocator(10))                 # 设置x轴的主刻度间隔
ax.xaxis.set_minor_locator(MultipleLocator(5))                  # 设置x轴的次刻度间隔ax.yaxis.set_major_locator(MultipleLocator(20))                 # 设置y轴的主刻度间隔
ax.yaxis.set_minor_locator(MultipleLocator(10))                 # 设置y轴的次刻度间隔plt.grid(True, color='gray', linestyle='--', linewidth=0.5)     # 添加自定义样式网格线
plt.show()

结果(请自己修改线形、标题等内容)

二次函数拟合

# -*- coding: utf-8 -*- 
"""
@File    :   二次函数拟合结果.py
@Time    :   2024/11/28 11:19:38
@Version :   
@Desc    :   
""""""
@Python version         : 3.8.7
@matplotlib version     : 3.5.1
@pandas version         : 1.4.2
@numpy version          : 1.22.3
"""import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator                   #从ticker中导入MultipleLocator类df = pd.read_excel(io="./monthly_co2.xls", header=2)            # 数据在第一个sheet中# 删除索引为0的行
df.drop(index=0, inplace=True)                                  # 删除第三行数据    直接在原始dataframe上修改   
df.replace(-99.99, np.nan, inplace=True)                        # 处理缺失值
df.dropna(inplace=True)                                         # 删除缺失值的行# df['Year_Month'] = df['Yr'] + (df['Mn'] - 1) / 12             # 将年份和月份转换为小数形式
# [:, 0]    表示选择所有行
df['Year_Month'] = df.iloc[:, 0] + (df.iloc[:, 1] - 1) / 12     # 使用列index索引而不是名称索引x_vec = df['Year_Month'].values                                 # x
y_vec = df.iloc[:, 2].values                                    # y# 这里添加代码M = df.shape[0]                                                 # 数据点个数
# 方程组的系数矩阵Phi = np.zeros((M, 3))                                          # 创建空矩阵
for i in range(M):Phi[i][0] = 1Phi[i][1] = x_vec[i]Phi[i][2] = x_vec[i]**2# 正规方程组A = Phi.T @ Phi
b = Phi.T @ y_vecx = np.linalg.solve(A, b)print(x)a_0 = x[0]
a_1 = x[1]
a_2 = x[2]# f_x = a_2x^2 + a_1x + a_0
varphi_x = lambda x: a_2 * x**2 + a_1 * x + a_0                        # 拟合函数# 可视化图像y_vec_model = varphi_x(x_vec)# 均方根误差
RMSE = np.sqrt(np.sum((y_vec - y_vec_model)**2) / M)
print("均方根误差: ", RMSE)# matplotlib字体设置
plt.rcParams['font.family'] = "Times New Roman"                 # 设置全局字体plt.plot(x_vec, y_vec_model-279, label='Fitted Line', color='red')# marker='o'    散点图绘制为圆形
# edgecolor='r' 设置圆圈的边缘颜色为红色
custom_color = '#f0a1a8'
plt.scatter(x_vec, y_vec-279, marker='o', edgecolors=custom_color, facecolors='none', label='Actual Data')                  # 原始数据
plt.xlabel("Year_Month", fontsize=16)
plt.ylabel("CO2 Concentration [ppm]", fontsize=16)
plt.title("Trend Chart of CO2 Concentration Over Time", fontsize=20)         # 二氧化碳浓度随时间变化趋势图
plt.legend(loc='upper left')# 美化图表plt.rcParams['axes.facecolor'] = 'lightgray'
plt.rcParams['legend.fontsize'] = 10                            # 设置图例字体大小# 刻度值设置
ax = plt.gca()                                                  # 获取当前坐标轴
ax.xaxis.set_major_locator(MultipleLocator(10))                 # 设置x轴的主刻度间隔
ax.xaxis.set_minor_locator(MultipleLocator(5))                  # 设置x轴的次刻度间隔ax.yaxis.set_major_locator(MultipleLocator(20))                 # 设置y轴的主刻度间隔
ax.yaxis.set_minor_locator(MultipleLocator(10))                 # 设置y轴的次刻度间隔plt.grid(True, color='gray', linestyle='--', linewidth=0.5)     # 添加自定义样式网格线# 添加RMSE文本信息
# (0.02, 0.85) 以轴的百分比来表示 分别对应x轴和y轴的为转移
plt.text(0.09, 0.95, f"RMSE: {RMSE:.2f}", transform=plt.gca().transAxes, fontsize=18)plt.show()

程序运行结果

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

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

相关文章

原生html+css+ajax实现二级下拉选择的增删改及树形结构列出

<?php $db_host localhost; $db_user info_chalide; $db_pass j8c2rRr2RnA; $db_name info_chalide; /* 数据库结构SQL CREATE TABLE categories ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, parent_id INT DEFAULT 0 ); */ try { $pdo new PD…

Linux操作系统--文件的重定向以及文件缓冲区

目录 前言 一、文件描述符的分配规则 二、重定向 三、系统中的重定向接口 1、dup2()介绍 2、dup2()使用 1&#xff09;输出重定向和追加重定向 2&#xff09;输入重定向 四、文件缓冲区 1、定义 2、缓冲区刷新的条件 1&#xff09;文件缓冲区存在的意义 2&…

5G CPE核心器件-基带处理器(三)

5G CPE 核心器件 -5G基带芯片 基带芯片简介基带芯片组成与结构技术特点与发展趋势5G基带芯片是5G CPE中最核心的组件,负责接入5G网络,并进行上下行数据业务传输。移动通信从1G发展到5G,终端形态产生了极大的变化,在集成度、功耗、性能等方面都取得巨大的提升。 基带芯片简…

mmdection配置-yolo转coco

基础配置看我的mmsegmentation。 也可以参考b站 &#xff1a;https://www.bilibili.com/video/BV1xA4m1c7H8/?vd_source701421543dabde010814d3f9ea6917f6#reply248829735200 这里面最大的坑就是配置coco数据集。我一般是用yolo&#xff0c;这个yolo转coco格式很难搞定&#…

Java 单元测试模拟框架-Mockito 的介绍

Mockito 是什么 Mockito 是一个用于单元测试的模拟框架&#xff0c;基于它可以使用简洁易用的API编写出色的测试。 Mockito 允许开发人员创建和管理模拟对象&#xff08;mock objects&#xff09;&#xff0c;以便在测试过程中替换那些不容易构造或获取的对象。 Mockito的基本…

NiFi-从部署到开发(图文详解)

NiFi简介 Apache NiFi 是一款强大的开源数据集成工具&#xff0c;旨在简化数据流的管理、传输和自动化。它提供了直观的用户界面和可视化工具&#xff0c;使用户能够轻松设计、控制和监控复杂的数据流程&#xff0c;NiFi 具备强大的扩展性和可靠性&#xff0c;可用于处理海量数…

draggable插件——实现元素的拖动排序——拖动和不可拖动的两种情况处理

最近在写后台管理系统的时候&#xff0c;遇到一个需求&#xff0c;就是关于拖动排序的功能。 我之前是写过一个关于拖动表格的功能&#xff0c;此功能可以实现表格中的每一行数据上下拖动实现排序的效果。 vue——实现表格的拖拽排序功能——技能提升 但是目前我这边的需求是…

Delphi Web前端开发教程(9):基于TMS WEB Core框架

3、REST Servers服务端(后端)框架 REST服务端特点&#xff1a; – 为远程资源提供一个REST API接口。也可以为其他网络内容提供服务&#xff1b; – 包括在Delphi Enterprise & Architect企业版和架构师版中的RAD服务器、DataSnap、WebBroker&#xff1b; – 开源框架&a…

利用空闲主机进行Nmap隐匿扫描:IP伪造与空闲扫描技术

IP伪造与空闲扫描技术 在网络安全领域&#xff0c;扫描和识别目标主机的开放端口是攻击者获取目标信息的重要手段。传统的扫描方法可能会暴露扫描者的真实IP地址&#xff0c;从而引起目标主机的警觉。然而&#xff0c;IP地址伪造是一种巧妙的方式&#xff0c;可以帮助攻击者在…

学习视频超分辨率扩散模型中的空间适应和时间相干性(原文翻译)

文章目录 摘要1. Introduction2. Related Work3. Our Approach3.1. Video Upscaler3.2. Spatial Feature Adaptation Module3.3. Temporal Feature Alignment Module3.4. Video Refiner3.5. Training Strategy 4. Experiments4.1. Experimental Settings4.2. Comparisons with …

JavaScript 键盘控制移动

如果你想通过 JavaScript 实现键盘控制对象&#xff08;比如一个方块&#xff09;的移动&#xff0c;下面是一个简单的示例&#xff0c;展示如何监听键盘事件并根据按下的键来移动一个元素。 HTML 和 CSS&#xff1a; <!DOCTYPE html> <html lang"en">…

SpringMVC其他扩展

一、全局异常处理机制: 1.异常处理两种方式: 开发过程中是不可避免地会出现各种异常情况的&#xff0c;例如网络连接异常、数据格式异常、空指针异常等等。异常的出现可能导致程序的运行出现问题&#xff0c;甚至直接导致程序崩溃。因此&#xff0c;在开发过程中&#xff0c;…

Linux-异步IO和存储映射IO

异步IO 在 I/O 多路复用中&#xff0c;进程通过系统调用 select()或 poll()来主动查询文件描述符上是否可以执行 I/O 操作。而在异步 I/O 中&#xff0c;当文件描述符上可以执行 I/O 操作时&#xff0c;进程可以请求内核为自己发送一个信号。之后进程就可以执行任何其它的任务…

docker更换容器存储位置

一&#xff1a;原因 今天之前在某个服务器上使用docker搭建的服务突然无法访问了&#xff0c;进入服务器查看发现服务运行正常&#xff0c;但是就是无法使用&#xff0c;然后我这边准备将docker服务重新启动下看看&#xff0c;发现docker服务无法重启&#xff0c;提示内存已满…

工业—使用Flink处理Kafka中的数据_ProduceRecord2

使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入HBase 中的 gyflinkresult:Produce5minAgg 表, rowkey“

外卖开发(二)开发笔记——DTO、自定义全局异常处理、ThreadLocal、日期格式化

外卖开发&#xff08;二&#xff09;开发笔记 一、DTO二、自定义全局异常处理三、ThreadLocal存入、提取当前登陆用户的id四、日期格式化1、实体类属性上加入注解JsonFormat2、在WebMvcConfiguration中扩展SpringMVC的消息转换器 一、DTO 数据传输对象&#xff08;DTO&#xf…

Java 中tableaw 实战教程

java中tableaw库通过简单的API实现过滤、连接、绘制和操作表格数据。支持CSV&#xff0c;数据库&#xff0c;Excel等数据源。 安装依赖 tableaw是用于分析表格数据的开源Java库&#xff0c;构建在Java 8流之上。它可以从GitHub下载&#xff0c;也可以作为Maven或Gradle项目的…

手机上怎么拍证件照,操作简单且尺寸颜色标准的方法

在数字化时代&#xff0c;手机已成为我们日常生活中不可或缺的一部分。它不仅是通讯工具&#xff0c;更是我们拍摄证件照的便捷利器。然而&#xff0c;目前证件照制作工具鱼龙混杂&#xff0c;很多打着免费名号的拍照软件背后却存在着泄漏用户信息、照片制作不规范导致无法使用…

PHP使用RabbitMQ(正常连接与开启SSL验证后的连接)

代码中包含了PHP在一般情况下使用方法和RabbitMQ开启了SSL验证后的使用方法&#xff08;我这边消费队列是使用接口请求的方式&#xff0c;每次只从中取出一条&#xff09; 安装amqp扩展 PHP使用RabbitMQ前&#xff0c;需要安装amqp扩展&#xff0c;之前文章中介绍了Windows环…

【Go 基础】channel

Go 基础 channel 什么是channel&#xff0c;为什么它可以做到线程安全 Go 的设计思想就是&#xff1a;不要通过共享内存来通信&#xff0c;而是通过通信来共享内存。 前者就是传统的加锁&#xff0c;后者就是 channel。也即&#xff0c;channel 的主要目的就是在多任务间传递…