Lesson 1. 线性回归模型的一般实现形式

news2024/11/26 4:20:38

文章目录

  • 一、线性回归模型建模准备
    • 1. 数据准备
    • 2. 模型准备
  • 二、线性回归模型训练
    • 1. 模型训练的本质:有方向的参数调整
      • 1.1 模型训练与模型参数调整
      • 1.2 模型评估指标与损失函数
      • 1.3 损失函数与参数求解
    • 2. 利用最优化方法求解损失函数
      • 2.1 损失函数的求解
      • 2.2 图形展示损失函数
      • 2.3 函数的凹凸性
      • 2.4 最小二乘法理论基础
      • 2.5 最小二乘法求解 SSELoss

一、线性回归模型建模准备

  • 在了解完基本的概念和流程之后,我们尝试手动实现线性回归模型。

1. 数据准备

  • 线性回归是属于回归类模型,是针对连续性变量进行数值预测的模型,因此需要选用 abalone 数据集进行建模。
  • 此处为了更加清晰的展示建模过程的内部计算细节,我们选取数据集中部分数据带入进行建模。

在这里插入图片描述

2. 模型准备

  • 不难看出,上述数据集是极端简化后的数据集,只有一个连续型特征和连续型标签,并且只包含两条数据。围绕只包含一个特征的数据所构建的线性回归模型,也被称为简单线性回归
  • 简单线性回归的模型表达式为 y=wx+b,其中:
  • x 表示自变量,即数据集特征;
  • w 表示自变量系数,代表每次计算都需要相乘的某个数值;
  • b 表示截距项,代表每次计算都需要相加的某个数值;
  • y 表示因变量,即模型输出结果。
  • 除了简单线性回归外,线性回归主要还包括多元线性回归和多项式回归两类。
  • 其中,多元线性回归用于解决包含多个特征的回归类问题,模型基本表达式为:y=w1x1+w2x2+…+wnxn+b,其中:
  • x1…n 表示 n 个自变量,对应数据集的 n 个特征;
  • w1…n 表示 n 个自变量的系数;
  • b 表示截距。
  • 此外,多项式回归则是在多元线性回归基础上,允许自变量最高次项超过1次。
  • 准备好了数据和算法之后,接下来就是模型训练过程。

二、线性回归模型训练

1. 模型训练的本质:有方向的参数调整

1.1 模型训练与模型参数调整

  • 模型训练就是指对模型参数进行有效调整。
  • 模型参数是影响模型输出的关键变量,例如本例中的模型包含两个参数, w1 和 b ,当参数取得不同值时,模型将输出完全不同的结果。

在这里插入图片描述

  • 其中简单线性回归计算过程为 y=wx+b
  • 需要说明的是,在很多场景下,我们会使用更加简洁的记号用于代表模型训练过程中的各项数值,譬如:
  • xi 表示某条数据第 i 个特征的取值;
  • y 作为某条数据的标签取值;
  • ŷ 表示某条数据带入模型之后模型输出结果。
  • 从上式不难看出,模型参数取值不同模型输出结果也不同,而不同组的参数取值似乎也有好坏之分。
  • 当参数组取值为 (1,0)时的模型输出结果,要比参数组取值为(1,-1)时输出结果更加贴近真实值。
  • 这其实也就说明第二组参数要好于第一组参数。而机器在学习的过程,或者说模型训练过程,就是需要找到一组最优参数。

1.2 模型评估指标与损失函数

  • 既然有了模型输出结果好与坏的判别,我们就需要将这种反馈有效的传递给模型,才能够让模型在训练过程中逐渐朝向好的方向发展。而要在模型训练过程中建立这种有效的反馈,我们就必须先掌握两个基本概念,即模型评估指标与损失函数。
  • 其中,模型评估指标是指评估模型输出结果好与坏的标量计算结果,其最终结果一般由模型预测值 ŷ 和真实值 y 共同计算得出。
  • 而对于回归类问题,最重要的模型评估指标就是 SSE ——残差平方和。
  • 残差平方和,指的是模型预测值 ŷ 和真实值 y 之间的差值的平方和,计算结果表示预测值和真实值之间的差距,结果越小表示二者差距越小,模型效果越好。SSE基本计算公式如下。

在这里插入图片描述

  • 其中 n 为样本数量。对应的,上述两组不同参数取值对应的模型残差平方和计算结果依次如下。

