(八)机器学习 - 线性回归

线性回归(Linear Regression)是一种统计学方法,用于建立一个或多个自变量(解释变量)与因变量(响应变量)之间的线性关系。线性回归的目的是通过最小化预测误差来找到最佳的线性拟合模型,从而可以用来预测因变量的值或理解自变量与因变量之间的关系。

线性回归使用数据点之间的关系在所有数据点之间画一条直线。

这条线可以用来预测未来的值。

线性回归的基本形式可以表示为:

y = β0​ + β1​x1 ​+ β2​x2 ​+ ⋯ + βn​xn ​+ ϵ 

其中:

  • yy 是因变量。
  • x1,x2,…,xnx1​,x2​,…,xn​ 是自变量。
  • β0β0​ 是截距项(intercept)。
  • β1,β2,…,βnβ1​,β2​,…,βn​ 是回归系数(regression coefficients)。
  • ϵϵ 是误差项(error term),表示模型无法解释的随机误差。

线性回归的类型包括:

  1. 简单线性回归(Simple Linear Regression):只有一个自变量和一个因变量。
  2. 多元线性回归(Multiple Linear Regression):有多个自变量和一个因变量。

线性回归的参数估计通常使用最小二乘法(Least Squares Method),该方法通过最小化误差项的平方和来找到最佳的回归系数。最小二乘法的数学表达式为:

 其中 mm 是数据点的数量。

线性回归模型的评估通常使用以下指标:

  • 决定系数(R-squared):表示模型解释的因变量的方差比例。
  • 调整后的决定系数(Adjusted R-squared):考虑了自变量数量对决定系数的影响。
  • 均方误差(Mean Squared Error, MSE):表示预测值与实际值之间的平均平方误差。
  • 均方根误差(Root Mean Squared Error, RMSE):MSE的平方根,表示预测值与实际值之间的平均误差。

Python 提供了一些方法来查找数据点之间的关系并绘制线性回归线。 

例子:

1、首先绘制散点图:

import matplotlib.pyplot as pltx = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]plt.scatter(x, y)
plt.show()

结果:

 2、导入 scipy 并绘制线性回归线: 

// 导入所需模块:
import matplotlib.pyplot as plt
from scipy import stats// 创建表示 x 和 y 轴值的数组:
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]// 执行一个方法,该方法返回线性回归的一些重要键值:
slope, intercept, r, p, std_err = stats.linregress(x, y)// 创建一个使用 slope 和 intercept 值的函数返回新值。这个新值表示相应的 x 值将在 y 轴上放置的位置:
def myfunc(x):return slope * x + intercept// 通过函数运行 x 数组的每个值。这将产生一个新的数组,其中的 y 轴具有新值:
mymodel = list(map(myfunc, x))// 绘制原始散点图:
plt.scatter(x, y)
plt.plot(x, mymodel)// 显示图:
plt.show()

结果:

R-Squared 

重要的是要知道 x 轴的值和 y 轴的值之间的关系有多好,如果没有关系,则线性回归不能用于预测任何东西。

该关系用一个称为 r 平方(r-squared)的值来度量。

r 平方值的范围是 0 到 1,其中 0 表示不相关,而 1 表示 100% 相关。

Python 和 Scipy 模块将为您计算该值,您所要做的就是将 x 和 y 值提供给它:

 示例:

我的数据在线性回归中的拟合度如何?

from scipy import statsx = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]slope, intercept, r, p, std_err = stats.linregress(x, y)print(r)

 结果: -0.76 表明存在某种关系,但不是完美的关系,但它表明我们可以在将来的预测中使用线性回归。

预测未来价值

我们可以使用收集到的信息来预测未来的值。

例如:让我们尝试预测一辆拥有 10 年历史的汽车的速度。

为此,我们需要与上例中相同的 myfunc() 函数:

def myfunc(x):return slope * x + intercept

例子:

预测一辆有 10年车龄的汽车的速度: 

from scipy import statsx = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]slope, intercept, r, p, std_err = stats.linregress(x, y)def myfunc(x):return slope * x + interceptspeed = myfunc(10)print(speed)

该例预测速度为 85.6,我们也可以从图中读取:

糟糕的拟合度? 

 示例:

x 和 y 轴的这些值将导致线性回归的拟合度非常差:

