Python简单线性回归算法实现及应用示例

简单线性回归,是一种使用单个特征预测响应的方法。 它是机器学习爱好者了解的最基本的机器学习模型之一。 在线性回归中,我们假设两个变量,即因变量和自变量是线性相关的。 因此,我们尝试找到一个线性函数,作为特征或自变量 (x) 的函数,尽可能准确地预测响应值 (y)。 让我们考虑一个数据集,其中每个特征 x 都有一个响应 y 值:
x 0 1 2 3 4 5 6 7 8 9 y 1 3 2 5 7 8 8 9 10 12 \begin{array}{|c|c|c|c|c|c|c|c|c|c|c|} \hline \mathbf{x} & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\ \hline \mathbf{y} & 1 & 3 & 2 & 5 & 7 & 8 & 8 & 9 & 10 & 12 \\ \hline \end{array} xy0113223547586879810912
为了一般性,我们定义:

x 作为特征向量,比如 x = [ x − 1 , x − 2 , … , x − n ] x=\left[x_{-} 1, x_{-} 2, \ldots, x_{-} n\right] x=[x1,x2,,xn]

y 作为响应向量,比如 y = [ y − 1 , y − 2 , … , y − n ] y=\left[y_{-} 1, y_{-} 2, \ldots, y_{-} n\right] y=[y1,y2,,yn]

对于 n 个观测值(在上面的示例中,n=10)。上述数据集的散点图如下所示:

现在,任务是在上面的散点图中找到一条最适合的线,以便我们可以预测任何新特征值的响应。 (即数据集中不存在 x 的值)这条线称为回归线。 回归线的方程表示为:
h ( x i ) = β 0 + β 1 x i h\left(x_i\right)=\beta_0+\beta_1 x_i h(xi)=β0+β1xi

  • h ( x i ) h\left(x_i\right) h(xi)表示第 i 个观测值的预测响应值。
  • β 0 \beta_0 β0 β 1 \beta_1 β1是回归系数,分别表示回归线的 y 截距和斜率。

为了创建我们的模型,我们必须“学习”或估计回归系数 β 0 \beta_0 β0 β 1 \beta_1 β1 的值。一旦我们估计了这些系数,我们就可以使用该模型来预测响应!

在本文中,我们将使用最小二乘法原理。
y i = β 0 + β 1 x i + ε i = h ( x i ) + ε i ⇒ ε i = y i − h ( x i ) y_i=\beta_0+\beta_1 x_i+\varepsilon_i=h\left(x_i\right)+\varepsilon_i \Rightarrow \varepsilon_i=y_i-h\left(x_i\right) yi=β0+β1xi+εi=h(xi)+εiεi=yih(xi)
这里, ε i \varepsilon_i εi 是第 i 个观测值的残差。因此,我们的目标是最小化总残差。我们将平方误差或成本函数 J 定义为:
J ( β 0 , β 1 ) = 1 2 n ∑ i = 1 n ε i 2 J\left(\beta_0, \beta_1\right)=\frac{1}{2 n} \sum_{i=1}^n \varepsilon_i^2 J(β0,β1)=2n1i=1nεi2
我们的任务是找到使 J ( β 0 , β 1 ) J\left(\beta_0, \beta_1\right) J(β0,β1) 最小的 β 0 \beta_0 β0 β 1 \beta_1 β1 的值!不涉及数学细节,我们在这里展示结果:
β 1 = S S x y S S x : x β 0 = y ˉ − β 1 x ˉ \begin{gathered} \beta_1=\frac{S S_{x y}}{S S_{x: x}} \\ \beta_0=\bar{y}-\beta_1 \bar{x} \end{gathered} β1=SSx:xSSxyβ0=yˉβ1xˉ
其中 S S x y S S_{x y} SSxy 是 y 和 x 的交叉偏差之和:
S S x y = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) = ∑ i = 1 n y i x i − n x ˉ y ˉ S S_{x y}=\sum_{i=1}^n\left(x_i-\bar{x}\right)\left(y_i-\bar{y}\right)=\sum_{i=1}^n y_i x_i-n \bar{x} \bar{y} SSxy=i=1n(xixˉ)(yiyˉ)=i=1nyixinxˉyˉ
S S x x S S_{x x} SSxx 是 x 的偏差平方和:
S S x x = ∑ i = 1 n ( x i − x ˉ ) 2 = ∑ i = 1 n x i 2 − n ( x ˉ ) 2 S S_{x x}=\sum_{i=1}^n\left(x_i-\bar{x}\right)^2=\sum_{i=1}^n x_i^2-n(\bar{x})^2 SSxx=i=1n(xixˉ)2=i=1nxi2n(xˉ)2
我们可以使用Python语言来学习线性回归模型的系数。为了绘制输入数据和最佳拟合线,我们将使用 matplotlib 库。它是最常用的用于绘制图表的 Python 库之一。

