用多项式回归分析简单投掷数据-训练投石机数据预测模型

news/2025/2/7 9:57:19/文章来源:https://www.cnblogs.com/flyingsir/p/18702069

用多项式回归分析简单投掷数据

 进阶实验:训练投石机数据预测模型

问题描述:

 

(1)投掷角度不变,已知电机速度,如何得出实际投掷距离?

 

(2)其电机速度(motor_speed)和投掷距离(distance)的对应关系有什么关系?

 投掷角度不变,电 机速度与投掷距离 的数据集展示:

 

学习:i可以通过机器学习,训练投石速度预测模型吗?应用:可以使用训练好的模型,

对新输入的电机速度作推理实现已知电机速度值,就能获得其对应投掷距离吗?

 

 

 

 

 

 

 

 多项式回归

多项式回归(Polynomial Regression)是一种回归分析方法,它在模型中使用多项式方程来拟合数据。与线性回归不同,多项式回归可以捕捉变量之间的非线性关系,因此在处理更复杂的数据模式时非常有用。

多项式回归的数学形式

多项式回归的一般形式可以表示为:
y=β0+β1x+β2x2+β3x3++βnxn+ϵ

 

其中:
  • y 是因变量(目标)。
  • x 是自变量(特征)。
  • β0,β1,β2,,βn 是模型参数。
  • ϵ 是误差项,通常假设为独立同分布的正态分布。

如何理解多项式回归

  1. 线性回归的扩展:多项式回归是线性回归的扩展。线性回归假设变量之间的关系是线性的,而多项式回归通过引入自变量的高次项来捕捉非线性关系。
  2. 拟合非线性数据:在实际应用中,数据之间的关系往往不是线性的。多项式回归通过使用多项式方程,可以更好地拟合这些非线性数据。
  3. 多项式的阶数:多项式的阶数(n)决定了模型的复杂度。阶数越高,模型可以捕捉的非线性关系越复杂,但同时也可能带来过拟合(overfitting)的问题。
  4. 参数估计:与线性回归类似,多项式回归的参数(β0,β1,β2,,βn)可以通过最小化损失函数(如均方误差)来估计。

多项式回归的应用

多项式回归在许多领域都有应用,例如:
  • 经济学:用于分析经济指标之间的非线性关系。
  • 生物学:用于描述生物体的生长曲线。
  • 工程学:用于拟合物理过程中的非线性数据。
  • 机器学习:作为回归任务中的一种方法,用于预测连续的数值输出。

多项式回归的优缺点

优点:
  • 可以捕捉变量之间的非线性关系。
  • 模型形式灵活,可以通过调整多项式的阶数来适应不同的数据模式。
缺点:
  • 阶数选择不当可能导致过拟合或欠拟合。
  • 高阶多项式可能在数据的边缘区域出现较大的波动(龙格现象)。

总结

多项式回归是一种强大的回归分析工具,可以用于拟合非线性数据。通过引入自变量的高次项,它扩展了线性回归的适用范围。然而,使用多项式回归时需要谨慎选择多项式的阶数,以避免过拟合和龙格现象。

参考示例

  • 多项式回归的数学形式:y=2+3x0.5x2+0.1x3
  •  

  • 多项式回归的应用:假设你想分析广告支出与销售额之间的关系。通过使用多项式回归,你可以发现广告支出与销售额之间的非线性关系,从而更准确地预测销售额。

在选择使用线性回归还是多项式回归时,需要根据数据的特点和建模目标来判断。以下是两者的区别以及如何判断使用多项式回归的特点:

线性回归与多项式回归的区别

维度线性回归多项式回归
模型形式 输出是输入特征的线性组合 输出是输入特征的多项式组合
适用场景 数据呈现线性关系 数据呈现非线性关系
模型复杂度 参数少,模型简单 参数多,模型复杂
过拟合风险 容易欠拟合 容易过拟合
计算复杂度 计算速度快 随阶数增加,计算复杂度上升
解释性 易于理解和解释 解释性下降

