pytorch逻辑回归基本概念

发布于:2025-04-11 ⋅ 阅读:(42) ⋅ 点赞:(0)

pytorch逻辑回归

⼈⼯神经⽹络是⼀种模仿⽣物神经⽹络(动物的中枢神经系统,特别是⼤脑)的结构和功能的数学模型或计算模型。
神经⽹络是⼈⼯智能深度学习的基础,也是⽬前主流⽹络模型应⽤最多的基础架构。
通常学习神经⽹络最好的⼊⻔⽅法也是先学习逻辑回归,⽽后进⼀步认识神经元和整体的⽹络训练。

线性回归

线性回归的⽬标就是找到⼀个线性函数来拟合数据,使得预测值与真实值之间的误差尽可能⼩,⽽参数估计就是确定这个线性函数中参数的过程。

简单线性回归的参数估计

简单线性回归模型的表达式为: y = β 0 + β 1 x + ϵ {y}=\beta_{0}+\beta_{1} x+\epsilon y=β0+β1x+ϵ,其中 y y y是因变量, x x x是⾃变量, β 0 \beta_{0} β0是截距, β 1 \beta_{1} β1是斜率, ϵ \epsilon ϵ是误差项(服从均值为 0 的正态分布)

⾃变量 是我们认为对因变量 有影响的变量,是模型中⽤来预测或解释因变量变化的因素。
因变量 是受到⼀个或多个⾃变量影响的变量,也被称为响应变量或被解释变量。
截距 是线性回归模型中的⼀个常数项,截距的值反映了除⾃变之外的其他所有因素对因变量的综合影响(当 x = 0 时).在机器学习领域也被称为偏差(bias)
斜率 表⽰直线的倾斜程度,它衡量了⾃变量每变动⼀个单位时,因变量的平均变动量。在机器学习和优化算法中,为了更简洁通⽤地表⽰这些参数,常常⽤ θ \theta θ来统⼀表⽰模型的参数向量。

自变量和因变量都是观测值

参数估计常用的方法是最小二乘法(Least Squares Method),其基本思想是找到一组参数 β 0 \beta_0 β0 β 1 \beta_1 β1,使得观测值 y i y_i yi 与预测值 y ^ i \hat{y}_i y^i 之间的误差平方和最小。预测值 y ^ i = β 0 + β 1 x i \hat{y}_i = \beta_0 + \beta_1 x_i y^i=β0+β1xi,误差平方和定义为:
S ( β 0 , β 1 ) = ∑ i = 1 n ( y i − y ^ i ) 2 = ∑ i = 1 n ( y i − β 0 − β 1 x i ) 2 S(\beta_0, \beta_1) = \sum_{i=1}^n (y_i - \hat{y}_i)^2 = \sum_{i=1}^n (y_i - \beta_0 - \beta_1 x_i)^2 S(β0,β1)=i=1n(yiy^i)2=i=1n(yiβ0β1xi)2

为了最小化 S ( β 0 , β 1 ) S(\beta_0, \beta_1) S(β0,β1),分别对 β 0 \beta_0 β0 β 1 \beta_1 β1 求偏导数,并令偏导数为零:

  1. β 0 \beta_0 β0 求偏导:
    ∂ S ∂ β 0 = − 2 ∑ i = 1 n ( y i − β 0 − β 1 x i ) = 0 \frac{\partial S}{\partial \beta_0} = -2 \sum_{i=1}^n (y_i - \beta_0 - \beta_1 x_i) = 0 β0S=2i=1n(yiβ0β1xi)=0

  2. β 1 \beta_1 β1 求偏导:
    ∂ S ∂ β 1 = − 2 ∑ i = 1 n ( y i − β 0 − β 1 x i ) x i = 0 \frac{\partial S}{\partial \beta_1} = -2 \sum_{i=1}^n (y_i - \beta_0 - \beta_1 x_i)x_i = 0 β1S=2i=1n(yiβ0β1xi)xi=0

通过求解上述方程组,可得参数的估计值:

  • 斜率 β 1 \beta_1 β1 的估计值
    β ^ 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(xixˉ)2i=1n(xixˉ)(yiyˉ)
    其中 x ˉ \bar{x} xˉ y ˉ \bar{y} yˉ 分别为 x x x y y y 的样本均值。

  • 截距 β 0 \beta_0 β0 的估计值
    β ^ 0 = y ˉ − β ^ 1 x ˉ \hat{\beta}_0 = \bar{y} - \hat{\beta}_1 \bar{x} β^0=yˉβ^1xˉ