在这里插入图片描述

  • 能够看出,第二组参数对应模型效果更好。据此我们就找到了能够量化评估模型效果好坏的指标。
  • 和模型评估指标是真实值和预测值的计算过程不同,模型的损失函数都是关于模型参数的函数。
  • 损失函数本质上一个衡量模型预测结果和真是结果之间的差异的计算过程,例如在 SSE 中如果带入模型参数,则就能构成一个 SSE 损失函数,基本计算过程如下如下。

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

  • SSELoss 的基本计算过程和 SSE 一致,只不过 SSELoss 中带入的是模型参数,而 SSE 带入的是确定参数值之后的计算结果。
  • 因此我们也可以认为对于 SSELoss 和 SSE 来说,一个是带参数的方程,一个是确定方程参数之后的计算结果。
  • 既然 SSE 和 SSELoss 的计算过程类似,那为何要区别损失函数和模型评估指标呢?主要有以下两点原因。
  • (1) 对于很多模型(尤其是分类模型)来说,模型评估指标和模型损失函数的计算过程并不一致,例如准确率就很难转化为一个以参数为变量的函数表达式。
  • (2) 模型评估指标和损失函数构建的目标不同,模型评估指标的计算目标是给模型性能一个标量计算结果,而损失函数的构建则是为了找到一组最优的参数结果。
  • 除了 SSE 以外,常用的回归类问题的评估指标还有 MSE(均方误差)和 RMSE(均方根误差),其中 MSE 就是在 SSE 的基础上除以样本总量。

在这里插入图片描述

  • 而 RMSE 则是在 MSE 基础之上开平方算得的结果。

在这里插入图片描述

  • 对应的,MSE 和 RMSE 也有相对的损失函数。

1.3 损失函数与参数求解

  • 一旦损失函数构建完成,我们就可以围绕损失函数去寻找损失函数的最小值,以及求出损失函数取得最小值时函数自变量(也就是模型参数)的取值,此时参数的取值就是原模型中参数的最优取值结果。
  • 这点从 SSE 和 SSELoss 彼此类似的计算过程能够很容易看出来,由于我们最终建模目标是希望模型预测结果和真实结果一致,也就是 SSE 的取值尽可能小,而 SSE 的值是 SSELoss 中的两个变量(w,b)取值决定的。
  • 因此如果我们能找到一组(w,b)使得 SSE 的最终计算结果尽可能的小,也就相当于找到了一组模型的最佳参数。
  • 由此可得,损失函数的核心作用主要是搭建参数求解的桥梁,构建一个协助模型求解参数的方程。
  • 通过损失函数的构建,我们可以将求解模型最优参数的问题转化为求解损失函数最小值的问题。至此也就完成了此前所说的确定反馈传递反馈的过程。
  • 值得注意的是,损失函数的计算方程和实际带入进行建模的数据直接相关,上述 SSELoss 是在带入两条数据的情况下构建的损失函数,而调整输入数据,损失函数实际计算方程也会发生变化。

2. 利用最优化方法求解损失函数

2.1 损失函数的求解

  • 在构建好损失函数之后,接下来就是如何求解损失函数的最小值(及损失函数取得最小值时 w 和 b 的取值)。
  • 值得注意的是,此时损失函数是一个关于模型参数的方程,也就是说模型参数此时成了损失函数的自变量。
  • 要求解损失函数最小值,就需要记住一些优化理论和优化算法。当然,此处的优化理论和算法都是一些无约束条件下进行函数极值求解的方法。利用优化方法求解损失函数最小值及其取得最小值时损失函数自变量(也就是模型参数)的取值过程,也被简称为损失函数求解

2.2 图形展示损失函数

  • 为了更好的讨论损失函数(SSELoss)求最小值的过程,对于上述二元损失函数来说,我们可以将其展示在三维空间内:三维空间坐标分别为 w、b、SSELoss。此处我们可以使用 Python 中 matplotlib 包和 Axes3D 函数进行三维图像绘制。

在这里插入图片描述

  • 在 Jupyter Notebook 中输入如下代码(** 表示幂运算)。
# 导入相关包
import numpy as np
import pandas as pd 
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x = np.arange(-1,3,0.05)
y = np.arange(-1,3,0.05)
w, b = np.meshgrid(x, y)
SSE = (2 - w - b) ** 2 + (4 - 3 * w - b) ** 2
ax = plt.axes(projection='3d')
ax.plot_surface(w, b, SSE, cmap='rainbow') 
#生成z方向投影,投到x-y平面
ax.contour(w, b, SSE, zdir='z', offset=0, cmap="rainbow")
#x轴标题 
plt.xlabel('w')
#y轴标题 
plt.ylabel('b')
plt.show()
  • 会得到如下的实现图像。

在这里插入图片描述

  • 根据图像,我们大概能判断损失函数最小值点位置。

