首页 > 其他分享 >【机器学习】(基础篇三) —— 线性回归

【机器学习】(基础篇三) —— 线性回归

时间:2024-07-10 20:30:14浏览次数:7  
标签:plt 机器 回归 SSE beta 线性 模型

线性回归

本文介绍最经典的监督学习问题——线性回归,包括单变量线性回归和多变量线性回归

线性回归是回归任务,输入是带有标签的数据,根据数据关系,拟合出一个线性函数,并利用该函数进行预测等操作。线性回归分为单变量(只有一个影响因素)和多变量(多个影响因素)

单变量线性回归

它探讨的是一个自变量(也称为解释变量或预测变量)与一个因变量(也称为响应变量或预测目标)之间的线性关系。一元线性回归的基本模型定义为:

y = β 0 + β 1 x + ε y=\beta_0+\beta_1x+\varepsilon y=β0​+β1​x+ε

误差项ε是随机变量反映了除 x 和 y 之间的线性关系之外的随机因素对 y 的影响,是不能由 x 和 y 之间的线性关系所解释的变异性。

假定误差项ε是一个期望值为0的随机变量,即E(ε)=0。对于一个给定的 x 值,y 的期望值为E (y ) =β0+ β1x

我们的目标是根据训练样本得到最合适的参数β0和β1,让所有训练样本点到拟合直线函数的距离最小,使用的方法是最小二乘法

最小二乘法(Ordinary Least Squares, OLS):让实际值和估计值(拟合函数)之间的距离总和最小为要求得到估计参数,为了方便及不让正负符号抵消,使用残差平方和表示距离,即

R S S ( β 0 , β 1 ) = ∑ i = 1 n ( y i − ( β 0 + β 1 x i ) ) 2 \mathrm{RSS}(\beta_0,\beta_1)=\sum_{i=1}^n(y_i-(\beta_0+\beta_1x_i))^2 RSS(β0​,β1​)=i=1∑n​(yi​−(β0​+β1​xi​))2

目标是让上述函数取到最小值,因为这个函数是在凸优化问题,任何局部最小值都是全局最小值,通过微分并令其等于零来找到极小值点就是全局最小值点。对于一元线性回归问题,可以直接推导出闭式解:

β 1 ^ = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 \hat{\beta_1}=\frac{\sum_{i=1}^n(x_i-\bar{x})(y_i-\bar{y})}{\sum_{i=1}^n(x_i-\bar{x})^2} β1​^​=∑i=1n​(xi​−xˉ)2∑i=1n​(xi​−xˉ)(yi​−yˉ​)​

然后,利用估计出的β1计算出β0

β 0 ^ = y ˉ − β 1 ^ x ˉ \hat{\beta_0}=\bar{y}-\hat{\beta_1}\bar{x} β0​^​=yˉ​−β1​^​xˉ

sklearn是一个机器学习库,其中为我们封装好了很多机器法学系方法,可以让我们直接调用,非常方便,在开发中也是直接调用库而不需要手写算法,但是手写算法可以帮助我们理解算法的底层逻辑。

【示例】手动实现单变量的线性回归并且进行可视化展示

# 一元线性回归分析
import numpy as np
import matplotlib.pyplot as plt

# 准备训练样本数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 3, 2, 3, 5])
# 计算第一个参数,用a保存
d, m = 0, 0
for x_i, y_i in zip(x, y):
    d += (x_i - x.mean()) * (y_i - y.mean())
    m += (x_i - x.mean()) ** 2
a = d / m
# 计算第二个参数,用b保存
b = y.mean() - a * x.mean()
# y_hat作为使用计算出的a和b作为参数得到的拟合函数的估计值
y_hat = a * x + b 
# 可视化
plt.scatter(x, y)
plt.plot(x, y_hat, color='r')
plt.axis([0, 6, 0, 6])

plt.show()

运行结果:

在这里插入图片描述

【示例】使用sklearn中的方法实现线性回归

