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

04_线性回归

文章目录

  • 1 概述
  • 2 线性回归求解
    • 2.1 损失函数
    • 2.2 正规方程法
    • 2.3 梯度下降法
      • 2.3.1 梯度下降思想
      • 2.3.2 学习率的选择
      • 2.3.3 梯度下降常见分类
      • 2.3.4 梯度下降常见问题
    • 2.4 正规方程和梯度下降对比
  • 3 API 使用
    • 3.1 正规方程
    • 3.2 梯度下降
    • 3.3 Lasso 回归
    • 3.4 Ridge 回归

1 概述

回归模型是机器学习和统计学中的一种基本模型,用于预测连续型输出变量。简单的说,给定一组输入变量(自变量)和对应的输出变量(因变量),回归模型旨在找到输入变量和输出变量之间的映射关系。

线性回归分类:

  • 一元线性回归:建立一个因变量与单个自变量之间线性关系的模型,也就是只有一个特征。
    y = w x + b y={w}\boldsymbol{x}+b y=wx+b
    y \small{y} y 是目标变量(因变量), x \boldsymbol{x} x 是输入变量(自变量), b b b 是偏置(截距,intercept), w w w是权重(回归系数, regression coefficients)

  • 多元线性回归:建立一个因变量与多个自变量之间线性关系的模型,模型具有多个特征。
    y = w 1 x 1 + w 2 x 2 + w 3 x 3 + ⋯ + w n x n + b y=w_1x_1+w_2x_2+w_3x_3+\cdots+w_nx_n+b y=w1x1+w2x2+w3x3++wnxn+b
    可以用向量简化为: y = w T x + b y=\boldsymbol{w^Tx}+b y=wTx+b
    y = w T x y=\boldsymbol{w^Tx} y=wTx
    其中, x = [ 1 , x 1 , x 2 , … , x n ] \boldsymbol{\mathbf{x} = [1, x_{1}, x_{2}, \dots, x_{n}]} x=[1,x1,x2,,xn] 是包含截距的输入向量, w = [ w 0 , w 1 , w 2 , … , w n ] T \boldsymbol{\mathbf{w} = [w_{0}, w_{1}, w_{2}, \dots, w_{n}]^{T}} w=[w0,w1,w2,,wn]T 是模型参数(包括截距 b b b 和回归系数 w 1 , w 2 , ⋯ , w n \boldsymbol{w_{1}, w_{2}, \cdots, w_{n}} w1,w2,,wn

2 线性回归求解

2.1 损失函数

建立回归模型的目的是为了找到最佳的回归系数 w \boldsymbol{w} w 和截距 b b b ,能够使预测值 y i ^ {\hat{y_{i}}} yi^ 与实际观测值 y i {y_{i}} yi 之间差异最小化。
损失函数(Loss Function),也称为代价函数(Cost Function),定义损失函数为:
L ( w ) = ∑ i = 1 m ( y i ^ − y i ) 2 L(w)=\sum_{i=1}^{m}(\hat{y_i}-y_i)^2 L(w)=i=1m(yi^yi)2

很多时候损失函数和代价函数两个术语存在混用,严谨来说:

  • 损失函数:单个训练样本的误差,通常用 L ( w ) L(w) L(w), L ( w , b ) L(w, b) L(w,b)
  • 代价函数:整个训练集的平均误差,损失函数的平均,通常用 J ( θ ) J(θ) J(θ)

损失函数 L ( w ) L(w) L(w) 最小化时便找到了最佳参数,这为优化参数指明了方向。

在这里插入图片描述

2.2 正规方程法

正规方程法(Normal Equation) 是一种直接计算线性回归模型参数(权重和偏置)的方法,它不需要像梯度下降那样的迭代过程。

在这里插入图片描述

整理后得出多元线性回归方程的解析解为:
w = ( X T X ) − 1 X T y \boldsymbol{w} = (\mathbf{X}^{T}\mathbf{X})^{-1}\mathbf{X}^{T}\mathbf{y} w=(XTX)1XTy

X \mathbf{X} X 为特征值矩阵, y \boldsymbol{y} y 为目标值向量, w \boldsymbol{w} w 为参数向量, w 0 w_0 w0 为偏置。若 X T X X^TX XTX 不满秩,可以解出多个 w w w,此时需要设定归纳偏好,或引入正则化(regularization)。

X = [ 1 x 11 x 12 ⋯ x 1 n 1 x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ ⋱ ⋮ 1 x m 1 x m 2 ⋯ x m n ] y = [ y 1 y 2 ⋮ y m ] w = [ w 0 w 1 ⋮ w n ] X = \begin{bmatrix} 1 & x_{11} & x_{12} & \cdots & x_{1n} \\ 1 & x_{21} & x_{22} & \cdots & x_{2n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{m1} & x_{m2} & \cdots & x_{mn} \end{bmatrix} \;\;\;\;\;\;\;\;\;\;\;\;\; y = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{bmatrix} \;\;\;\;\;\;\;\;\;\;\;\;\; w = \begin{bmatrix} w_0 \\ w_1 \\ \vdots \\ w_n \end{bmatrix} X= 111x11x21xm1x12x22xm2x1nx2nxmn y= y1y2ym w= w0w1wn

2.3 梯度下降法

2.3.1 梯度下降思想

梯度下降(Gradient Descent)是一种优化算法,广泛应用于机器学习和深度学习中,用于找到最小化模型损失函数的参数。

梯度下降是一个迭代过程,不断重复以下步骤直到模型收敛,即损失不再明显减少:

  1. 初始化参数: 随机设定模型的初始参数 w \boldsymbol{w} w(包含权重和偏置)。
  2. 计算损失: 使用当前的参数计算模型的损失函数 J ( w ) J(\boldsymbol{w}) J(w)
  3. 计算梯度: 对损失函数 J ( w ) J(\boldsymbol{w}) J(w) 计算偏导数,得到当前位置的梯度 ∇ J ( w ) \nabla J(\boldsymbol{w}) J(w),得到损失函数变化最快的方向。
    ∇ J ( w ) = [ ∂ J ∂ w 1 , ∂ J ∂ w 2 , ⋯ , ∂ J ∂ w n ] \nabla J(\mathbf{w}) = \left[ \frac{\partial{J}}{\partial{w_{1}}}, \frac{\partial{J}}{\partial{w_{2}}}, \cdots, \frac{\partial{J}}{\partial{w_{n}}} \right] J(w)=[w1J,w2J,,wnJ]
  4. 更新参数: 沿着梯度的反方向,根据学习率(learning rate) α \alpha α 更新参数。
    θ = θ − α ⋅ ∇ J ( w ) ​ θ=θ−α⋅\nabla J(\mathbf{w})​ θ=θαJ(w)
  5. 重复: 返回到第 2 步,用新的参数重复计算和更新,直到达到某一停止条件
    1. 达到最大迭代次数
    2. 损失变化小于某个阈值。

2.3.2 学习率的选择

  • 学习率过小:收敛速度慢,易陷入局部最优解
  • 学习率过大:可能导致跳过最优解,甚至发散

在这里插入图片描述

自适应学习率:高级优化器(如 Adam、Adagrad)动态调整学习率以提升性能

2.3.3 梯度下降常见分类

  1. 批量梯度下降(Batch Gradient Descent,BGD):每次迭代使用全部训练数据计算梯度。

    • 优点:梯度方向稳定,更新平滑,收敛过程较稳定。
    • 缺点:每次都计算整个训练集,计算量大,对大数据集效率低。
  2. 随机梯度下降(Stochastic Gradient Descent,SGD):每次迭代随机选取一个样本计算梯度。

    • 优点:快速迭代,每次只用一个样本计算梯度;由于引入了随机性,有助于跳出局部最优解。
    • 缺点:每次更新方向不确定,收敛过程波动很大,甚至难以收敛,在最小值附近震荡。
  3. 小批量梯度下降(Mini-batch Gradient Descent,MBGD):每次迭代使用一小批样本(如32、64个)计算梯度。

    • 优点:计算成本相对 BGD 较低,又比 SGD 稳定,兼具 BGD 的稳定和 SGD 的速度。
    • 缺点:合适的 batch size 需要实验。

梯度下降优化扩展内容

2.3.4 梯度下降常见问题

特征缩放:通常需要提前对特征进行缩放(如标准化或归一化),以加快收敛速度。

局部最优解、鞍点问题:可能陷入局部最优解,或遇到鞍点(梯度为零但非极值点)。
解决方案:使用动量(Momentum)、自适应优化器(如 Adam)或二阶方法(如牛顿法)。

2.4 正规方程和梯度下降对比

正规方程法:

  • 一次运算得出
  • 不需要学习率
  • 计算量大、容易受到噪声、特征强相关性的影响;如果数据不是线性的,无法使用或效果不好
  • 应用场景:小数据量场景

梯度下降法:

  • 需要迭代求解
  • 需要选择学习率
  • 应用场景:更加普适,适合于嘈杂、大数据场景,在各种损失函数中大量使用。在深度学习中模型参数轻松过亿,只能通过迭代求解

3 API 使用

3.1 正规方程

LinearRegression使用最小二乘法计算回归模型的参数。

from sklearn.linear_model import LinearRegressionmodel = LinearRegression(fit_intercept=True  # 是否计算偏置
)model.fit(X_train, y_train)
# 查看权重
model.coef_
# 查看偏置
model.intercept_

3.2 梯度下降

SGDRegressor使用随机梯度下降求解,随机梯度下降对特征的尺度非常敏感,通常需要在训练之前对特征进行标准化或归一化处理。

form sklearn.linear_model import SGDRegressormodel = SGDRegressor(loss="squared_error",  # 损失函数,默认为均方误差penalty="l2",  # 正则化项,默认为 L2 正则fit_intercept=True, # 是否计算偏置learning_rate="constant", # 学习率策略eta0=0.1, # 初始学习率max_iter=1000, # 最大迭代次数tol=1e-8, # 损失值变化量小于 tol 时停止迭代
)model.fit(X_train, y_train)
# 查看权重
model.coef_
# 查看偏置
model.intercept_
  • loss:指定优化目标(损失函数),默认值为 'squared_error'(最小二乘法),其他可以选择的值有:'huber''epsilon_insensitive''squared_epsilon_insensitive',其中 'huber'适用于对异常值更鲁棒的回归模型。
  • penalty:指定正则化方法,用于防止过拟合,默认为 'l2'(L2 正则化),其他可以选择的值有:'l1'(L1正则化)、'elasticnet'(弹性网络,L1 和 L2 的组合)、None(不使用正则化)。
  • alpha:正则化强度的系数,控制正则化项的权重,默认值为 0.0001。较大的 alpha 值会加重正则化的影响,从而限制模型复杂度;较小的值会让模型更关注训练数据的拟合。
  • l1_ratio:当 penalty='elasticnet' 时,控制 L1 和 L2 正则化之间的权重,默认值为 0.15,取值范围为 [0, 1]0 表示完全使用 L2,1 表示完全使用 L1)。
  • tol:优化算法的容差,即判断收敛的阈值,默认值为 1e-3。当目标函数的改变量小于 tol 时,训练会提前终止;如果希望训练更加精确,可以适当降低 tol
  • learning_rate:指定学习率的调节策略,默认值为 'constant',表示使用固定学习率,具体的值由 eta0 指定;其他可选项包括:
    • 'optimal':基于公式 eta = 1.0 / (alpha * (t + t0))自动调整。
    • 'invscaling':按 eta = eta0 / pow(t, power_t) 缩放学习率。
    • 'adaptive':动态调整,误差减少时保持当前学习率,否则减小学习率。
  • eta0:初始学习率,默认值为 0.01,当 learning_rate='constant' 或其他策略使用时,eta0 决定了初始更新步长。
  • power_t:当 learning_rate='invscaling' 时,控制学习率衰减速度,默认值为 0.25。较小的值会让学习率下降得更慢,从而更长时间地关注全局优化。
  • early_stopping:是否启用早停机制,默认值为 False。如果设置为 True,模型会根据验证集性能自动停止训练,防止过拟合。
  • validation_fraction:指定用作验证集的训练数据比例,默认值为 0.1。当 early_stopping=True 时,该参数会起作用。
  • max_iter:训练的最大迭代次数,默认值为 1000。当数据较大或学习率较小时,可能需要增加迭代次数以保证收敛。
  • shuffle:是否在每个迭代轮次开始时打乱训练数据,默认值为 True,表示打乱数据。打乱数据有助于提高模型的泛化能力。
  • warm_start:是否使用上次训练的参数继续训练,默认值为 False。当设置为 True 时,可以在已有模型的基础上进一步优化。
  • verbose:控制训练过程的日志输出,默认值为 0,可以设置为更高值以观察训练进度。

3.3 Lasso 回归

拉索(Lasso)回归在线性回归基础上引入 L 1 \small{L1} L1 正则化项,不仅防止过拟合,还具有特征选择的功能,特别适用于高维数据。

from sklearn.linear_model import Lassomodel = Lasso()model.fit(X_train, y_train)
# 查看权重
model.coef_
# 查看偏置
model.intercept_

3.4 Ridge 回归

岭(Ridge)回归在线性回归的基础上引入 L 2 \small{L2} L2 正则化项,目的是防止模型过拟合,尤其是当特征数较多或特征之间存在共线性时。

from sklearn.linear_model import Ridgemodel = Ridge()model.fit(X_train, y_train)
# 查看权重
model.coef_
# 查看偏置
model.intercept_
http://www.dtcms.com/a/516230.html

相关文章:

  • 自然语言处理实战——基于策略迭代算法的餐厅预订对话系统
  • PHP双轨直销企业会员管理系统/购物直推系统/支持人脉网络分销系统源码
  • 拼接“音频片段”生成完整文件
  • 电影视频网站建设费用wordpress搜索增强
  • 营销型网站建设ppt模板wordpress碎语插件
  • 灵活用工平台如何助力中小企业降本增效:案例分析
  • 【题解】P2216 [HAOI2007] 理想的正方形 [单调队列]
  • UE基础操作2
  • Java IDEA学习之路:第五、六周课程笔记归纳
  • 亚马逊云代理商:怎么使用AWS WAF?
  • 茂名建设企业网站建网站为什么要租空间
  • SOAP 实例详解
  • 【C++】多态深度解析:虚函数表与动态绑定的奥秘
  • 腾讯云网站建设教程企业名录app
  • 重庆做网站有哪些医疗网站建设
  • 语音识别技术之科大讯飞在线API
  • 从案例到实践:仓颉编程语言入门核心知识点全解析
  • VR环境中的概念
  • 闽侯县住房和城乡建设局官方网站猪八戒官网做网站专业吗
  • 十个app制作网站wordpress目录插件
  • PHP全电发票OFD生成实战
  • 利用DuckDB SQL求解集合数学题
  • 做新闻h5网站专业网站建设费用报价
  • 个人网站开发的环境海南省建设网站的公司电话号码
  • C++学习:C++11关于类型的处理
  • LayoutManager
  • 网站建设公司盈利分析网站建设需要哪些的ps
  • QML学习笔记(四十六)QML与C++交互:Q_PROPERTY宏映射
  • 培训学校 网站费用购物商城网站建设方案
  • 黑马商城day5-服务保护和分布式事务