【机器学习】利用线性回归预测披萨价格

目录

前言

一、绘制散点图

二、数据准备

三、一元线性回归模型训练

四、一元线性回归模型评估

总结


🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。

💡本文由Filotimo__✍️原创,首发于CSDN📚。

📣如需转载,请事先与我联系以获得授权⚠️。

🎁欢迎大家给我点赞👍、收藏⭐️,并在留言区📝与我互动,这些都是我前进的动力!

🌟我的格言:森林草木都有自己认为对的角度🌟。

前言

机器学习中的一元线性回归问题是指预测一个因变量(响应变量)和一个自变量(特征变量)之间的线性关系。具体地说,给定一个包含自变量和因变量的数据集,我们可以通过训练一个线性回归模型来学习这种关系,并利用该模型来进行预测或者推断。

在这里,我们简单介绍一下在一元线性回归中的一些关键术语和流程:

特征:在一元线性回归中,我们只有一个特征(或自变量),它是用来预测因变量的变量。
标签:标签是我们的目标输出(或因变量),它是由模型来预测的值。
模型:模型就是训练过程中学到的函数,它将给定的自变量映射到因变量的预测值。
训练集:训练集是用来训练模型的数据集。我们通过输入自变量 x 的值和对应的因变量 y 值来训练(拟合)用于学习的模型。
测试集:测试集是用来测试模型预测准确度的数据集。我们在测试集上输入自变量 x 的值,然后通过模型预测其对应的因变量 y 值,并将其与测试集中真实的因变量 y 值进行比较。
均方误差(MSE):MSE 是在评估回归问题模型性能时常用的指标之一,它是预测值与实际值之间差异的平方的均值。
决定系数(R2):决定系数是一个用来衡量模型对数据的拟合程度好坏的指标,它的值介于 0 和 1 之间。R2 越接近 1,表示模型对数据的拟合程度越好,反之则越差。


一、绘制散点图

import matplotlib.pyplot as plt
from pylab import mpl   # 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]   # 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False

mpl.rcParams 是一个全局配置字典,用于设置 matplotlib 的默认参数。我们将字体设置为 SimHei,以支持显示中文字体,并且设置 axes.unicode_minus 为 False,以解决负号显示的问题。

# 0.准备数据
x = [225.98,247.07,253.14,457.85,241.58,301.01,20.67,288.64,163.56,120.06,207.83,342.75,147.9,53.06,224.72,29.51,21.61,483.21,245.25,399.25,343.35]
y = [196.63,203.88,210.75,372.74,202.41,247.61,24.9,239.34,140.32,104.15,176.84,288.23,128.79,49.64,191.74,33.1,30.74,400.02,205.35,330.64,283.45]
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2绘制图像
plt.scatter(x, y)
# 3.图像显示
plt.show()

我们定义了两个列表 x 和 y,用来存储披萨的价格 x 和销量 y 的数据。接着使用 matplotlib 库来创建一个大小为 20*8,dpi 为 100 的画布,并使用 scatter 函数在画布上绘制 x 和 y 的散点图。

x=[1, 2, 3, 4, 5]
y=[1, 3, 7, 8, 11]
plt.title(u"散点图-折线图-Filotimo")
plt.plot(x, y, "b-")    # 绘制蓝色折线
plt.plot(x, y, "r*")    # 绘制红色星形散点图
plt.show()

在这段代码中,我们重新定义了新的 x 和 y 列表,然后使用 plot 函数在画布上绘制了散点图和折线图。

二、数据准备

X_train = [[6], [8], [10], [14], [18]] # 披萨直径
y_train = [[7], [9], [13], [17.5], [18]] # 披萨价格

我们定义了训练数据集 X_train 和 y_train,用来表示不同直径的披萨对应的价格。X_train 包含了披萨的直径,而 y_train 包含了给定直径的披萨价格。

