[机器学习]--线性回归算法

news2025/1/17 4:10:15

线性回归算法原理

线性关系在生活中有很多案例:

  • 摄氏度和华氏度的转化: F = C ⋅ 9 5 + 32 F = C \cdot\frac{9}{5}+32 F=C59+32
  • 学科最终成绩的计算: 最终成绩 = 0.3 × \times × 平时成绩 + 0.7 × \times ×期末成绩

线性回归(Linear regression)就是利用回归函数对一个或多个自变量和因变量关系建立类似如上模型的一种分析方式

通用公式:
h ( w ) = w 1 x 1 + w 2 x 2 + . . . + b = w T x + b h(w)=w_1x_1+w_2x_2+...+b=w^Tx+b h(w)=w1x1+w2x2+...+b=wTx+b
其中 w 1 , w 2 , . . . w_1,w_2,... w1,w2,...称为系数
x 1 , x 2 , . . . x_1,x_2,... x1,x2,...是自变量
也可以使用矩阵的形式表示:
h ( w ) = ( b w 1 w 2 . . . ) ⋅ ( 1 x 1 x 2 . . . ) h(w) = \begin{pmatrix}b \\ w_1 \\ w_2 \\...\end{pmatrix} \cdot \begin{pmatrix} 1 \\ x_1 \\ x_2 \\ ...\end{pmatrix} h(w)= bw1w2... 1x1x2...

根据自变量的数量, 可以将线性关系分为单变量线性关系, 多变量线性关系

  • 单变量线性关系

图1

  • 多变量线性关系

图2

当特征值超过两个时, 就无法使用绘图来进行可视化了, 但在数学上任然可以使用矩阵的方式表示

损失函数

损失函数可以告诉我们模型的运行情况, 以便我们更好的改进

如下图, 已知的数据集以红叉显示, 简单建立了一个线性回归模型 f w , b f_{w,b} fw,b
指定其中一点( x ( i ) , y ( i ) x^{(i)}, y^{(i)} x(i),y(i)), 该模型的预测值为 y ^ \hat{y} y^
那么该模型在该点的误差就是 y ^ − y ( i ) \hat{y} - y^{(i)} y^y(i)
假设一个有 m m m个点, 每一个点的误差平方都相加再取平均, 就得到该模型的损失函数
J ( w , b ) = 1 2 m ∑ i = 1 m ( y ^ ( i ) − y ( i ) ) 2 J(w,b) = \frac{1}{2m}\sum^{m}_{i=1}(\hat{y}^{(i)}-y^{(i)})^2 J(w,b)=2m1i=1m(y^(i)y(i))2
为了后面求导运算的简便, 取平均后再乘以 1 2 \frac{1}{2} 21
图3
通常来说, 损失函数的值越小, 模型的效果是最好的, 那么我们建立线性回归模型, 就需要找到损失函数最小是什么时候, 从而找到对应的 w , b w,b w,b值.

那么如何找损失函数的最小值?
使用梯度下降的方法

梯度下降

梯度下降是最小化任何函数的方法, 不单单只是损失函数

下图是某个模型的损失函数, 假设你站在某一个高点处, 那应该如何找到该函数的最小值?
很简单, 环顾四周, 找到最陡峭的一点, 往那个方向走一小步
到达之后再环顾四周, 找到最陡峭的一点, 往那个方向走一小步
不断重复, 就能抵达某一个局部最低点

再回到你的起始位置, 随机往某个方向偏离一点, 重复上述步骤, 你可能会到达另一个局部最低点
在这里插入图片描述
具体数学步骤也并不困难
w = w − α ∂ ∂ w J ( w , b ) w = w - \alpha\frac{\partial}{\partial w}J(w,b) w=wαwJ(w,b)
b = b − α ∂ ∂ w J ( w , b ) b = b - \alpha\frac{\partial}{\partial w}J(w,b) b=bαwJ(w,b)
这里的 α \alpha α称为学习率, 又称步长
对损失函数 J ( w , b ) J(w,b) J(w,b)求偏导, 找到最陡峭的那一点, 根据学习率更新 w , b w, b w,b, 使得损失函数不断下降, 从而找到局部最小值

下图是梯度下降算法的具体应用, 右上图是 J ( w , b ) J(w,b) J(w,b)的等高线图
起始为蓝色, 根据上面的方法不断更新 w , b w,b w,b, 从而找到损失函数的最小值
图5

注意, 学习率的取值不能太大, 也不能太小
如果取值过大, 就可能一步就超过最小值点, 损失函数反而会找不到最小值
如果取值过小, 找到最小值点的时间会很长, 算法效率很低

那么该如何选择好学习率?

