当前位置: 首页 > news >正文

python线性回归:从原理到实战应用

线性回归背景介绍

        首先举个例子来引入线性回归,例如一家银行的贷款业务,他会根据每个去贷款人的信息来判断到底借给多少钱。例如

这个时候我们可以看出来额度是跟前两个特征有关的,我们可以想象到银行肯定有一套规则,或者说有一个线性回归曲线,根据前两个特征然后给出你可以贷款多少钱。那么现在我们不知道,我们能不能通过现有的几个数据来推出来这个线性回归曲线呢?下面我们就来学习关于线性回归的原理和应用吧。

线性回归原理

        引出线性表达式

还以上面的数据为例,那么多数据我们能不能通过一条线来进行拟合。有多个参数,我们引入多个x

所以引入函数                

我们也可以写成                    

此时的x0=1,这样我们就可以把表达式写成 

                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​

此时        

为什么要这样引入

1  在导入特征值时,数据一般是以列形式展现的,所以我们要将W的列形式转化为行向量,然后结果为一个一维的行矩阵

2 为什么要转化为矩阵来计算,因为矩阵可以并发计算,计算速度很快。

损失值计算

其实在我们计算时,所有点并不是完全在线上的,是有误差的,所有我们应该这样写

         ​​​​​​​        ​​​​​​​        ​​​​​​​        

这里y表示真实值,后半式子表示预测值,L表示误差项(真实值与预测值之间的差值),这里误差项是符合高斯分布的

 然后得出

然后我们求 θ的似然函数

然后我们进行计算。先取对数

 

        极大似然估计是要求出L ( θ )  的最大值,此处也就是求出J ( θ )的最小值。J ( θ ) 也是用优化方法求解线性回归问题的损失函数。        

最小二乘法

即求出上式中J ( θ ) J(\theta)J(θ)的最小值。
我们将M MM个N NN维样本组成矩阵X XX,

X XX的每一行对应一个样本,一共M MM行。
X XX的每一列对应样本的一个维度,加上一个值恒为1的维度,一共N + 1 N + 1N+1列。
这个额外的维度值恒为1,通常用于线性模型中的截距项,也就是说,每个样本都有一个额外的特征,其值为1。
具体形式如下:

 

梯度下降法

 从上面我们可以得出损失函数J ( θ ) J(\theta)J(θ)是一个凸函数,所以我们也可以用梯度下降算法来求得极值。

    梯度下降算法的目标是调整参数 θ \thetaθ 以最小化损失函数J ( θ ) J(\theta)J(θ)。梯度下降法通过计算损失函数相对于参数 θ \thetaθ 的梯度,并更新参数以减少误差。梯度是一个向量,其元素是损失函数对每个参数的偏导数。线性回归的梯度可以表示为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

 

代码部分

上面不懂也不影响我们写代码,我们只要知道要处理什么类型问题就好了。

例如我们来写一个简单线性回归代码

数据是这些,我们来预测体重75,年龄23的血压收缩

import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
data=pd.read_csv(r'多元线性回归.csv',encoding='gbk')
# print(data.head())
# 体重,年龄,血压收缩
X=data[['体重','年龄']]
y=data[['血压收缩']]model=LinearRegression()
model.fit(X,y)
result1=model.score(X,y)
print(result1)
a=model.coef_
b=model.intercept_
# print(a,b)
print('预测函数y={:.2f}x1+{:.2f}x2+{:.2f}'.format(a[0][0],a[0][1],b[0]))c=model.predict([[75,23]])
print(c)

 输出

第一个为得分情况,第二个为预测的函数,第三个为我们的问题体重75,年龄23的血压收缩结果。

http://www.dtcms.com/a/304720.html

相关文章:

  • 广告投放平台:从痛点解决到高效管理的全解析
  • 数据库02 网页html01 day44
  • 浅析MCP (1)+ 【小智 AI 机器人MCP案例分析】
  • Python的垃圾回收机制
  • PyTorch 数据类型和使用
  • 【C++算法】72.队列+宽搜_二叉树的最大宽度
  • Qt 多线程数据库操作优化
  • 图像认知与OpenCV | Day5:图像预处理(4)
  • 关于 Apache Ignite 中 Job 调度(Job Scheduling)与冲突控制(Collision Control) 的机制说明
  • 嵌入式中间件-uorb解析
  • GC8870刷式直流电机驱动器详解:3.6A高功率PWM控制芯片
  • 中间件二进制部署文档
  • java导出pdf(使用html)
  • kotlin StateFlow的两个问题和使用场景探讨
  • Coze Studio概览(三)--智能体管理
  • 虚拟机网络修复
  • centos服务器安装minio
  • ./build.sh:行1: g++: 未找到命令的错误问题在centos操作系统下面如何解决
  • C# SerialPort和ISerialServer的区别
  • 编程算法在金融、医疗、教育、制造业等领域的落地案例
  • 【nerf处理视频数据】Instant-NGP项目NeRF模型训练数据集准备指南
  • Sentinel实现限流和熔断降级
  • 基于YOLOP与GAN的图像修复与防御系统设计与实现
  • sqli-labs通关笔记-第24关 SQL二次注入(单引号闭合)
  • Scikit-learn高级功能与Python实践
  • 军工堡垒机国产化突围:打破国外垄断的三大技术流派
  • vue3项目搭建
  • VIKOR(Multi-criteria Optimization and Compromise Solution)简介与简单示例
  • 无人机图传:让天空视角 “触手可及”
  • Apache Ignite 的分布式原子类型(Atomic Types)