import matplotlib.pyplot as plt
from scipy import statsx = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]slope, intercept, r, p, std_err = stats.linregress(x, y)def myfunc(x):return slope * x + interceptmymodel = list(map(myfunc, x))plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

结果:

以及 r-squared 值? 

您应该得到了一个非常低的 r-squared 值。

import numpy
from scipy import statsx = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]slope, intercept, r, p, std_err = stats.linregress(x, y)print(r)

结果:0.013 表示关系很差,并告诉我们该数据集不适合线性回归。 

应用领域

  1. 经济学:线性回归在经济学中被用于预测市场趋势和商品价格,分析不同因素对价格变动的影响,如利率、通货膨胀率与家庭消费的关系,以及预测未来的消费趋势。

  2. 市场营销:在市场营销领域,线性回归被用于销售额预测和客户行为分析,帮助企业理解广告投资与销售收入之间的关系。

  3. 生物医学研究:线性回归在生物医学领域中发挥着重要作用,如评估不同治疗方法对患者健康指标的影响,分析药物剂量与患者恢复速度之间的关系。

  4. 社会科学:线性回归被广泛应用于教育、心理学和社会学等多个方面,探讨教育水平、职业发展与收入水平之间的相关性,为制定相关政策提供科学依据。

  5. 工程领域:在工程领域,线性回归被用于系统性能预测和故障诊断等。

  6. 金融学:线性回归在金融学中用于预测经济指标,如消费支出和收入之间的关系。

  7. 医疗:线性回归在医疗领域中用于疾病风险预测和药物效果评估。

  8. 物流和电商:线性回归在物流和电商领域中也有应用,如用于库存管理和需求预测。

END.

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

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

相关文章

huggingface NLP-微调一个预训练模型

微调一个预训练模型 1 预处理数据 1.1 处理数据 1.1.1 fine-tune 使用tokenizer后的token 进行训练 batch tokenizer(sequences, paddingTrue, truncationTrue, return_tensors"pt")# This is new batch["labels"] torch.tensor([1, 1])optimizer A…

Unity NTPComponent应用, 实现一个无后端高效获取网络时间的组件

无后端高效获取网络时间的组件 废话不多说,直接上源码m_NowSerivceTime 一个基于你发行游戏地区的时间偏移, 比如北京时区就是 8, 巴西就是-3,美国就是-5using Newtonsoft.Json; 如果这里报错, 就说明项目没有 NewtonsoftJson插件…

华为ensp中nat server 公网访问内网服务器

作者主页:点击! ENSP专栏:点击! 创作时间:2024年4月15日17点30分 💯趣站推荐💯 前些天发现了一个巨牛的🤖人工智能学习网站,通俗易懂,风趣幽默,…

R语言学习笔记-1