推导关键步骤

  1. ∂ S ∂ β 0 = 0 \frac{\partial S}{\partial \beta_0} = 0 β0S=0 可得:
    ∑ i = 1 n y i = n β 0 + β 1 ∑ i = 1 n x i \sum_{i=1}^n y_i = n\beta_0 + \beta_1 \sum_{i=1}^n x_i i=1nyi=nβ0+β1i=1nxi
    β 0 = y ˉ − β 1 x ˉ \beta_0 = \bar{y} - \beta_1 \bar{x} β0=yˉβ1xˉ

  2. β 0 \beta_0 β0 代入 ∂ S ∂ β 1 = 0 \frac{\partial S}{\partial \beta_1} = 0 β1S=0 并整理。

多元线性回归的参数估计

多元线性回归模型的表达式为:
y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β p x p + ϵ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_p + \epsilon y=β0+β1x1+β2x2++βpxp+ϵ
其中 x 1 , x 2 , ⋯   , x p x_1, x_2, \cdots, x_p x1,x2,,xp p p p 个自变量。

同样使用最小二乘法,误差平方和为:
S ( β 0 , β 1 , ⋯   , β p ) = ∑ i = 1 n ( y i − y ^ i ) 2 = ∑ i = 1 n ( y i − β 0 − β 1 x i 1 − β 2 x i 2 − ⋯ − β p x i p ) 2 S(\beta_0, \beta_1, \cdots, \beta_p) = \sum_{i=1}^n (y_i - \hat{y}_i)^2 = \sum_{i=1}^n (y_i - \beta_0 - \beta_1 x_{i1} - \beta_2 x_{i2} - \cdots - \beta_p x_{ip})^2 S(β0,β1,,βp)=i=1n(yiy^i)2=i=1n(yiβ0β1xi1β2xi2βpxip)2

其中 x i p x_{ip} xip 表示第 i i i 个观测值的第 p p p 个自变量的值。

为了找到使 S S S 最小的参数 β 0 , β 1 , ⋯   , β p \beta_0, \beta_1, \cdots, \beta_p β0,β1,,βp,对每个参数求偏导数并令其等于 0,组成一个包含 p + 1 p+1 p+1 个方程的方程组。通过矩阵运算,可以得到参数的估计值为:
β ^ = ( X T X ) − 1 X T y \hat{\beta} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y} β^=(XTX)1XTy

其中:

  • β ^ \hat{\beta} β^ 是包含 β 0 ^ , β 1 ^ , ⋯   , β p ^ \hat{\beta_{0}}, \hat{\beta_{1}}, \cdots, \hat{\beta_{p}} β0^,β1^,,βp^ 的参数向量,
  • X \mathbf{X} X 是包含自变量观测值的设计矩阵(第一列通常为 1,对应截距项),
  • y \mathbf{y} y 是因变量的观测值向量。

逻辑回归

逻辑回归就是将线性回归模型映射为概率的模型。

y ^ \hat{y} y^ 实数空间的输出 [ − ∞ , + ∞ ] [-\infty, +\infty] [,+] 映射到取值为 [ 0 , 1 ] [0, 1] [0,1] 的区间,从而把模型的输出值转换为概率值。

而这其中的转换,我们使用的就是 sigmoid 函数:

p ^ = s i g m o i d ( z ) = 1 1 + e − z \hat{p} = sigmoid(z) = \frac{1}{1 + e^{-z}} p^=sigmoid(z)=1+ez1

def sigmoid(z):
    """Compute the sigmoid function."""
    return 1 / (1 + np.exp(-z)) 

最大似然估计和损失函数

概率和似然的区别

概率(probably),是在已知一些概率分布参数的情况下,预测观测值的结果
似然(Likelihood),则是用于在已知某些观测值所得到的结果时,对观测结果所属的概率分布参数进行估计

当我们讨论具体的样本数据时, x x x常被称为观测值。在实际研究中,我们会收集一系列样本点的数据,对于每个样本点,都有对应的自变量 x x x的取值和因变量 y y y的取值。例如,我们收集了 n n n个房屋的相关数据,对于第 i i i个房屋,它的面积 x i x_i xi就是一个观测值(同时 y i y_i yi表示第 i i i个房屋的价格,也是一个观测值)。这里的观测值时实际收集到的数据点,是具体的数值,用于对模型进行参数估计和评估等操作

P ( x ∣ θ ) P(x|\theta) P(xθ)

x x x 表示某一个具体的数据; θ \theta θ 表示模型的参数。

  • 如果 θ \theta θ 是已知确定的, x x x 是变量,这个函数叫做概率函数 (probability function),它描述对于不同的样本点 x x x,其出现概率是多少。
  • 如果 x x x 是已知确定的, θ \theta θ 是变量,这个函数叫做似然函数 (likelihood function),它描述对于不同的模型参数,出现 x x x 这个样本点的概率是多少。