作出迭代次数和损失函数 J ( w ⃗ , b ) J(\vec{w},b) J(w ,b)的图像, 根据梯度下降的方法, 随着迭代次数的增加, 损失函数的值会不断减小最后趋近某一个值, 即达到最低点

因此, 选择不同的学习率 α \alpha α, 作出相关图像, 即可找到合理的学习率
在这里插入图片描述

在更多的情况下, 我们遇到的都是多元线性回归模型
多元和单元的区别, 其实就是因变量数量的不同, 因此需要更多的参数来表示
这就要使用到线性代数的知识了, 使用向量矩阵来表示
J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 J(\vec{w},b) = \frac{1}{2m}\sum^{m}_{i=1}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})^2 J(w ,b)=2m1i=1m(fw ,b(x (i))y(i))2
步骤更单元的一样

线性回归模型的简单应用

1.数据说明

diabetes 是一个关于糖尿病的数据集, 该数据集包括442个病人的生理数据及一年以后的病情发展情况。

age:年龄
sex:性别
bmi(body mass index):身体质量指数,是衡量是否肥胖和标准体重的重要指标,理想BMI(18.5~23.9) = 体重(单位Kg) ÷ 身高的平方 (单位m)
bp(blood pressure):血压(平均血压)
s1,s2,s3,s4,s4,s6:六种血清的化验数据,是血液中各种疾病级数指针的6的属性值。
s1——tc,T细胞(一种白细胞)
s2——ldl,低密度脂蛋白
s3——hdl,高密度脂蛋白
s4——tch,促甲状腺激素
s5——ltg,拉莫三嗪
s6——glu,血糖水平

2.数据预处理

导入相关库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_diabetes
diabetes=load_diabetes()
data = diabetes['data']
target = diabetes['target']
feature_names = diabetes['feature_names']
df = pd.DataFrame(data,columns= feature_names)
df

在这里插入图片描述

3.模型训练

1.训练集和测试集的划分
2.实例化线性回归对象
3.传入数据训练模型
4.查看模型的系数(coef_)和截距(intercept_)

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data,target, test_size=0.2, random_state=22)
estimator = LinearRegression()
estimator.fit(x_train,y_train)

estimator.intercept_
estimator.coef_

在这里插入图片描述

4.模型评估

1.查看模型准确率:

y_pred = estimator.predict(x_test)
estimator.score(x_test,y_test)

在这里插入图片描述

2.均方误差mean_absolute_error
计算公式: n n n是样本总数, y ^ i \hat{y}_i y^i是预测值, y i y_i yi是实际值
M S E = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 MSE = \frac{1}{n}\sum^{n}_{i=1}(\hat{y}_i-y_i)^2 MSE=n1i=1n(y^iyi)2

# metrics  评估
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test,y_pred)

在这里插入图片描述

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

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

相关文章

Linux系统编程:IPC通信和网络通信

1.IPC通信 IPC 进程间通信方式: 共享内存是最高效的进程间通信方式 共享内存: 1.是一块,内核预留的空间 2.最高效的通信方式,避免了用户空间到内核空间的数据拷贝 IPC通信方式 ---操作流程类…

BaseCTF2024 WP (主要为Rev)

Rev Rev视频解析:[Rev0:从零开始的逆向生活]BaseCTF2024 Week1 Rev 讲解_哔哩哔哩_bilibili [Week1] You are good at IDA [Week1] UPX mini 脱UPX标准壳,解base64 [Week1] Ez Xor 简单的反向异或,数据动调取一下 #base_xor e…

自开发多功能Vue组件:可定义滚动速度[回到顶部/底部]图标组件的安装与使用!

samdy-chan/vue3-goto-top-or-bottom Preview(本组件使用效果预览图) 本组件使用过程中的 GIF 动态效果图(图片经过压缩,视觉可能会有所模糊): Functional Description(功能描述) …

关于LLC知识10

在LLC谐振腔中能够变化的量 1、输入电压 2、Rac(负载) 所以增益曲线为红色(Rac无穷大)已经是工作的最大极限了,LLC不可能工作在红色曲线之外 负载越重时,增益曲线越往里面 假设: 输入电压…

谷歌反垄断案:美国科技史上最大的垄断诉讼与未来展望

引言 近年来,随着全球科技巨头的迅猛崛起,反垄断诉讼逐渐成为各国监管机构打击科技公司滥用市场地位的重要手段。美国作为全球科技产业的发源地,其对反垄断的关注也从未减弱。2023年,美国联邦法院针对谷歌发起的反垄断诉讼&#…

《Spring Cloud 微服务架构核心组件与 Nacos 配置管理详解》

