目录
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=1∑n(yi−y^i)2=i=1∑n(yi−β0−β1xi)2
为了最小化 S ( β 0 , β 1 ) S(\beta_0, \beta_1) S(β0,β1),分别对 β 0 \beta_0 β0 和 β 1 \beta_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 ∂β0∂S=−2i=1∑n(yi−β0−β1xi)=0对 β 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 ∂β1∂S=−2i=1∑n(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(xi−xˉ)2∑i=1n(xi−xˉ)(yi−yˉ)
其中 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ˉ
推导关键步骤:
从 ∂ S ∂ β 0 = 0 \frac{\partial S}{\partial \beta_0} = 0 ∂β0∂S=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=1∑nyi=nβ0+β1i=1∑nxi
即 β 0 = y ˉ − β 1 x ˉ \beta_0 = \bar{y} - \beta_1 \bar{x} β0=yˉ−β1xˉ。将 β 0 \beta_0 β0 代入 ∂ S ∂ β 1 = 0 \frac{\partial S}{\partial \beta_1} = 0 ∂β1∂S=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=1∑n(yi−y^i)2=i=1∑n(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+e−z1
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=1∏NP(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=1∑NlogP(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+e−z1=P(Y=1∣X;θ)
Y Y Y 等于 0 的概率为:
P ( Y = 0 ∣ X ; θ ) = 1 − h θ ( X ) P(Y = 0 \mid X; \theta) = 1 - h_\theta(X) P(Y=0∣X;θ)=1−hθ(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(Y∣X;θ)
= ∏ i P ( y i ∣ x i ; θ ) = \prod_i P(y_i \mid x_i; \theta) =i∏P(yi∣xi;θ)
= ∏ 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)} =i∏hθ(xi)yi(1−hθ(xi))(1−yi)
伯努利分布 (Bernoulli distribution) 是一个离散型概率分布,用于描述只有两种可能结果的随机试验,例如抛硬币(正面或反面)、产品是否合格(合格或不合格)等。
设随机变量 X X X服从伯努利分布,若试验成功的概率为 p p p( 0 ≤ p ≤ 1 0 \le p \le 1 0≤p≤1),试验失败的概率为 1 − p 1 - p 1−p,则伯努利分布的概率质量函数为:
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(1−p)1−k,其中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)=1−p。
以方便计算,取对数,转为对数似然 (乘法转加法)
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(Y∣hθ(X)))=i=1∑myilog(hθ(xi))+(1−yi)log(1−hθ(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(θ)=−i∑yilog(Y^)−(1−yi)log(1−Y^)
只要最小化这个函数的结果值,就可得出我们想要的 θ \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)是机器学习和深度学习中两个重要的概念,主要涉及模型在训练数据和未见数据上的表现。
- 过拟合(Overfitting)
过拟合指的是模型在训练数据上表现很好,但在新数据(测试集或验证集)上表现较差的现象。换句话说,模型学到了训练数据中的噪声和细节,而不是数据的真正模式,导致泛化能力下降。
原因:
• 模型过于复杂(参数太多)
• 训练数据量不足
• 训练数据包含大量噪声
• 训练时间过长(训练轮数过多)
解决方案:
• 减少模型复杂度(降低参数量、使用较简单的模型)
• 增加训练数据(获取更多样本、数据增强)
• 正则化(L1/L2 正则化、Dropout)
• 使用早停(Early Stopping)(在验证集误差开始上升时停止训练)
⸻
- 泛化(Generalization)
泛化指的是模型在未见数据上的表现能力。一个模型泛化能力强,意味着它不仅能很好地学习训练数据的模式,还能应用这些模式来预测新数据。
提高泛化能力的方法:
• 适当调整模型复杂度(避免过拟合)
• 充分利用数据增强(Data Augmentation)
• 采用正则化方法
• 交叉验证(Cross Validation)选择合适的超参数
⸻
简单比喻
如果把机器学习比作学生考试:
• 过拟合 就像一个学生死记硬背训练集上的题目,一旦考试题目变了(新数据),就不会做了。
• 泛化 是学生学会了解题方法和知识点,即使题目变化也能解答正确。
确保模型具有良好的泛化能力,是机器学习中的核心目标之一。
总结
逻辑回归就是在线性回归基础上套一层sigmoid函数,将线性回归结果转换为概率值,逻辑回归就是计算概率的函数
似然函数就是已知自变量,利用它预测模型中的参数(本质就是条件概率函数)