如何判断使用多项式回归

  1. 数据关系的可视化
    • 散点图:绘制自变量与因变量的散点图,观察数据点的分布。如果数据点呈明显的非线性趋势(如曲线形状),则多项式回归可能是更好的选择
    • 残差分析:如果使用线性回归模型拟合数据后,残差图显示明显的模式(如中间有大量正残差的斑块),说明线性模型不适用,可以考虑多项式回归
  2. 数据的非线性特征
    • 当数据中存在明显的非线性关系时,线性回归可能无法很好地拟合数据,而多项式回归可以通过引入高次项来捕捉这些非线性关系
  3. 模型复杂度与泛化能力
    • 阶数选择:多项式回归的阶数越高,模型的拟合能力越强,但也更容易过拟合。通常建议从低阶多项式开始尝试,并通过交叉验证等方法选择最优的阶数
    • 正则化:在使用多项式回归时,可以结合正则化方法(如岭回归或Lasso回归)来防止过拟合
  4. 应用场景
    • 复杂数据建模:多项式回归适用于需要捕捉复杂非线性关系的场景,如物理学中的曲线拟合、工程学中的性能曲线建模、医学研究中的剂量-效应关系等
    • 简单数据建模:如果数据关系较为简单且呈现线性趋势,则线性回归更为合适,因为它简单、高效且易于解释

总结

  • 使用线性回归:当数据关系近似线性,且对模型的解释性和计算效率有较高要求时,线性回归是合适的选择
  • 使用多项式回归:当数据存在明显的非线性关系,且需要更灵活的模型来捕捉这些关系时,多项式回归更为适用

 

进阶实验:用多项式回归分析简单投掷数据

活动材料

  • 多项式回归模型训练.ipynb
  • data/投掷数据_速度与距离.csv
  • data/投掷数据_完整.csv

活动目的

使用多项式回归算法,探究电机速度对投掷距离的影响。

背景知识

多项式回归算法是一种回归技术,相比于简单的线性回归,它可以拟合更复杂的数据模式,如投掷角度与投掷距离并非线性关系,在图表中表现为曲线而非直线。

数据说明

特征:motor_speed(在软件中配置的电机速度参数,无单位)

标签:distance(投掷距离,单位cm)

import pandas as pd
data = pd.read_csv('data/投掷数据_速度与距离.csv')
data

  

 

体验步骤

1.导入库

我们可以选择使用BaseML完成。