2.3 函数的凹凸性

  • 初步探索函数图像,不难看出,目标函数是个整体看起来向下凸的函数。
  • 从理论出发我们知道,函数的凹凸性是函数的重要性质,也是涉及到损失函数求解方法选取的重要性质。这里我们首先给出凸函数的一般定义,对于任意一个函数,如果函数 f(x) 上存在任意两个点,x1,x2 ,且满足如下性质,就判定为凸函数。

在这里插入图片描述

  • 很多机器学习模型所构建的损失函数都是凸函数,因此关于凸函数的优化方法(找到最小值的方法)也就成了机器学习建模过程中最常用的优化方法。
  • 而对于一个凸函数来说,全域最小值明显存在。求解凸函数的最小值有很多种方法,其中最为基础的方法叫做最小二乘法。但对于上述 SSELoss,本质上也是一个凸函数。
  • 因此我们是可以通过最小二乘法对 SSELoss 进行求解的。

2.4 最小二乘法理论基础

  • 我们先抛开公式、从一个简单的角度理解最小二乘法。
  • 通过函数的凹凸性可得,在最小值点左边函数逐渐递减、而在最小值点右边函数逐渐递增,最小值点左右两边函数单调性相反。
  • 而这种性质其实可以拓展为凸函数的一个关于求解最小值的一般性质,即:
  • (1) 对于一元函数,如果存在导数为 0 的点,则该点就是最小值点。
  • (2) 对于多元函数,如果存在某一点,使得函数的各个自变量的偏导数都为 0,则该点就是最小值点。
  • 据此,我们就找到了最小二乘法求解凸函数最小值的基本出发点:即通过寻找损失函数导函数(或者偏导函数联立的方程组)为 0 的点,来求解损失函数的最小值。

2.5 最小二乘法求解 SSELoss

  • 接下来,尝试利用最小二乘法求解 SSELoss。根据上述理论,我们使用最小二乘法求解 SSELoss ,即

SSELoss=(2−w−b)2+(4−3w−b)2

  • 本质上就是在找到能够令损失函数偏导数取值都为零的一组 (w,b) 。SSELoss 的两个偏导数计算过程如下:

在这里插入图片描述

  • 最终可得,损失函数最小值点为 (1,1),即当 w=1,b=1 时模型损失函数计算结果最小、模型 SSE 取值最小、模型效果最好,此时 SSE=0,线性回归模型计算结果为:y=x+1
  • 至此,我们就基本完成了一个简单线性回归的模型建立。

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

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

相关文章

【DevOps实战|基于Jenkins与Gitlab构建企业级持续集成环境系统】(更新中未完成)

目录 一、DevOps简介 二、CI/CD简介 1、代码部署的最基本流程 2、软件开发生命周期 3、持续集成整体流程 三、Git简介 1、GitHub与Gitlab区别 四、基于Jenkins与Gitlab构建持续集成环境系统 1、环境说明 2、安装gitlab 1)配置邮件报警 一、DevOps简介 De…

目标检测的新范式:Towards Open World Object Detection

论文题目:Towards Open World Object Detection 1 摘要 人类有一种识别其环境中未知物体实例的自然本能(natural instinct)。当这些未知的实例最终获得相应的知识时,对它们的内在好奇心有助于了解它们。这促使我们提出一种新的计算机视觉问题称为&…

Week 11

洛谷P1796 汤姆斯的天堂梦 题目描述 汤姆斯生活在一个等级为 000 的星球上。那里的环境极其恶劣,每天 121212 小时的工作和成堆的垃圾让人忍无可忍。他向往着等级为 NNN 的星球上天堂般的生活。 有一些航班将人从低等级的星球送上高一级的星球,有时需…

算法第十四期——动态规划(DP)初入门

目录 DP初步:状态转移与递推 最少硬币问题 DP基础 DP的两个特征 DP:记忆化 图解DP求解过程 最经典的DP问题:0/1背包 模板题:小明的背包 DP状态设计 DP状态转移方程(重点) 代码 空间优化:滚动数组 (1)交替滚…

【机组组合】基于Benders分解算法解决混合整数规划问题——机组组合问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【鸟哥杂谈】腾讯云 CentOS8 Linux环境下通过docker安装mysql

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-01-15 ❤️❤️ 本篇更新记录 2023-01-15 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝&#x1f64…

Vite中如何更好的使用TS

TS 是JS的一个类型检查工具,检查我们代码中可能会存在的一些隐形问题;同时可以使我们的编译器具备一些语法提示功能。 如果我们使用create-vue(vue3官方脚手架工具)创建了项目,该项目基于 Vite 且 TypeScript 已经准备…

SpringBoot+Vue使用easypol出现无法导出Excel表的问题