1. 基础操作和函数 清空环境:rm(list ls()) 用于清空当前的R环境。 打印输出:print("Hello, world") 用于输出文本到控制台。 查看已安装包和加载包: search():查看当前加载的包。install.packages("package_na…

二、FIFO缓存

FIFO缓存 1.FIFO缓存介绍2.FIFO缓存实现3.FIFO缓存总结 1.FIFO缓存介绍 FIFO(First-In-First-Out)缓存 是一种简单的缓存淘汰策略,它基于先进先出的原则来管理数据。当缓存达到容量限制并需要淘汰元素时,最先进入缓存的元素会被移…

Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点

Spring Cloud与Spring Cloud Alibaba:全面解析与核心要点 一、引言 在当今的分布式系统开发领域,Spring Cloud和Spring Cloud Alibaba都是极为重要的框架。它们为构建大规模、高可用、分布式的应用系统提供了丰富的工具和组件。本文将深入探讨Spring C…

账号下的用户列表表格分析

好的,这是您提供的 el-table 组件中所有列的字段信息,以表格形式展示: 列标题 (label)字段属性 (prop)对齐方式 (align)宽度 (width)是否可排序 (sortable)说明IDidcenter100否管理员的唯一标识符头像avatarcenter90否管理员的头像 URL 或路…

GPT-SoVITS语音合成模型部署及使用

1、概述 GPT-SoVITS是一款开源的语音合成模型,结合了深度学习和声学技术,能够实现高质量的语音生成。其独特之处在于支持使用参考音频进行零样本语音合成,即使没有直接的训练数据,模型仍能生成相似风格的语音。用户可以通过微调模…

TongWe7.0-东方通TongWeb控制台无法访问 排查

问题描述:无法访问TongWeb的控制台 逐项排查: 1、控制台访问地址是否正确:http://IP:9060/console #IP是服务器的实际IP地址 2、确认TongWeb进程是否存在,执行命令:ps -ef|grep tongweb 3、确认TongWeb服务启动…

研发文档管理系统:国内外9大选择比较

文章主要对比了9款国内外研发文档管理系统:1.PingCode; 2. Worktile; 3. 飞书; 4. 石墨文档; 5. 腾讯文档; 6. 蓝湖; 7. Confluence; 8. Notion; 9. Slab。 在企业研发过…

【ABAP SAP】开发-BUG修补记录_采购申请打印时品名规格品牌为空

项目场景: TCODE:自开发程序ZMMF004 采购申请打印 问题描述 ZMMF004打印的时候,有的采购申请的品名、规格、品牌为空 原因分析: 1、首先我通过写SQL语句查底表来看这几条采购申请本身有无品名、规格、品牌 SQL语句如下,只需修…

Ubuntu 20.04 24.04 双网卡 Bond 配置指南

前言:在现代服务器管理中,网络的稳定性和可靠性至关重要。为了提高网络的冗余性和负载能力,我们经常需要配置多个网络接口以实现链路聚合或故障转移。Ubuntu系统自17.10版本起,引入了Netplan作为新的网络配置抽象化工具&#xff0…

OCR实践—PaddleOCR

有个项目需求,对拍摄的问卷图片,进行自动得分统计【得分是在相应的分数下面打对号】,输出到excel文件 原始问卷文件见下图,真实的图片因使用手机拍摄的图片,存在一定的畸变, 技术调研 传统方法 传统方法…

ubuntu+ros新手笔记(五):初探anaconda+cuda+pytorch

深度学习三件套:初探anacondacudapytorch 系统ubuntu22.04 ros2 humble 1.初探anaconda 1.1 安装 安装过程参照【详细】Ubuntu 下安装 Anaconda 1.2 创建和删除环境 创建新环境 conda create -n your_env_name pythonx.x比如我创建了一个名为“py312“的环境…

【测试】Pytest

建议关注、收藏! 目录 功能pytest 自动化测试工具。 功能 单元测试:用于验证代码的最小功能单元(如函数、方法)的正确性。 简单的语法:不需要继承特定类或使用复杂的结构。断言语句简化。 自动发现测试:P…

Unity性能优化---使用SpriteAtlas创建图集进行批次优化

在日常游戏开发中,UI是不可缺少的模块,而在UI中又使用着大量的图片,特别是2D游戏还有很多精灵图片存在,如果不加以处理,会导致很高的Batches,影响性能。 比如如下的例子: Batches是9&#xff0…

环境和工程搭建

1.案例介绍 1.1 需求 实现⼀个电商平台 该如何实现呢? 如果把这些功能全部写在⼀个服务⾥, 这个服务将是巨⼤的. 巨多的会员, 巨⼤的流量, 微服务架构是最好的选择. 微服务应⽤开发的第⼀步, 就是服务拆分. 拆分后才能进⾏"各⾃开发" 1.2 服务拆分 拆分原则 …

解决Jmeter HTTP Cookie管理器cookie不生效

解决Jmeter HTTP Cookie管理器cookie不生效问题 解决Jmeter HTTP Cookie管理器cookie不生效问题1、设置Jmeter HTTP Cookie管理器cookie后,发起的请求显示[no cookies]jmeter问题复现:这里同样使用postman进行重试,发现是可以正常获取数据的&…

操作系统课后习题2.2节

操作系统课后习题2.2节 第1题 CPU的效率指的是CPU的执行速度,这个是由CPU的设计和它的硬件来决定的,具体的调度算法是不能提高CPU的效率的; 第3题 互斥性: 指的是进程之间的同步互斥关系,进程是一个动态的过程&#…

二叉搜索树 平衡树(c嘎嘎版)

定义: 二叉搜索树是一种二叉树的树形数据结构,其定义如下: 空树是二叉搜索树。 若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。 若二叉搜索树的右子树不为空,则其右子树上所有点的附加权值均大于其根节点的值。 二叉搜索树的左右子树均为…