# 导入包含回归方法的类:
from sklearn.linear_model import LinearRegression

# 将上面的数据转换为列向量使用
x = x.reshape(-1,1)
y = y.reshape(-1,1)

# 创建该类的一个对象:
LR = LinearRegression()

# 训练模型拟合数据,并预测:
LR = LR.fit(x, y)
y_predict = LR.predict(x)

# 可视化
plt.scatter(x, y)
plt.plot(x, y_predict, color='r')
plt.axis([0, 6, 0, 6])

plt.show()

拟合优度与检验

在得到一个模型结果之后,我们需要一些方法或者指标来判断这个模型是否有效,即得到的模型是否能够有效的反映训练样本所表达的关系。

要检验样本和估计值之间的关系,我们经常会使用距离来进行衡量,如果所有的训练样本点到估计值的距离都很小,我们就可以说这个拟合的模型结果很好。

image-20240225102221404

在这里插入图片描述
在这里插入图片描述

回归平方和: S S R = ∑ ( y ^ i − y ˉ ) 2 SSR=\sum(\hat{y}_i-\bar{y})^2 SSR=∑(y^​i​−yˉ​)2

SSR反映了回归模型对数据的解释能力,SSR越大,说明模型能够解释更多的数据变异。当模型完美拟合数据时,SSR等于SST(总平方和),而SSE(残差平方和)则为0。

残差平方和: S S E = ∑ ( y i − y ^ i ) 2 SSE=\sum(y_i-\hat{y}_i)^2 SSE=∑(yi​−y^​i​)2

SSE越小,说明模型的预测值与实际观测值越接近,模型的拟合效果越好。在上一小节的最小二乘法中,目标就是找到使SSE最小化的模型参数。

总平方和: S S T = ∑ ( y i − y ˉ ) 2 = S S R + S S E SST=\sum(y_i-\bar{y})^2 = SSR + SSE SST=∑(yi​−yˉ​)2=SSR+SSE

SST它衡量了观测值与其平均值之间的差异的平方和,提供了因变量总变异性的一个度量。残差平方和(SSE)代表了模型未能解释的变异部分,回归平方和(SSR)则表示了模型成功解释的变异部分。

判定系数R^2: R 2 = 1 − S S E S S T R^2=1-\frac{SSE}{SST} R2=1−SSTSSE​

是在回归分析中衡量模型拟合优度的一个统计量。它表示模型解释的变异占总变异的比例,取值范围从0到1。一个较高的 R^2 值表明模型对数据的解释能力较好,反之则较差。

判定系数等于相关系数的平方,即R2=(*r*)2

上述的很多参数中,常用的只有判定系数R2,其余的定义都是为了最终计算出这个值,只需要掌握这个的计算即可。使用sklear包中提供的工具即可实现计算R2,因为底层设计的数据计算比较多,手写容易出错,所以在这里我也直接调用相关方法。

【示例】使用sklearn计算上面例子中的R^2

# 计算R^2和F统计量
# 导入相关工具
from sklearn.metrics import r2_score
# 传入标签值和估计值进行计算
r2 = r2_score(y, y_predict)
print(f"R² Score: {r2}")

输出结果:

R² Score: 0.7272727272727273

多变量线性回归

多元线性回归(Multiple Linear Regression)用于研究一个因变量(dependent variable)与两个或更多个自变量(independent variables)之间的线性关系。相比于一元线性回归,多元线性回归模型允许考虑多个影响因素,这些因素共同作用于预测目标变量。多元线性回归可以写成如下形式:

y = β 0 + β 1 x 1 + β 2 x 2 + . . . + β p x p + ϵ y=\beta_0+\beta_1x_1+\beta_2x_2+...+\beta_px_p+\epsilon y=β0​+β1​x1​+β2​x2​+...+βp​xp​+ϵ

利用最小二乘法的思想,对各个参数求偏导,令其等于0,得出估计参数值