import numpy as np
import matplotlib.pyplot as pltdef estimate_coef(x, y):# number of observations/pointsn = np.size(x)# mean of x and y vectorm_x = np.mean(x)m_y = np.mean(y)# calculating cross-deviation and deviation about xSS_xy = np.sum(y*x) - n*m_y*m_xSS_xx = np.sum(x*x) - n*m_x*m_x# calculating regression coefficientsb_1 = SS_xy / SS_xxb_0 = m_y - b_1*m_xreturn (b_0, b_1)def plot_regression_line(x, y, b):# plotting the actual points as scatter plotplt.scatter(x, y, color = "m",marker = "o", s = 30)# predicted response vectory_pred = b[0] + b[1]*x# plotting the regression lineplt.plot(x, y_pred, color = "g")# putting labelsplt.xlabel('x')plt.ylabel('y')# function to show plotplt.show()def main():# observations / datax = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])y = np.array([1, 3, 2, 5, 7, 8, 8, 9, 10, 12])# estimating coefficientsb = estimate_coef(x, y)print("Estimated coefficients:\nb_0 = {} \\nb_1 = {}".format(b[0], b[1]))# plotting regression lineplot_regression_line(x, y, b)if __name__ == "__main__":main()

输出:

Estimated coefficients:
b_0 = -0.0586206896552
b_1 = 1.45747126437

多元线性回归

Python简单线性回归建立电视广播报纸销售额模型

Python简单线性回归分析职场经验和薪水关系

TensorFlow.js创建简单线性回归

参阅 - 亚图跨际

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

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

相关文章

4.5-容器之间的link

我们在实际项目中可能会有种需求,假如我们有个后台项目,它要访问数据库,比如MySQL,它想要访问数据库,就需要数据库的ip和端口。如果有两个容器,一个容器启动的是数据库的MySQL服务,另一个容器启…

时间序列分析【python代码实现】

时间序列分析是一种用于建模和分析时间上连续观测的统计方法。 它涉及研究数据在时间维度上的模式、趋势和周期性。常见的时间序列分析包括时间序列的平稳性检验、自相关性和部分自相关性分析、时间序列模型的建立和预测等。 下面是一个使用Python实现时间序列分析的示例&…

通过分析波形,透彻理解 UART 通信

UART是一种异步全双工串行通信协议,由 Tx 和 Rx 两根数据线组成,因为没有参考时钟信号,所以通信的双方必须约定串口波特率、数据位宽、奇偶校验位、停止位等配置参数,从而按照相同的速率进行通信。 异步通信以一个字符为传输单位…

Vue修改密码功能的源代码

基本需求 输入框不能为空 旧密码表单提交时必须正确 两次输入新密码一致 限定新密码的复杂度&#xff0c;这里是长度在 6 到 20 个字符 <template><el-form ref"form" :model"user" :rules"rules" label-width"80px"><…

给企业做公众号运营你都有哪些宝贵经验?

运营企业公众号需要长期的坚持和不断的创新&#xff0c;如何运营好一个企业公众号&#xff0c;使其成为企业与受众互动、传递价值、提升品牌形象的平台&#xff0c;是许多企业所面临的挑战。但只要不断学习&#xff0c;总结经验&#xff0c;就一定能够找到适合自己企业的公众号…

数据集笔记 :PEMS-BAY

数据地址&#xff1a;DCRNN - Google 云端硬盘 各station 位置&#xff1a;DCRNN/data/sensor_graph/graph_sensor_locations_bay.csv at master liyaguang/DCRNN (github.com) 1 读取 数据 import h5py fileDownloads/pems-bay.h5fh5py.File(file,r) f.keys()f[speed] #&…

几个python 编程题。

请定义一个Cylinder类&#xff0c; (1)每个Cylinder类对象可以存储一个圆柱体(包括半径和高) (2)具有用于初始化半径和高的方法 (3)具有输出圆柱体信息的方法Printlnfo ; (4)具有计算圆柱体体积的方法GetVolume. class Cylinder:def __init__(self, radius0.0, height0.0):self…

PHP调用API接口的方法及实现(一键采集淘宝商品详情数据)

随着互联网、云计算和大数据时代的到来&#xff0c;越来越多的应用程序需要调用第三方的API接口来获取数据&#xff0c;实现数据互通和协同工作。PHP作为一种常用的服务器端语言&#xff0c;也可以通过调用API接口来实现不同系统的数据交互和整合。本文将介绍PHP调用API接口的方…