plt.figure()
plt.plot(X_train, y_train, 'r*', markersize=10)
plt.title('披萨直径与价格的散点图')
plt.xlabel('直径(英寸)')
plt.ylabel('价格(美元)')
plt.axis([0, 25, 0, 25])
plt.grid(True)
plt.savefig('scatter_data.png')
plt.show()

我们创建了一个新的空白画布,并在画布上绘制了 X_train 和 y_train 的散点图。其中,‘r*’ 表示散点图用红色星形来表示,markersize=10 表示散点的大小为 10。

三、一元线性回归模型训练

from sklearn.linear_model import LinearRegression
model = LinearRegression();
model.fit(X_train,y_train);
y_train_pred = model.predict(X_train);
print('模型的表达式为: y = %0.3f * x + %0.3f' % (model.coef_[0][0], model.intercept_[0]));

我们通过导入 LinearRegression 类来引入线性回归模型,使用 LinearRegression() 创建一个名为 model 的线性回归模型对象,使用 fit() 方法将训练数据集 X_train 和 y_train 传入模型,以拟合数据集,使用 predict() 方法对训练数据集 X_train 进行预测,得到预测结果 y_train_pred,使用 coef_ 和 intercept_ 属性来获取模型的系数和截距。

y_train_pred

plt.figure()
plt.plot(X_train, y_train,'r*',markersize=10)
plt.plot(X_train, y_train_pred, 'b')  # 显示线性回归模型的直线
plt.title('披萨直径与价格的关系')
plt.xlabel('直径diameter (英寸)')
plt.ylabel('价格price (美元)')
plt.axis([0, 25, 0, 25])
plt.grid(True)
plt.savefig('regression_line.png')
plt.show()

使用 plt.figure()创建一个新的空白画布,使用 plt.plot() 方法绘制散点图,将训练数据集 X_train 和 y_train 以红色星形的形式绘制出来,将 X_train 和线性回归模型对训练数据集的预测结果 y_train_pred 以蓝色直线的形式绘制出来。

四、一元线性回归模型评估

while True:x_pre = input("请输入单个披萨的直径(输入q退出):")if x_pre == 'q':breakelse:x_prel = [[float(x_pre)]]y_pre = model.predict(x_prel)print('预测 {0} 英寸匹萨价格为: ${1:.2f}'.format(x_pre, y_pre[0][0]))
print('\n')

我们使用了一个循环,允许用户输入单个披萨的直径,并使用训练好的模型进行价格预测。

from sklearn.metrics import mean_squared_error
MSE_train = mean_squared_error(y_train, y_train_pred)  # 均方误差MSE
R2_score_train = model.score(X_train, y_train)  # 决定系数R2
print("一元回归模型的训练集的MSE: %0.3f,决定系数R^2: %0.3f" % (MSE_train, R2_score_train))

我们使用了sklearn.metrics模块中的mean_squared_error函数来计算训练集的均方误差(MSE),并使用模型的score方法计算训练集的决定系数(R2)。

X_test = [[8], [9],[11], [16], [12]]
y_test = [[11], [8.5], [15], [18], [14]]
y_test_pred = model.predict(X_test)
MSE_test = mean_squared_error(y_test, y_test_pred)
R2_score_test = model.score(X_test, y_test)
print("一元回归模型测试集的MSE: %0.3f,决定系数R^2: %0.3f" % (MSE_test, R2_score_test))
print('\n')

使用之前训练好的模型 model 对测试集的特征数据进行预测,得到预测结果 y_test_pred。

使用 mean_squared_error 函数计算测试集的均方误差(MSE),将实际的测试集标签 y_test 和模型对测试集的预测结果 y_test_pred 作为输入参数。

使用模型的 score 方法计算测试集的决定系数(R2),将测试集特征数据 X_test 和测试集标签 y_test 作为输入参数。


总结

我们首先收集了一组包括披萨尺寸和价格的数据样本。通过查看数据的特征和分布情况,我们发现披萨尺寸与价格之间呈现出一定的线性关系。然后,我们使用收集到的数据构建了一个线性回归模型。

