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

目录

前言

一、绘制散点图

二、数据准备

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

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

总结


🌈嗨!我是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':
        break
    else:
        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)作为评估指标来衡量模型的拟合程度。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Github 2023-12-15 开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-15统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3非开发语言项目3JavaScript项目1Python项目1Rust项目1PHP项目1 基于项目的学习 创建周期&am…

Python-折线图可视化

折线图可视化 1.JSON数据格式2.pyecharts模块介绍3.pyecharts快速入门4.创建折线图 1.JSON数据格式 1.1什么是JSON JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据JSON本质上是一个带有特定格式的字符串 1.2主要功能json就是一种在各个编程语言中流…

Splashtop 与 Swif 携手通过集成的远程桌面访问简化设备管理

2023年12月14日 加利福尼亚州库比蒂诺 安全远程访问解决方案领域的开拓者 Splashtop 今日宣布与 Swif——设备管理和安全领域先驱建立全新集成合作伙伴关系。此次合作推动形成了简单而强大的解决方案,该解决方案可满足中小企业和大型企业不断变化的需求&#xff0c…

开源基础底座:IT系统中角色管理的定义与应用

在IT系统中,角色管理是指管理和控制系统用户的角色和权限的过程。角色是指用户在系统中扮演的特定身份或角色,例如管理员、操作员、审计员等。每个角色都可以被分配一组特定的权限和访问权限,以决定其在系统中可以执行和访问的功能和数据。 …

【数组Array】力扣-304 二维区域和检索 - 矩阵不可变

目录 题目描述 解题过程 labuladong题解 题目描述 给定一个二维矩阵 matrix,以下类型的多个请求: 计算其子矩形范围内元素的总和,该子矩阵的 左上角 为 (row1, col1) ,右下角 为 (row2, col2) 。 实现 NumMatrix 类&#xf…

C语言—每日选择题—Day42

第一题 1. 下面程序输出的结果是&#xff08;&#xff09; #include <stdio.h> int main () {int x;x printf("I See, Sea in C");printf("x%d" , x); } A&#xff1a;2 B&#xff1a;随机值 C&#xff1a;都不是 D&#xff1a;15 答案及解析 D p…

指针相关知识(入门)

通过前面的学习&#xff0c;我们已经对c语言有了一个初步的认识 接下来&#xff0c;我们继续学习。进入下一个阶段&#xff0c;指针。这个部分的知识较多&#xff0c;可能学习起来有些吃力&#xff0c;但是&#xff0c;从简到难&#xff0c;我们慢慢学习。 一.指针的概念 导入…

3.electron之vue3.0的桌面应用程序

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

代码随想录27期|Python|Day15|二叉树|层序遍历|对称二叉树|翻转二叉树

本文图片来源&#xff1a;代码随想录 层序遍历&#xff08;图论中的广度优先遍历&#xff09; 这一部分有10道题&#xff0c;全部可以套用相同的层序遍历方法&#xff0c;但是需要在每一层进行处理或者修改。 102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 层…

C++入门(浅谈类和对象)

1 命名空间 1-1命名空间的定义 定义命名空间的目的是为了不与标识符的名称进行冲突&#xff0c;命名空间中可以定义函数&#xff0c;变量&#xff0c;类型。 比如&#xff1a;这里的rand和strlens其实是函数&#xff0c;在命名空间中可以避免与全局作用域中的rand函数和strlen…

编程性能调优方案

微信公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、字符串与集合性能优化 1.String 对象的实现 在 Java 语言中&#xff0c;Sun 公司的工程师们对 String 对象做了大量的优化&#xff0c;来节…

2024测试开发面试题完整版本(附答案)

目录 1. 什么是软件测试&#xff0c; 谈谈你对软件测试的了解 2. 我看你简历上有写了解常见的开发模型和测试模型, 那你跟我讲一下敏捷模型 3. 我看你简历上还写了挺多开发技能的, 那你给我讲讲哈希表的实现流程 4. 谈一谈什么是线程安全问题, 如何解决 5. 既然你选择走测…

Java_泛型

泛型类 认识泛型 所谓泛型指的是&#xff0c;在定义类、接口、方法时&#xff0c;同时声明了一个或者多个类型变量&#xff08;如&#xff1a;< E >&#xff09;&#xff0c;称为泛型类、泛型接口、泛型方法、它们统称为泛型。 作用:泛型提供了在编译阶段约束所能操作的…

f盘隐藏的文件夹怎么找出来?介绍几种有效方法

在计算机中&#xff0c;我们经常会遇到隐藏的文件或文件夹&#xff0c;在F盘中隐藏的文件夹也不例外。隐藏的文件夹可能是由系统生成的&#xff0c;或者是用户自行设定的隐私文件夹。无论是因为误操作还是出于其他原因&#xff0c;如果你想找出F盘中的隐藏文件夹&#xff0c;本…

壹[1],函数:ReadImage

C形式 LIntExport void ReadImage( HObject* Image, const HTuple& FileName); //参数1&#xff1a;读取的Image //参数2&#xff1a;图片地址//备注说明&#xff1a; //头文件&#xff1a;halconcpp/HOperatorSet.h //命名空间&#xff1a;namespace HalconCpp C#形式 …

perl脚本中使用eval函数执行可能有异常的操作

perl脚本中有时候执行的操作可能会引发异常&#xff0c;为了直观的说明&#xff0c;这里举一个json反序列化的例子&#xff0c;脚本如下&#xff1a; #! /usr/bin/perl use v5.14; use JSON; use Data::Dumper;# 读取json字符串数据 my $json_str join(, <DATA>); # 反…

SpringMVC的文件上传、多文件上传

概念&#xff1a;上传/下载应用 对于上传功能&#xff0c;我们在项目中是经常会用到的&#xff0c;比如用户注册的时候&#xff0c;上传用户头像&#xff0c;这个时候就会使用到上传的功能。而对于下载&#xff0c;使用场景也很常见&#xff0c;比如我们项目中有个使用说明是是…

如何提升数据结构方面的算法能力?

谈及为什么需要花时间学算法&#xff0c;我至少可以列举出三个很好的理由。 (1)性能&#xff1a;选择正确的算法可以显著提升应用程序的速度。仅就搜索来说&#xff0c;用二分查找替 换线性搜索就能为我们帶来巨大的收益。 (2)安全性&#xff1a;如果你选用了错误的算法&…

小小手表探索更多 好玩伴也是好帮手

华为儿童手表 5X 不仅是孩子的好玩伴&#xff0c;也是家长的好帮手。全能形态让小小手表探索更多&#xff0c;高清双摄记录美好&#xff0c;离线定位随时掌握&#xff0c;绿色纯净守护成长&#xff0c;让孩子享受科技带来的安全与乐趣。

vue3.0项目搭建

一、安装vue3脚手架 卸载vue2脚手架 npm uninstall -g vue-cli清除缓存 npm cache clen --force安装最新脚手架 npm install -g vue/cli查看脚手架版本 vue -V 二、构建项目 创建项目 vue create 项目名选择配置 自定义配置&#xff0c;回车 上下键选择Linter / Formatter&a…