# 更新库,一个环境只需要运行一次
!pip install -U BaseML -i https://pypi.tuna.tsinghua.edu.cn/simple

  

Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: BaseML in d:\xedu\env\lib\site-packages (0.1.5)
Requirement already satisfied: scikit-learn in d:\xedu\env\lib\site-packages (from BaseML) (1.3.0)
Requirement already satisfied: pandas in d:\xedu\env\lib\site-packages (from BaseML) (2.0.3)
Requirement already satisfied: numpy in d:\xedu\env\lib\site-packages (from BaseML) (1.24.4)
Requirement already satisfied: seaborn in d:\xedu\env\lib\site-packages (from BaseML) (0.12.2)
Requirement already satisfied: scikit-image in d:\xedu\env\lib\site-packages (from BaseML) (0.21.0)
Requirement already satisfied: matplotlib in d:\xedu\env\lib\site-packages (from BaseML) (3.3.1)
Requirement already satisfied: opencv-python>=4.1.2.30 in d:\xedu\env\lib\site-packages (from BaseML) (4.1.2.30)
Requirement already satisfied: yellowbrick in d:\xedu\env\lib\site-packages (from BaseML) (1.5)
Requirement already satisfied: certifi>=2020.06.20 in d:\xedu\env\lib\site-packages (from matplotlib->BaseML) (2023.7.22)
Requirement already satisfied: cycler>=0.10 in d:\xedu\env\lib\site-packages (from matplotlib->BaseML) (0.11.0)
Requirement already satisfied: kiwisolver>=1.0.1 in d:\xedu\env\lib\site-packages (from matplotlib->BaseML) (1.4.5)
Requirement already satisfied: pillow>=6.2.0 in d:\xedu\env\lib\site-packages (from matplotlib->BaseML) (10.0.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 in d:\xedu\env\lib\site-packages (from matplotlib->BaseML) (3.1.1)
Requirement already satisfied: python-dateutil>=2.1 in d:\xedu\env\lib\site-packages (from matplotlib->BaseML) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in d:\xedu\env\lib\site-packages (from pandas->BaseML) (2023.3)
Requirement already satisfied: tzdata>=2022.1 in d:\xedu\env\lib\site-packages (from pandas->BaseML) (2023.3)
Requirement already satisfied: scipy>=1.8 in d:\xedu\env\lib\site-packages (from scikit-image->BaseML) (1.10.1)
Requirement already satisfied: networkx>=2.8 in d:\xedu\env\lib\site-packages (from scikit-image->BaseML) (3.1)
Requirement already satisfied: imageio>=2.27 in d:\xedu\env\lib\site-packages (from scikit-image->BaseML) (2.31.2)
Requirement already satisfied: tifffile>=2022.8.12 in d:\xedu\env\lib\site-packages (from scikit-image->BaseML) (2023.7.10)
Requirement already satisfied: PyWavelets>=1.1.1 in d:\xedu\env\lib\site-packages (from scikit-image->BaseML) (1.4.1)
Requirement already satisfied: packaging>=21 in d:\xedu\env\lib\site-packages (from scikit-image->BaseML) (23.1)
Requirement already satisfied: lazy_loader>=0.2 in d:\xedu\env\lib\site-packages (from scikit-image->BaseML) (0.3)
Requirement already satisfied: joblib>=1.1.1 in d:\xedu\env\lib\site-packages (from scikit-learn->BaseML) (1.3.2)
Requirement already satisfied: threadpoolctl>=2.0.0 in d:\xedu\env\lib\site-packages (from scikit-learn->BaseML) (3.2.0)
Requirement already satisfied: six>=1.5 in d:\xedu\env\lib\site-packages (from python-dateutil>=2.1->matplotlib->BaseML) (1.16.0)

 

# 导入库
from BaseML import Regression as reg
# 构建多项式回归模型
model = reg('Polynomial')
# 使用函数载入数据,并自动划分训练集和验证集
model.load_dataset('data/投掷数据_速度与距离.csv',type ='csv',split=True, x_column = [0],y_column=[1])# 训练模型
model.train()# 读取验证集进行验证并计算R平方值 此处数据量较小,数据集划分情况会在较大程度情况下影响R2值,不影响推理结果
model.valid(metrics='r2') # 载入验证数据
# 模型保存
model.save('models/model1.pkl')

  

 

Saving model checkpoints...
Saved successfully!

7.模型应用

from BaseML import Regression as reg # 从库文件中导入回归任务模块
model = reg('Polynomial') # 构建多项式回归模型
model.load('models/model1.pkl')data = [[97]] # 指定一个不存在于数据中的电机速度result= model.inference(data)# 进行模型推理
print(f"模型返回的预测结果是:投掷距离={result[0][0]:.2f}cm")

  

模型返回的预测结果是:投掷距离=39.30cm

 

用角度和电机速度预测投掷物距离

请在csv中找到带有角度和电机速度的csv文件,并将文件名填写到填空处

from BaseML import Regression as regmodel = reg('Polynomial')
model.load_dataset('data/数据角度推电机.csv', type='csv', split=True, x_column=[0, 1], y_column=[2])
model.train()
model.valid(metrics='r2')
model.save('models/model_dis.pkl')
model.load('models/model_dis.pkl')new_data = [[90, 13.5]]   #电机的速度和角度prediction = model.inference(new_data)
print(f"模型返回的预测结果是:投掷距离={prediction[0][0]:.2f}")

  1)可以修改,数据csv文件的列数据位置, 从0开始。

2)可以修改 x_xolumn【参数】给定的数据下标位置,  推理得到  y_column【2】 的结果。 可以修改这里的下标值,下标对应的数据库csv数据的列的序号。 从做到右,从0开始计数

 

在已知目标投掷距离和发射角度的情况下,如何预测合适的电机速度

思路提示1:修改数据集csv文件中的特征与标签,保存为新文件投掷数据2.csv并读取。

思路提示2:通过代码实现特征与标签的读取, 如下方代码实现的功能就是:读取xx.csv文件中的第0、1、2、3列作为特征,第4列作为标签。

model.load_dataset('data/投掷数据.csv', type ='csv',split=True,x_column=[0,1,2,3],y_column=[4])

