线性回归和预测

news2025/1/30 16:24:12

目录

1、线性回归

 2、R-Squared


1、线性回归

在机器学习和统计建模中,这种关系用于预测未来事件的结果

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

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

在机器学习中,预测未来非常重要。比如房价、股票等预测

Python 提供了一些方法来查找数据点之间的关系并绘制线性回归线。下面展示如何使用这些方法而不是通过数学公式。

在下面的示例中,x 轴表示车龄,y 轴表示速度。我们已经记录了 13 辆汽车通过收费站时的车龄和速度。让我们看看我们收集的数据是否可以用于线性回归

首先通过python绘制散点图如下

import matplotlib.pyplot as plt

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]

plt.scatter(x, y)
plt.show()

 然后导入 scipy 并绘制线性回归线

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]

执行一个方法,使用了 `scipy` 库中的 `stats` 模块中的 `linregress()` 函数对 `x` 和 `y` 数组进行了线性回归分析,并将分析结果保存在 5 个变量中,分别是 `slope`、`intercept`、`r`、`p` 和 `std_err`。

`slope`:回归系数,表示自变量 `x` 对因变量 `y` 的影响程度。它的值为回归直线的斜率,可以用来衡量 `x` 和 `y` 之间的线性关系强度。如果 `slope` 的值为正数,则表示 `x` 和 `y` 之间呈正相关关系;如果 `slope` 的值为负数,则表示 `x` 和 `y` 之间呈负相关关系;如果 `slope` 的值为 0,则表示 `x` 和 `y` 之间没有线性关系。

`intercept`:截距,表示回归直线和 y 轴的交点。它的值为回归直线在 y 轴上的截距,用于计算当 `x` 为 0 时,`y` 的预测值

`r`:相关系数(拟合度),表示 `x` 和 `y` 之间的相关性强度,取值范围为 [-1, 1]。它的值越接近 1 或 -1,表示 `x` 和 `y` 之间线性关系越强;如果 `r` 的值为 0,则表示 `x` 和 `y` 之间没有线性关系

`p`:p 值,表示回归系数是否显著。如果 `p` 的值小于预设的显著性水平(通常为 0.05),则表明回归系数具有显著性,即 `x` 对 `y` 的影响不是由于随机因素引起的

`std_err`:标准误差,表示回归系数的估计误差。它的值越小,表示回归系数的估计越准确

slope, intercept, r, p, std_err = stats.linregress(x, y)

创建一个使用 slope 和 intercept 值的函数返回新值。这个新值表示相应的 x 值将在 y 轴上放置的位置(说白了就是使用一次函数求变量y的值)

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

通过map(function, iterable, ...)函数迭代x数组,并将x数组中的每一个元素用于function函数。其中`map()` 函数返回的是一个迭代器,其中包含了对输入的可迭代对象中每个元素应用指定函数后得到的结果。具体来说,`map()` 函数会依次对输入的可迭代对象中的每个元素应用指定函数,然后将得到的结果依次存储在生成的迭代器中。

然后使用list函数将map函数中的迭代器转化为列表。这是因为这个迭代器包含了对原始可迭代对象中每个元素应用 `function` 函数后的结果。但是,迭代器只能逐个元素进行访问,而不能像列表一样进行切片、索引等操作。所以要使用list函数将map函数中的迭代器转化为列表(数组)

通过函数运行 x 数组的每个值。这将产生一个新的数组,其中的 y 轴具有新值

mymodel = list(map(myfunc, x))

绘制原始散点图

plt.scatter(x, y)

绘制线性回归线

plt.plot(x, mymodel)

plt.show()

上述总的代码如下和结果如下

import matplotlib.pyplot as plt
from scipy import stats

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)

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

mymodel = list(map(myfunc, x))

plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

 2、R-Squared

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

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

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

打印上面的数据再线性回归中的拟合度 r,如果在正常范围内,表明存在某一种关系,但它不是完美的关系,但它表明我们可以在将来的预测中使用线性回归

from scipy import stats

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)

print(r)

使用上述线性回归线预测具有 50 年寿命的汽车速度如下

from scipy import stats

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)

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

speed = myfunc(50)

print(speed)

速度为 15.54  ,基本符合正常认知

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

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

相关文章

分布式全局唯一id实现-4 springCloud-MyBatis-Plus集成美团分布式全局id(leaf)

前言:美团的leaf集成了db分段生成id和雪花算法生成分布式id,本文对其实现部分细节展开讨论,leaf 的具体实现请参考:https://tech.meituan.com/MT_Leaf.html; 1 使用db分段id: leaf 的分段id本质上是使用了…

5。STM32裸机开发(5)

嵌入式软件开发学习过程记录,本部分结合本人的学习经验撰写,系统描述各类基础例程的程序撰写逻辑。构建裸机开发的思维,为RTOS做铺垫(本部分基于库函数版实现),如有不足之处,敬请批评指正。 &…

二本4年测试经验,3面阿里艰苦经历(定薪25K),上岸那天我哭了...

前言 4月准备跳槽,先后面试了各大小公司,拿了一些小offer,面试的公司大部分都能过,但是做人总是要用梦想吧,没有梦想和咸鱼有什么区别,最终把目标放在了阿里,准备了大概3个月的时间&#xff0c…

mysql45讲笔记

不一定要都学,有些感觉用不到,有选择的学!!! 文章目录 mysql45讲1.mysql基础架构2.mysql日志系统3.事务隔离4.索引类型1.哈希表2.有序数组3.二叉搜索树4.B 树 5.索引重点概念覆盖索引索引下推最左前缀原则 6.全局锁表级…