模型的自变量是披萨的尺寸,因变量是披萨的价格。我们将数据集分为训练集和测试集,并使用训练集对模型进行了训练。在训练过程中,我们使用了均方误差(Mean Squared Error)作为评估指标来衡量模型的拟合程度。

经过训练后,我们对模型进行了评估。通过将测试集中的披萨尺寸输入模型,我们得到了相应的预测价格,并将其与真实价格进行对比,我们发现模型的预测结果与实际价格的差距比较小,表明模型对于预测披萨价格具有一定的准确性。                                 

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

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

相关文章

vue运行项目时network:unavailble的解决方法

先看问题: 解决方法: 1、找到环境变量 2、找到系统变量中的变量Path:点击编辑 3、打开后新建文本 C:\windows\System32\Wbem 复制粘贴即可 3、最后重启vscode运行即可: 错误原因: 因为WBEM是管理协议和网络标准技术…

‘BLEUUID‘ does not name a type错误怎么解决?

摘要:arduino环境下对esp32蓝牙编程时会遇到BLEUUID does not name a type错误,本文介绍解决方法。 硬件设备是安信可ESP32-S模组。 错误发生在代码最开始的地方,include了一个蓝牙设备头文件,然后定义了UUID,注意看&a…

HTTP 302错误:临时重定向

在Web开发中,HTTP状态码是用于表示Web服务器响应的各种状态。其中,HTTP 302错误表示临时重定向,这意味着请求的资源已被临时移动到其他位置,并且服务器已经提供了新的URL,以便客户端可以重新发送请求。 了解HTTP 302错…

言简意赅的 el-table 跨页多选

步骤一 在<el-table>中:row-key"getRowKeys"和selection-change"handleSelectionChange" 在<el-table-column>中type"selection"那列&#xff0c;添加:reserve-selection"true" <el-table:data"tableData"r…

联邦蒸馏中的分布式知识一致性 | TIST 2024

联邦蒸馏中的分布式知识一致性 | TIST 2024 联邦学习是一种隐私保护的分布式机器学习范式&#xff0c;服务器可以在不汇集客户端私有数据的前提下联合训练机器学习模型。通信约束和系统异构是联邦学习面临的两大严峻挑战。为同时解决上述两个问题&#xff0c;联邦蒸馏技术被提…

前端非常好用的免费网页工具推荐(值得收藏)

1、iloveimg 可在线进行图片编辑、压缩、转换等功能&#xff0c;操作方便&#xff0c;完全免费 2、草料二维码 可在线进行文本、网站、文件、图片、微信等二维码生成 3、比特虫 在线制作网站 ico 图标 4、facicongrabber 免费网页 favicon 提取 5、bazhan.wang 在线扒站工…

Docker知识点整理

Docker和虚拟机技术的区别&#xff1a; 传统的虚拟机&#xff0c;可以虚拟出一条硬件&#xff0c;运行一个完整的操作系统&#xff0c;在这个操作系统上安装和运行所需的软件 容器内的应用可以直接运行在宿主 主机的内核中&#xff0c;容器没有自己的内核&#xff0c;也不用虚…

java导出excel通用工具(POI,类注解形式)