最大似然估计

最大似然估计(Maximum Likelihood Estimation) 就是一种可以生成拟合数据任意分布的参数的最可能估计的技术。

简单解释就是:最大似然估计的目的是找到一个最符合当前观测数据的概率分布


似然函数

假设我们有一组观测到的数据, X = { x 1 , x 2 , … , x N } X = \{x_1, x_2, \ldots, x_N\} X={x1,x2,,xN} 共有 N N N 个。我们假设这组数据属于正态分布,它的概率密度函数为 f ( x ; μ , σ ) f(x; \mu, \sigma) f(x;μ,σ),我们把 X X X 的值带入到 f ( x ; μ , σ ) f(x; \mu, \sigma) f(x;μ,σ) 里,得到的是每个数据点 x x x 在假设的概率分布中出现的可能性。

P ( x 1 ∣ μ , σ ) , P ( x 2 ∣ μ , σ ) , … , P ( x N ∣ μ , σ ) P(x_1 \mid \mu, \sigma), P(x_2 \mid \mu, \sigma), \ldots, P(x_N \mid \mu, \sigma) P(x1μ,σ),P(x2μ,σ),,P(xNμ,σ)

那么这组数据 X X X 在假设的概率分布中的出现的可能性就是它们所有概率的乘积:

L ( μ , σ ∣ X ) = P ( X ∣ μ , σ ) = ∏ i = 1 N P ( x i ∣ μ , σ ) L(\mu, \sigma \mid X) = P(X \mid \mu, \sigma) = \prod_{i=1}^N P(x_i \mid \mu, \sigma) L(μ,σX)=P(Xμ,σ)=i=1NP(xiμ,σ)

L ( μ , σ ∣ X ) L(\mu, \sigma \mid X) L(μ,σX) 就是似然函数,利用已知观测值 X X X,来估计参数 μ , σ \mu, \sigma μ,σ 的可能性。所以说,似然函数也是一种条件概率函数。

对数似然函数

我们对似然函数取 l o g log log 对数,就是对数似然函数:

L ( μ , σ ∣ X ) = ∑ i = 1 N log ⁡ P ( x i ∣ μ , σ ) L(\mu, \sigma \mid X) = \sum_{i=1}^N \log P(x_i \mid \mu, \sigma) L(μ,σX)=i=1NlogP(xiμ,σ)

对数似然函数是在神经网络优化中最常用的损失函数

为什么要取对数?
原始的似然函数是很多条件概率的乘积,在计算最大值的时候需要求似然函数的导数。而乘积的导数计算很麻烦,所以取对数可以把乘法变成加法。


损失函数

对于上面的逻辑回归,我们引入假设函数,预测 Y Y Y 等于 1 时的概率:

h θ ( X ) = 1 1 + e − z = P ( Y = 1 ∣ X ; θ ) h_\theta(X) = \frac{1}{1+e^{-z}} = P(Y = 1 \mid X; \theta) hθ(X)=1+ez1=P(Y=1X;θ)

Y Y Y 等于 0 的概率为:

P ( Y = 0 ∣ X ; θ ) = 1 − h θ ( X ) P(Y = 0 \mid X; \theta) = 1 - h_\theta(X) P(Y=0X;θ)=1hθ(X)


假设函数 (hypothesis)
假设函数本质上是一个模型,用于描述自变量和因变量之间的映射关系。
它根据给定的输入数据(自变量的值),通过特定的数学运算和参数量,预测对应的输出值(因变量的值)。
例如,在简单线性回归中,假设函数的形式为: h θ ( x ) = θ 0 + θ 1 x h_\theta(x) = \theta_0 + \theta_1 x hθ(x)=θ0+θ1x
其中 x x x 是自变量, h θ ( x ) h_\theta(x) hθ(x) 是基于参数 θ 0 \theta_0 θ0 θ 1 \theta_1 θ1 对自变量的预测值。这里的 h θ ( x ) h_\theta(x) hθ(x) 就是一个假设函数,它假设自变量与因变量之间存在线性关系。

通过最大似然估计,定义似然函数,将 h θ ( X ) h_\theta(X) hθ(X)代入到伯努利分布的概率质量函数中
L ( θ ∣ x ) = P ( Y ∣ X ; θ ) L(\theta \mid x) = P(Y \mid X; \theta) L(θx)=P(YX;θ)

= ∏ i P ( y i ∣ x i ; θ ) = \prod_i P(y_i \mid x_i; \theta) =iP(yixi;θ)