ERP系统是什么?ERP实施顾问怎么做?

ERP实施顾问怎么做? 首先想要从事相关行业,必须先了解什么是ERP,ERP系统功能模块是怎样的,而后才能进行ERP实施顾问的工作。 一、ERP是什么 ERP系统主要是干什么的?ERP系统,简单理解就是一套记账、做账软…

“全球金融科技大会——中国金融业开源技术应用与发展论坛”在北京举行

3月28日,“全球金融科技大会——中国金融业开源技术应用与发展论坛”在北京新动力金融科技中心举行。 会议现场 人民银行科技司二级巡视员杨富玉,开放原子开源基金会理事长孙文龙,中国金电党委书记、董事长周逢民为大会致辞。北京市西城区区…

(转载)MATLAB智能算法30个案例分析(3)——基于遗传算法的BP神经网络优化算法

1 理论基础 1.1 BP神经网络概述 BP网络是一类多层的前馈神经网络。它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法。BP算法是Rumelhart等人在1986年提出来的。由于它的结构简单,可调整的…

docker+redis哨兵模式(一主二从三哨兵)- docker-compose

一、docker-compose 安装: sudo apt-get update #安装最新的docke-ce sudo apt-get install docker-ce # 下载最新的docker-compose curl -L https://github.com/docker/compose/releases/download/1.25.0-rc4/docker-compose-uname -s-uname -m -o /usr/local…

面试字节,过关斩将直接干到 3 面,结果被吊打了?

人人都有大厂梦,对于软件测试员来说,BAT 为首的一线互联网公司肯定是自己的心仪对象,毕竟能到这些大厂工作,不仅薪资高待遇好,而且能力技术都能够得到提升,最关键的是还能够给自己镀上一层金,让…

网络通信概述 -了解网络编程,什么是ip和端口,url

网络:网络就是一种辅助双方或者多方能够连接到一起的工具。 左:单机游戏(无网络) 右:网络游戏 网络编程:网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信。…

一名8年测试工程师,因为偷偷接私活被····

接私活 对程序员这个圈子来说是一个既公开又隐私的话题,不说全部,应该大多数程序员都有过想要接私活的想法,当然,也有部分得道成仙的不主张接私活。但是很少有人在公开场合讨论私活的问题,似乎都在避嫌。就跟有人下班后…

【WAF绕过】姿势总结(一)

【WAF绕过】姿势总结(一) 方法 Payload 编码 1、进行url编码(少数waf不会进行URL解码,部分waf进行一次url解码>可对payload进行二次url编码) 2、Unicode编码:单引号 %u0027、%u02b9、%u02bc 3、部分十六进制编…

Python可视化神器Seaborn入门系列——kdeplot

Seaborn是基于matplotlib的Python可视化库。 它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。但应强调的是,应该…

ChatGPT 火爆全球,我们能抓住的下一个风口在哪?

中国互联网行业正面临着巨大的压力和挑战,但也孕育着新的发展机遇。当下正值ChatGPT火爆,整个互联网行业充满了机遇和挑战,身处其中的我们能抓住什么呢? 思你所思,帮大家整理出了五大风口!希望对大家有所帮…

html SpeechSynthesis文字转语音

web 页面使用speechSynthesis实现文字转语音 网页语音 API 的SpeechSynthesis 接口是语音服务的控制接口;它可以用于获取设备上关于可用的合成声音的信息,开始、暂停语音,或除此之外的其他命令。 属性 SpeechSynthesis 也从它的父接口继承属…

腾讯云服务器选择购买流程(一步步详细配置)

腾讯云服务器购买流程直接在官方活动上选择比较合适,在云服务器CVM或轻量应用服务器页面自定义购买费用比较贵,但是自定义购买云服务器CPU内存带宽配置选择范围广,活动上购买只能选择固定的活动机,选择范围窄,但是云服…

数据结构 -- 队列

1、Queue队列 先进先出 2、双端队列 --- Deque Deque的实现类是LinkedList,ArrayDeque,LinkedBlockingDeque。 ArrayDeque底层实现是数组,LinkedList底层实现是链表。 双端队列可以作为普通队列使用,也可以作为栈使用。Java官方推荐使用Deque替代Stac…

【flask + sqlalchemy】连接clickhouse数据库的踩的坑,在这里记录一下

文章目录 前言1. 发现问题2. 复盘2.1 上面试一次错误的问题记录2.2 flask使用clickhouse2.2.1 配置2.2.2 orm2.3 如何插入数据 前言 使用clickhouse有一段时间了,现在要重构一个项目,重度依赖clickhouse,现在终于理顺了,记录一下…

数据库管理-第七十七期 再探分布式(20230523)

数据库管理 2023-05-23 第七十七期 再探分布式1 单机分布式2 分布式改造3 尝试改造一个订单系统3.1 表类型和分片键选择3.2 扩展分片3.3 业务扩展 总结 第七十七期 再探分布式 上一次系统探讨分布式数据库还是在第三十六期,经过大半年的“进步”加上中间参加了不少…

Linux启动过程的问题解决

文章目录 Linux启动过程的问题解决忘记root密码的解决因文件系统错误而无法启动 Linux启动过程的问题解决 当我们在使用Linux时,可能会因为某些设置或突然断电等原因导致文件系统出现错误,从而导致Linux无法正常启动。但这并不意味着我们需要重新安装系…