JMeter+Jenkins接口压力测试持续集成

项目介绍 接口功能测试应用&#xff1a; http://www.weather.com.cn/data/cityinfo/<city_code>.html 测试功能&#xff1a;获取对应城市的天气预报 请求方法&#xff1a;Get 压测脚本开发工具&#xff1a;jmeter 源码脚本位置&#xff1a; https://github.com/shife…

基于SpringCloud的动漫论坛

基于SpringCloud的动漫论坛《BOKI》 摘要&#xff1a;鉴于现如今的互联网网站的存在形式&#xff0c;网站内部有可能内嵌论坛&#xff0c;因此&#xff0c;该项目中实现一个整体的、可移植性强的插件式论坛&#xff0c;论坛就有可能突破ACG主题的限制&#xff0c;实现论坛与主…

ZKP15.3 Formal Methods in ZK (Part II)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 15: Secure ZK Circuits via Formal Methods (Guest Lecturer: Yu Feng (UCSB & Veridise)) 15.3 Formal Methods in ZK (Part II) Formally prove that a circuit is NOT underconstrained Existing Strategies Static …

码题集-AC自动机(模板)

AC自动机&#xff1a; &#xff08;1&#xff09;一个长串&#xff0c;多个短串&#xff0c;求长串中匹配了几个短串&#xff08;包括分别匹配了几个&#xff0c;总共匹配了几类&#xff09; &#xff08;2&#xff09;此处模板为长串中匹配了几个短串&#xff1b; &#xf…

异步操作的方法

在高级语言中已经有了异步的原语言&#xff0c;而在C 中的最好的方式就是 libevent 的方式,我这还是相当认同的&#xff0c;高级语言就不需要在苦哈哈的&#xff0c;事件转圈了&#xff0c;但是原理还是以事件为基础的 一句话就是在一个循环中等着他执行完,这个循环中有很多其他…

NX二次开发UF_CURVE_create_arc_thru_3pts 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_arc_thru_3pts Defined in: uf_curve.h int UF_CURVE_create_arc_thru_3pts(int create_flag, double first_point [ 3 ] , double second_point [ 3 ] , double th…

单调队列(算法)

单调队列是求解区间最大值或最小值的算法 正向遍历时&#xff0c;是先入后出 , 队列中的下标是按照从左往右递增 , 由于正向遍历&#xff0c;当前下标比之前下标大&#xff0c;所以与末尾值比较 &#xff0c; 并且入列时添加在末尾 , 出列弹出队首 class Solution:def maxSli…

Git提示 Connection closed by remote host

问题如下图&#xff1a; 解决&#xff1a; 删除./ssh目录下的config文件&#xff0c;如下图config文件是新增的 原因&#xff1a;不知道什么原因&#xff0c;连接外网后突然断开或导致自动增加config文件。

【Python】jieba分词基础

jieba分词主要有3种模式&#xff1a; 1、精确模式&#xff1a;jieba.cut(文本, cut_allFalse) 2、全模式&#xff1a;jieba.cut(文本, cut_allTrue) 3、搜索引擎模式&#xff1a;jieba.cut_for_search(文本) 分词后的关键词提取&#xff1a; jieba.analyse.textrank(txt,t…

算法通关村第十三关|黄金挑战|数论问题

1.辗转相除法&#xff08;欧几里得算法&#xff09; 假如 8 和 12 的最大公因数是 4 &#xff0c;就记作 gcd(8,12)4. 辗转相除法重要规则&#xff1a;若 r 是 ab 的余数&#xff0c;则 gcd(a,b)gcd(b,r) 。 基于该规则的代码实现&#xff1a; int gcd(int a, int b) {int …

PPP/INS紧组合代码学习

前言&#xff1a; 本文是基于IGNAV的PPP/INS紧组合学习&#xff0c;在此之前需要具备GNSS/INS松组合知识&#xff0c;武汉大学的i2nav实验室的KF-GINS项目可以作为学习模板。可以参考这篇优秀博文&#xff0c;链接&#xff1a;KF-GINS源码阅读_李郑骁学导航的博客-CSDN博客 IG…

Kubernetes技术与架构-安全性

本文主要从不同层面与多个维度描述Kubernetes技术与架构的安全性。 云原生的安全性 从系统分层架构的角度分析&#xff0c;自底向上&#xff0c;云原生的安全性主要包括云、集群、容器以及代码四个层面&#xff0c;简称云原生4C安全&#xff0c;其架构图如下所示&#xff1a;…