微服务 1.SpringCloud中的核心组件 Spring Cloud Netflix组件 组件名称作用Eureka服务注册中心RibbonRibbonFeign声明式服务调⽤Hystrix客户端容错保护ZuulAPI服务⽹关 Spring Cloud Alibaba组件 组件名称作用Nacos服务注册中心Sentinel客户端容错保护 Spring Cloud原⽣及…

【python】JS逆向中,手把手教会你如何层层突破瑞数加密

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

Python中matplotlib使用4

在matplotlib中,可以通过绘制“饼图”来展示各类别在总体中所占的比例。 1 绘制基本“饼图” 通过matplotlib中的pie()函数绘制饼图,代码如图1所示。 图1 绘制基本“饼图”的代码 从图1中可以看出,pie()函数的参数y即为要绘制的数据&#…

微服务的基本理解和使用

目录​​​​​​​ 一、微服务基础知识 1、系统架构的演变 (1)单体应用架构 (2)垂直应用架构 (3)分布式SOA架构 (4)微服务架构 (5)SOA与微服务的关系…

Qt 0821作业

一、思维导图

一种针对自然语言文本的提示策略

文章介绍了一种创新的提示策略,旨在利用大型语言模型从自然语言文本中提取业务流程相关信息,例如活动和参与者等,并建立它们之间的关系。通过这种方法,研究人员能够在无需大量数据的情况下实现高质量的信息提取,进而用…

Apache Commons-IO 库

Apache Commons-IO是Apache开源基金组织提供的一组有关IO(Input/Output)操作的小框架。这个库的主要目的是为了提高IO流的开发效率,减少在进行文件读写、目录遍历等操作时编写的样板代码量。通过使用Commons-IO库,开发者可以更加简…

为一个花店编写一个库存管理程序,花点库存的花用花的名称、颜色、单价和株的数量来表示。(可直接运行)

为一个花店编写一个库存管理程序,花点库存的花用花的名称、颜色、单价和株的数量来表示。 要求: (1)说明一个结构数组,存储库存的鲜花数据。 (2)编写一个函数input_data(),输入现…

【学习笔记】卫星网络(NTN)的窄带物联网(NB-IoT)研究 -- 3GPP TR 36.763(四)

目录 8. 后续研究方向的建议 8.1 来自RAN1的建议 8.1.1 针对NR NTN和IoT NTN的共同增强建议 8.1.2 Release-17时间框架内RAN1建议的总结 8.2 来自RAN2的建议 关于卫星网络(NTN)的窄带物联网(NB-IoT)/增强型机器类型通信&#…

【论文阅读33】Deep learning optoacoustic tomography with sparse data

Deep learning optoacoustic tomography with sparse data 论文题目:基于稀疏数据的深度学习光声断层扫描 论文链接:Deep learning optoacoustic tomography with sparse data | Nature Machine Intelligence 代码链接:GitHub - ndavoudi/sparse_artefact_unet 数据链接…

鸿蒙Harmony实战开发:Arkts构造函数

构造函数 类声明可以包含用于初始化对象状态的构造函数。 构造函数定义如下: constructor ([parameters]) {// ... } typescript 如果未定义构造函数,则会自动创建具有空参数列表的默认构造函数,例如: class Point {x: numbe…

CH动画制作软件Win/Mac软件安装下载(附安装包)

目录 一、软件概述 1.1 软件简介 1.2 系统要求 二、安装步骤 2.1 下载软件 2.2 安装准备 2.3 安装过程 三、使用教程 3.1 创建新项目 3.2 角色制作 3.3 动画制作 四、高级功能与技巧 4.1 实时渲染技术 4.2 编程支持 4.3 协作与集成 一、软件概述 1.1 软件简介 …

linux 进程D状态的解决思路

同时做了录屏放到B站了,伙伴们视频给个3连支持一下 linux 进程D状态解决思路 1. 问题描述 在Linux系统环境,进程在内核模式下等待I/O完成时通常会进入不间断睡眠状态,此时使用ps或top命令输出的进程显示为D状态。当然我们也可以使用sysrq工具…

基于Python flask的图书借阅管理系统的设计与实现

基于Python Flask的图书借阅管理系统旨在为图书馆或类似机构提供一个高效、便捷的管理平台,覆盖图书借阅的各个环节,帮助管理员和读者更好地管理和使用图书资源。该系统采用Python编程语言和Flask框架进行开发,结合了数据库管理、用户认证、数…

数字图像处理【13】图像特征概述。

前言概述 打算用几篇文章回顾OpenCV特征模块(features2d)当中的对象检测(object detection)概念,以及主要的经典算法。这些传统的算法相对于现在来讲,可能有些过时,但对于初学者来说还是有必要…