使用skelearn实现多变量线性回归和上面单变量的用法相同,都是使用LinearRegression,不同的就是此时传入的x变成了多个维度的数组,以此来表示多个变量。

标签:plt,机器,回归,SSE,beta,线性,模型
From: https://blog.csdn.net/dao_cao_renshuai/article/details/140331851

相关文章

  • Profinet转ModbusTCP网关模块连发那科机器人与DCS通讯
    一、现场要求:发那科机器人作为服务器端,DCS作为客户端向发那科机器人发送读写请求,发那科机器人应答后DCS接收发那科机器人的数据,实现数据的传递。二、解决方案:在不增加编程任务的前提下只需在DCS与机器人中间添加巴图自动化Profinet转ModbusTCP网关(BT-ETHPN20)就可实现。本文将介......
  • Franka Robot 打印机器人关节位姿(print_joint_poses.cpp)
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<iostream>#include<iterator>#include<franka/exception.h>#include<franka/model.h>/***@exam......
  • 机器学习深度学习用得到的数据集
    以下是一些常见的机器学习数据集下载渠道:Google数据集搜索引擎:可以通过文本搜索数据集,并能按日期、数据格式和使用权限等进行过滤。地址:https://datasetsearch.research.google.com/Kaggle:这是世界领先的数据科学平台,拥有大量数据集,还允许用户发布数据集及与其他数据科学家交......
  • 浙大数据结构慕课课后习题(02-线性结构2 一元多项式的乘法与加法运算)
    题目要求设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项......
  • 线性基
    线性基线性基是一种擅长处理异或问题的数据结构.设值域为\([1,N]\),就可以用一个长度为\(⌈\text{log}_2N⌉\)的数组来描述一个线性基。特别地,线性基第\(i\)位上的数二进制下最高位也为第ii位。一个线性基满足,对于它所表示的所有数的集合\(S\),\(S\)中任意多个数异或所得的结......
  • 【AI和大模型】AI到底和大模型有什么区别?机器学习,深度学习,python,NPL
    什么是AI?AI是一个广泛的领域,涵盖了模拟和扩展人类智能的多种理论和技术;而大模型是AI领域中的一种具体技术,特别是在自然语言处理(NLP)方面取得了显著进展的深度学习模型。大模型通常指的是具有大量参数的深度学习模型,它们通过在大规模数据集上进行训练,能够学到丰富的数据表示和模......
  • 机器学习策略篇:详解如何使用来自不同分布的数据,进行训练和测试(Training and testing o
    如何使用来自不同分布的数据,进行训练和测试深度学习算法对训练数据的胃口很大,当收集到足够多带标签的数据构成训练集时,算法效果最好,这导致很多团队用尽一切办法收集数据,然后把它们堆到训练集里,让训练的数据量更大,即使有些数据,甚至是大部分数据都来自和开发集、测试集不同的分布。......
  • 【机器学习】使用决策树分类器预测汽车安全性的研究与分析
    文章目录一、决策树算法简介决策树的结构分类和回归树(CART)决策树算法术语决策树算法直觉二、属性选择度量信息增益熵基尼指数计算分割基尼指数的步骤三、决策树算法中的过度拟合避免过度拟合的方法四、导入库和数据可视化探索性数据分析重命名列名查看数据集的总......
  • Franka demo1 - 输出机器人状态(echo_robot_state)
    //Copyright(c)2023FrankaRoboticsGmbH//UseofthissourcecodeisgovernedbytheApache-2.0license,seeLICENSE#include<iostream>#include<franka/exception.h>#include<franka/robot.h>/***@exampleecho_robot_state.cpp......
  • Franka机器人中的低通滤波器和速率限制器之间的区别和联系
    Franka机器人中的低通滤波器和速率限制器之间存在以下区别和联系:作用目的:低通滤波器的作用是抑制高频噪声,平滑控制指令,提高系统稳定性。速率限制器的作用是限制关节运动的速度变化率,避免机器人产生过大的加速度和扭矩,保护机械系统。作用对象:低通滤波器作用于控......