通过给类定义注解(设置名称&#xff0c;设置kv转换值)&#xff0c;然后利用设置的名称和传入的数据进行导出。 只需要在项目添加两个工具类就可以实现excel导出功能。 1、单sheet 步骤&#xff1a;1、根据业务需求定义导出的类&#xff0c;并设置表头名称。 …

【媒体开发】利用FFMPEG进行推拉流

目录 1. 下载并启动媒体服务 2. 使用 FFMPEG 拉流并推送到指定服务地址 3. 客户端拉流 1. 下载并启动媒体服务 MediaMTX&#xff0c;也即之前的rtsp-simple-server&#xff0c;是一个即用型、零依赖的实时媒体服务器和媒体代理&#xff0c;允许发布、读取、代理和记录视频和…

Web安全-SQL注入常用函数(二)

★★实战前置声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将其信息做其他用途&#xff0c;由用户承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、MySQL数据库构成 初始化安装MySQL数据库后(…

智能优化算法应用:基于模拟退火算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于模拟退火算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于模拟退火算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.模拟退火算法4.实验参数设定5.算法结果6.…

Android---Kotlin 学习007

集合可以方便你处理一组数据&#xff0c;也可以作为值参传给函数&#xff0c;和我们学过的其它变量类型一样&#xff0c;List、Set 和 Map 类型的变量也分为两类&#xff0c;只读和可变。 List创建与元素获取 通过 listOf() 函数创建一个 List 集合。 val listString : List&…

ShardingSphere数据分片之读写分离

1、概述 读写分离是一种常见的数据库架构&#xff0c;它将数据库分为主从库&#xff0c;一个主库&#xff08;Master&#xff09;用于写数据&#xff0c;多个从库&#xff08;Slave&#xff09;进行轮询读取数据的过程。主从库之间通过某种通讯机制进行数据的同步。 所以&…

React Native android环境搭建,使用夜神模拟器进行开发(适用于0.73+版本)

前言 本文基于&#xff1a;“react-native” : “^0.73.0” 1.安装 Node Node.js&#xff0c;下载时选择 > 18 版本 2.下载并安装 JDK Java SE Development Kit (JDK)&#xff0c;下载时选择 17 版本 安装 验证是否安装成功 打开命令提示符输入 javac -version 回车 3.…

re:Invent 产品体验与感受分享:Amazon ElastiCache Serverless 缓存的即时扩展

授权说明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在亚马逊云科技开发者社区、 知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道&#xff09;。 文章目录 前言产品介绍产品使用步骤1.创建缓存服务2.安全组开放访问权限…

【Python】解读a+=b 和 a=a+b是否一样?看完恍然大悟!

文章目录 前言一、可变对象和不可变对象总结 前言 在Python中&#xff0c;对于可变和不可变对象的行为差异是一个重要概念&#xff0c;特别是在涉及到和操作时。理解这一点对于编写高效且无误的代码至关重要。 一、可变对象和不可变对象 首先&#xff0c;让我们谈谈可变和不可…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion替换背景

在Stable Diffusion软件中,使用ControlNet+模型实现固定物体批量替换背景 出图的流程。 一、准备好图片 1.你需要准备好一些白底图或者透明底图用于训练模型。 2.你需要准备同样角度的其他背景色底图用于ControlNet勾线 3.注意检查你的图片尺寸,是否为1:1,…

离散型随机变量的分布律(也称概率质量函数:probability mass function, PMF)

设是一个离散型随机变量&#xff0c;可能的取值为&#xff0c;取各个值的概率记为&#xff1a; &#xff08;1&#xff09; 其中 并且&#xff0c; 公式&#xff08;1&#xff09;就称为离散型随机变量的分布律&#xff0c;也称概率质量函数&#xff1a;probability ma…

svn使用步骤

服务器端主要用来创建仓库&#xff0c;然后供客户端去访问与下载。 客户端&#xff1a; 图形化界面的使用&#xff1a;这里使用的是tortoise工具 1.创建一个文件夹作为自己的本地仓库目录 2.鼠标右键文件夹&#xff0c;在菜单中点击SVN checkout 3.找个图 这一步骤相当于git中…

最新版xposed编写教程

环境&#xff1a; andriod studio2023.1.1 jdk17 gradle8.2 流程&#xff1a; 1.新建项目&#xff0c;选empty views activity即可&#xff08;其他也可&#xff09; 2.语言选java&#xff0c;其他路径名称等暗战自己需要随便改&#xff0c;然后点击finish 3.修改AndroidMan…