= ∏ i h θ ( x i ) y i ( 1 − h θ ( x i ) ) ( 1 − y i ) = \prod_i h_{\theta}(x_i)^{y_i} (1 - h_{\theta}(x_i))^{(1 - y_i)} =ihθ(xi)yi(1hθ(xi))(1yi)


伯努利分布 (Bernoulli distribution) 是一个离散型概率分布,用于描述只有两种可能结果的随机试验,例如抛硬币(正面或反面)、产品是否合格(合格或不合格)等。
设随机变量 X X X服从伯努利分布,若试验成功的概率为 p p p 0 ≤ p ≤ 1 0 \le p \le 1 0p1),试验失败的概率为 1 − p 1 - p 1p,则伯努利分布的概率质量函数为:
P ( X = k ) = p k ( 1 − p ) 1 − k , 其中 k = 0 , 1 P(X = k) = p^k(1 - p)^{1-k}, \text{其中} k = 0, 1 P(X=k)=pk(1p)1k,其中k=0,1 k = 1 k = 1 k=1 时,表示试验成功,此时 P ( X = 1 ) = p P(X = 1) = p P(X=1)=p;当 k = 0 k = 0 k=0 时,表示试验失败,此时 P ( X = 0 ) = 1 − p P(X = 0) = 1 - p P(X=0)=1p

以方便计算,取对数,转为对数似然 (乘法转加法)
L ( θ ∣ x ) = log ⁡ ( P ( Y ∣ h θ ( X ) ) ) = ∑ i = 1 m y i log ⁡ ( h θ ( x i ) ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) L(\theta \mid x) = \log(P(Y \mid h_{\theta}(X))) = \sum_{i=1}^m y_i \log(h_{\theta}(x_i)) + (1 - y_i) \log(1 - h_{\theta}(x_i)) L(θx)=log(P(Yhθ(X)))=i=1myilog(hθ(xi))+(1yi)log(1hθ(xi))
上面的公式前缀加个负号,就可把最大转化为求最小。设 h θ ( X ) = Y ^ h_{\theta}(X) = \hat{Y} hθ(X)=Y^,得出损失函数:
J ( θ ) = − ∑ i y i log ⁡ ( Y ^ ) − ( 1 − y i ) log ⁡ ( 1 − Y ^ ) J(\theta) = - \sum_i y_i \log(\hat{Y}) - (1 - y_i) \log(1 - \hat{Y}) J(θ)=iyilog(Y^)(1yi)log(1Y^)

只要最小化这个函数的结果值,就可得出我们想要的 θ \theta θ

def loss_function(y,y_hat):
    e = 1e-8 # to avoid log(0)
    return y * np.log(y_hat + e) + (1 - y) * np.log(1 - y_hat + e)

过拟合和泛化的区别

过拟合(Overfitting)和泛化(Generalization)是机器学习和深度学习中两个重要的概念,主要涉及模型在训练数据和未见数据上的表现。

  1. 过拟合(Overfitting)

过拟合指的是模型在训练数据上表现很好,但在新数据(测试集或验证集)上表现较差的现象。换句话说,模型学到了训练数据中的噪声和细节,而不是数据的真正模式,导致泛化能力下降。

原因:
• 模型过于复杂(参数太多)
• 训练数据量不足
• 训练数据包含大量噪声
• 训练时间过长(训练轮数过多)

解决方案:
• 减少模型复杂度(降低参数量、使用较简单的模型)
• 增加训练数据(获取更多样本、数据增强)
• 正则化(L1/L2 正则化、Dropout)
• 使用早停(Early Stopping)(在验证集误差开始上升时停止训练)

  1. 泛化(Generalization)

泛化指的是模型在未见数据上的表现能力。一个模型泛化能力强,意味着它不仅能很好地学习训练数据的模式,还能应用这些模式来预测新数据。

提高泛化能力的方法:
• 适当调整模型复杂度(避免过拟合)
• 充分利用数据增强(Data Augmentation)
• 采用正则化方法
• 交叉验证(Cross Validation)选择合适的超参数

简单比喻

如果把机器学习比作学生考试:

•	过拟合 就像一个学生死记硬背训练集上的题目,一旦考试题目变了(新数据),就不会做了。  

•	泛化 是学生学会了解题方法和知识点,即使题目变化也能解答正确。  

确保模型具有良好的泛化能力,是机器学习中的核心目标之一。

总结

逻辑回归就是在线性回归基础上套一层sigmoid函数,将线性回归结果转换为概率值,逻辑回归就是计算概率的函数
似然函数就是已知自变量,利用它预测模型中的参数(本质就是条件概率函数)