from BaseML import Regression as regmodel = reg('Polynomial')
model.load_dataset('data/投掷数据_完整.csv', type='csv', split=True, x_column=[0, 1], y_column=[2])
model.train()
model.valid(metrics='r2')
model.save('models/model_dis.pkl')
model.load('models/model_dis.pkl')new_data = [[90, 13.5]]   #电机的速度和角度prediction = model.inference(new_data)
print(f"模型返回的预测结果是:投掷距离={prediction[0][0]:.2f}cm")

  

 训练投石机数据预测模型

 

 

 

 

 

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

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

相关文章

css背景模糊效果

下面是效果下面是实现代码<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-…

线性回归模型训练-训练温度传感器数据预测模型

基础实验:训练温度传感器数据预测模型 任务描述:LM35是科创作品制作中常用的温度传感器(1)已知电压值, 如何得出实际温度值?(2)输出电压(Sensor)和真实温度(Temperature)有什么关 系?请借助大模型生成这两列数据的关系图 /目录学习:可以通过机器学习,训练传感器数据预测模型…

【分享】银行业如何实现内外网文件传输,保持核心竞争力?

数据要素是数字经济的重要基石,也是国家经济安全的关键要素。银行业数据因其数据体量大、数据类型多、涉及主体庞大及应用场景复杂等天然特征,在数据流转上面临风险和挑战,包括法律法规层面、安全层面、效率层面等。为响应和落实国家层面对于金融行业网络安全的建设要求,同…

SMT32的HEX文件里加入固件版本的方法(转)

使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。 代码代码如下: //------------------------------------------------------------------------------#include <absacc.h>//------------------------------------------------------------------------------#d…

uniapp 自定义tabBar组件 custom-tab-bar

custom-tab-bar 自定义tabBar组件。 在小程序和App端,为提升性能,在 pages.json 里配置固定的原生tabBar。但在H5端,这一设计并不会提升性能。 同时,H5端尤其是PC宽屏,对tabBar的位置和样式有更灵活的需求,tabBar作为一级导航,更多的时候是在PC网页顶部而不是底部。 自定…

无法连接/访问 Linux虚拟的中的端口(Redis)

Could not connect to Redis at 192.168.137.132:6379: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。当出现 “Could not connect to Redis at 192.168.137.132:6379: No route to host” 错误,意味着客户端无法找到通往 Redis 服务器(IP 为 192…

钉钉发送告警(非@)

环境: OS:Centos 7 python:2.7[root@yunwei-zabbix-1000001-prd alertscripts]# more dingtalk_middleware.py #!/usr/bin/env python #-*- coding: utf-8 -*-import sys, json, urllib2def Dingtalk(message):content = messageurl = "https://oapi.dingtalk.com/robot/…

为GitLab配置Microsoft Graph作为邮件收发工具

先决条件Microsoft/Office 365订阅(Exchange是必须的)并添加一个gitlab专用的账户,本文使用E5开发者订阅 部署好的GitLab,参考上一篇文章步骤一、 配置Microsoft Entra 1. 注册应用程序 登录Azure门户,进入Microsoft Entra ID,选择管理-应用注册-新注册填写你想要的名称,…

C# 深度学习框架 TorchSharp 原生训练模型和图像识别-自定义网络模型和识别手写数字

目录使用 Torch 训练模型定义神经网络加载数据集创建网络模型定义损失函数训练识别手写图像 教程名称:使用 C# 入门深度学习 作者:痴者工良 教程地址:https://torch.whuanle.cn 电子书仓库:https://github.com/whuanle/cs_pytorch Maomi.Torch 项目仓库:https://github.co…

ZW3D二次开发_入门_Action与Ribbon菜单定制--转自 知乎 捣蛋龙

ZW3D二次开发_入门_Action与Ribbon菜单定制捣蛋龙 ​关注他5 人赞同了该文章​ 目录收起ZW3D二开入门目录 - 知乎 (zhihu.com)最新测试环境:2025 SP前言定制Ribbon菜单1.新建工作区2.定义"行为"3.定义自定义Ribbon文件4.编写策略文件5.编写引导程序6.多环境差异化策…

day4

简单图论与构造 A 考虑把权值为 2 的点看作给权值为 1 的点加一, 所以整个问题被拆成了两个部分:构造树和给节点加一 事实上,在第一部分时我们将树构造的尽量平衡是有好处,这个结论在第二个步骤中会得到证明 构造: Process DFS(father,ch,u,size):if size==0 then returnso…