本篇博文目录1.异常信息2.原因3.解决办法4.详细的SpringBooteasypol前后端分离实现excel导出的步骤1.异常信息 今天在使用easypol导出Excel表的时候,发现能够从后端接口返回数据,但是就是无法导出Excel,控制台输出devicepolicies:1 Uncaught (in promise) error,并且…

2022年度总结 - 明月醉窗台

2022年度总结 - 明月醉窗台 1.2022年成果 - 感谢CSDN提供了自我创作的平台,有多少个夜晚我将其作为心灵的寄托... - 感谢各位小伙伴的抬爱和学习过程中的共同见证,将人生视为一条向上的曲线是明确且坚持不懈的抉择... - 立足当下,不忘脚踏实…

【算法基础】1.5 前缀和与差分

文章目录前缀和题目描述解法讲解二维前缀和题目描述解法讲解差分题目描述解法讲解二维差分题目描述解法讲解前缀和 题目描述 输入一个长度为 n 的整数序列。 接下来再输入 m 个询问,每个询问输入一对 l,r。 对于每个询问,输出原序列中从第 l 个数到第 …

IVD-Net:多模态UNet在MRI中的椎间盘定位和分割

摘要 本文提出了一种多模态磁共振图像中的椎间盘(IVD)定位和分割体系结构,它扩展了UNet。与单一的图像相比,多模态的数据带来了互补的信息有助于更好的数据表示和判别能力。 在本文中,每种MRI模态的数据都以不同的路…

Waf功能、分类与绕过

一. waf工作原理 Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。 常见的系统攻击分为两类: 一是利用Web服务器的漏洞进行攻击,如DDOS攻击、病毒木马破坏等攻击;二是利用网页自身的安全漏洞进…

【C语言】实现通讯录(详解)

目录 一、需要实现的功能 1.1 类型和结构体的定义 二、拆分代码 2.1 游戏菜单 2.1.1 函数调用 2.1.2 函数体的实现 2.1.2运行效果 2.2 初始化结构体 2.2.1 函数调用 2.2.2 函数体的实现 2.2.3 运行结果 2.3 添加联系人信息 2.3.1 函数调用 2.3.2 函数体的实现 2…

操作系统之光--鸿蒙

鸿蒙是什么?鸿蒙包含Openharmony和harmonyOS。Openharmony是华为向开放原子开源基金会捐赠了鸿蒙开源部分的代码,归属于开放原子开源基金会。HarmonyOS是基于Openharmony的商业发行版本。目前大家华为手机上运行就是它。鸿蒙能做什么?很明显&…

【算法基础】1.6 双指针算法

文章目录双指针思想最长连续不重复子序列数组元素的目标和题目讲解判断子序列双指针思想 双指针算法,就是可以将 n ^ 2 优化到 n。 最长连续不重复子序列 给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度…

IO流的学习

文章目录一、File类的使用创建File实例File常用方法总结二、IO流分类读入数据的基本操作步骤(第一种)步骤(第二种)写出数据的基本操作步骤读入并写出数据的基本操作(复制)步骤注意处理流之一:缓…

【Nginx】静态资源部署(下)

文章目录静态资源的缓存处理缓存概述浏览器缓存相关指令expires指令add_header指令Nginx的跨域问题解决同源策略跨域问题跨域问题的案例演示解决方案静态资源防盗链什么是资源盗链Nginx防盗链的实现原理:针对目录进行防盗链静态资源的缓存处理 缓存概述 什么是缓存…

【爪洼岛冒险记】第4站:Java中如何进行控制台输入输出?用Java实现猜数字小游戏;超详细讲解Java中的方法:方法的重载,方法的签名

🌱博主简介:是瑶瑶子啦,一名大一计科生,目前在努力学习JavaSE。热爱写博客~正在努力成为一个厉害的开发程序媛! 📜所属专栏:爪洼岛冒险记【从小白到大佬之路】 ✈往期博文回顾:链接: 【爪洼岛冒…

【文件指针+文件顺序读写操作函数】

1.文件的打开和关闭 1.1 什么是文件指针 2.文件操作函数 2.1 fgetc函数和fputc函数2.2 fgets函数和fputs函数2.3 fscanf函数和fprintf函数2.4 fwrite函数和fread函数 1.文件的打开和关闭 1.1 什么是文件指针? 每个被使用的文件都在内存中开辟了一个相应的文件…

文件操作详解

文章目录前言一、什么是文件?1.程序文件2.数据文件3.文件名二、文件的打开和关闭1.文件指针2.文件的打开和关闭3.打开模式汇总4.例子三.操作函数介绍1.基本函数2.fseek2.ftell3.rewind4.feof尾话前言 恐怕很多人学完了c语言甚至不知道文件操作,也确实&am…