逻辑回归的常见问题

article/2025/11/7 2:39:31

文章目录

      • 逻辑回归概括
      • 逻辑回归的基本假设
      • 逻辑回归的损失函数
      • 交叉熵损失函数的原理
      • 交叉熵损失函数的直观理解
      • logistic回归和线性回归的关系
      • 线性回归和逻辑回归的异同
      • 逻辑回归是线性模型吗
      • 类别的分界线是什么
      • 逻辑回归输出值是概率吗
      • 逻辑回归也可以处理多分类
      • 逻辑回归的求解方法
      • 梯度下降算法的原理
      • Hessian 矩阵正定性
      • 概率和似然
      • 极大似然估计
      • 特征相关性
      • 特征离散化
      • 逻辑回归的优缺点
      • 过拟合overfitting
      • 4: L1正则和L2正则有什么区别
      • 过拟合解决方法
      • 并行化
      • 逻辑回归与SVM
      • 选择LR还是SVM
      • 逻辑回归与最大熵模型

逻辑回归概括

逻辑回归假设数据服从伯努利分布,采用极大似然估计的思想,运用梯度下降法来求解参数,达到将数据二分类的目的。

逻辑回归的基本假设

逻辑回归的第一个基本假设是假设数据服从伯努利分布(0-1分布)
逻辑回归的第二个假设是假设样本为正的概率(假设函数) h ( x ) = s i g m o i d ( w T X ) h(x) = sigmoid(w^TX) h(x)=sigmoid(wTX)

逻辑回归的损失函数

我们采用似然函数作为模型更新的loss,最大化似然函数

在这里插入图片描述
这个损失函数很难求导,于是我们将其取log,变成对数似然函数并转化为
在这里插入图片描述

交叉熵损失函数的原理

单个样本的交叉熵损失函数:

L = − [ y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ] L=-[y \log \hat{y}+(1-y) \log (1-\hat{y})] L=[ylogy^+(1y)log(1y^)]

为什么它能表征真实样本标签和预测概率之间的差值?也就是交叉熵损失函数的数学原理。

因为Sigmoid 函数的输出表征了当前样本标签为 1 的概率,因此也可以表示成: y ^ = P ( y = 1 ∣ x ) \hat{y}=P(y=1|x) y^=P(y=1x)

对应的,当前样本标签为 0 的概率就可以表达成: 1 − y ^ = P ( y = 0 ∣ x ) 1−\hat{y}=P(y=0|x) 1y^=P(y=0x)

把上面两种情况整合到一起:
P ( y ∣ x ) = P ( y = 1 ∣ x ) y ∗ P ( y = 0 ∣ x ) ( 1 − y ) P(y|x)=P(y=1|x)^{y} *P(y=0|x)^{(1−y)} P(yx)=P(y=1x)yP(y=0x)(1y)

即:

P ( y ∣ x ) = y ^ y ⋅ ( 1 − y ^ ) 1 − y P(y | x)=\hat{y}^{y} \cdot(1-\hat{y})^{1-y} P(yx)=y^y(1y^)1y

我们希望的是概率 P(y|x) 越大越好。极大似然估计,是在给定当前样本结果的情况下,反推最有可能导致这样结果的参数值,要求的是似然函数最大,或者说损失函数最小时,对应的参数。

首先,我们对 P(y|x) 引入 log 函数,因为 log 运算并不会影响函数本身的单调性。则有:

log ⁡ P ( y ∣ x ) = log ⁡ ( y ^ y ⋅ ( 1 − y ^ ) 1 − y ) = y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) \log P(y | x)=\log \left(\hat{y}^{y} \cdot(1-\hat{y})^{1-y}\right)=y \log \hat{y}+(1-y) \log (1-\hat{y}) logP(yx)=log(y^y(1y^)1y)=ylogy^+(1y)log(1y^)

我们希望 log P(y|x) 越大越好,反过来,只要 log P(y|x) 的负值 -log P(y|x) 越小就行了。那我们就可以引入损失函数,且令 Loss = -log P(y|x)即可。则得到损失函数为:

L = − [ y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ] L=-[ y \log \hat{y}+(1-y) \log (1-\hat{y})] L=[ylogy^+(1y)log(1y^)]

我们已经推导出了单个样本的损失函数,是如果是计算 N 个样本的总的损失函数,只要将 N 个 Loss 叠加起来就可以了:

L = − ∑ i = 1 N y ( i ) log ⁡ y ^ ( i ) + ( 1 − y ( i ) ) log ⁡ ( 1 − y ^ ( i ) ) L=-\sum_{i=1}^{N} y^{(i)} \log \hat{y}^{(i)}+\left(1-y^{(i)}\right) \log \left(1-\hat{y}^{(i)}\right) L=i=1Ny(i)logy^(i)+(1y(i))log(1y^(i))


交叉熵损失函数的直观理解

无论真实样本标签 y 是 0 还是 1,L (cost) 都表征了预测输出与 y 的差距。

并且预测输出与 y 差得越多,L 的值越大,也就是说对当前模型的 “ 惩罚 ” 越大,而且是非线性增大,是一种类似指数增长的级别。这是由 log 函数本身的特性所决定的。这样的好处是模型会倾向于让预测输出更接近真实样本标签 y。

在这里插入图片描述

logistic回归和线性回归的关系

逻辑回归和线性回归首先都是广义的线性回归,逻辑回归使用了线性回归,并且多了个Sigmod函数,使样本映射到[0,1]之间的数值,从而来处理分类问题(同时也减少了离群点的影响)。logistic回归分类模型的预测函数,是在用线性回归模型的预测值,去逼近真实标记的对数几率

从宏观来看,线性回归是在拟合输入向量x的分布,而逻辑回归中的线性函数是在拟合决策边界,它们的目标是不一样的。

线性回归模型:
    在这里插入图片描述

写成向量形式为:
    在这里插入图片描述

“广义线性回归”模型为:
    在这里插入图片描述

上诉线性回归模型只能够进行回归学习,但是若要是做分类任务,就需要将分类任务的真实标记 y y y与线性回归模型的预测值联系起来。

线性回归模型产生的预测值 z = w x + b z=wx+b z=wx+b是一个实值,二分类问题的输出的标记y={0,1},所以我们将实值y转化成0/1值便可,这样有一个可选函数便是“单位阶跃函数”:
    在这里插入图片描述

但是单位阶跃函数是非连续的函数,我们需要一个连续的函数,来输出0-1之间的分类概率,“Sigmoid函数”便可以很好的取代单位阶跃函数:

    在这里插入图片描述
这样我们在原来的线性回归模型外套上sigmoid函数便形成了logistic回归模型的预测函数,可以用于二分类问题:
    在这里插入图片描述
对上式的预测函数做一个变换为:
    在这里插入图片描述
若将y视为样本 x x x 作为正例的可能性,则 1 − y 1-y 1y 便是其反例的可能性。二者的比值便被称为“几率”,反映了 x x x 作为正例的相对可能性,再取对数就叫对数几率。这也是logistic回归又被称为对数几率回归的原因!

总结一下logistic回归和线性回归模型的关系!!!!

logistic回归分类模型的预测函数,是在用线性回归模型的预测值,去逼近真实标记的对数几率!这样也便实现了上面说的将线性回归的预测值和分类任务的真实标记联系在了一起!

线性回归和逻辑回归的异同

区别1:逻辑回归输出的是离散型变量,用于分类,线性回归输出的是连续性的,用于预测。

区别2:逻辑回归是假设变量服从伯努利分布,线性回归假设变量服从高斯分布。

区别3:逻辑回归是用最大似然法去计算假设函数中的最优参数值,而线性回归是用最小二乘法去对自变量因变量关系进行拟合。

相同1:logistic回归分类模型的预测函数,是在用线性回归模型的预测值,去逼近真实标记的对数几率!不过,线性回归用最小二乘法拟合输入输出变量的关系,而逻辑回归中的线性函数是在拟合决策边界,它们的目标是不一样的。

相同2:我们可以认为二者都使用了极大似然估计来对训练样本进行建模。线性回归使用最小二乘法,实际上就是在自变量x与超参数θ确定,因变量y服从正态分布的假设下,使用极大似然估计的一个化简;而逻辑回归中通过对似然函数的转化和求解,得到最佳参数θ。

相同3:二者在求解超参数的过程中,都可以使用梯度下降的方法,这也是监督学习中一个常见的相似之处。

逻辑回归是线性模型吗

逻辑回归是一种广义线性模型,它引入了Sigmod函数,是非线性模型,但本质上还是一个线性回归模型,因为除去Sigmod函数映射关系,其他的算法原理,步骤都是线性回归的。

逻辑回归的思路是,先拟合决策边界(这里的决策边界不局限于线性,还可以是多项式),再建立这个边界与分类的概率联系, 从而得到了二分类情况下的概率。

类别的分界线是什么

logistic回归分类模型的预测函数,是在用线性回归模型的预测值,去逼近真实标记的对数几率!

线性回归模型的预测值 w T x w^Tx wTx才是分隔曲线,它将样本点分为 w T x ≥ 0 w^Tx ≥ 0 wTx0 w T x < 0 w^Tx < 0 wTx<0 两部分; sigmoid 函数不是样本点的分隔曲线,它表示的是逻辑回归的预测结果。
分隔曲线
很多时候,直线并不能很好地作为决策边界,如下图所示:
在这里插入图片描述
此时需要使用多项式模型添加更多的特征:

h ( x ) = g ( w T x ) = g ( w 0 + w 1 x 1 + w 2 x 2 + w 3 x 1 2 + w 4 x 2 2 ) h(x)=g\left(w^{T} x\right)=g\left(w_{0}+w_{1} x_{1}+w_{2} x_{2}+w_{3} x_{1}^{2}+w_{4} x_{2}^{2}\right) h(x)=g(wTx)=g(w0+w1x1+w2x2+w3x12+w4x22)

这相当于添加了两个新的特征: w 3 = x 1 2 w_3=x_1^2 w3=x12 w 4 = x 2 2 w_4=x_2^2 w4=x22

注意,此时仍然是线性模型,因为模型线性与否是针对参数来看的。

添加的特征越多,曲线越复杂,对训练样本的拟合度越高,同时也更容易导致过拟合而丧失泛化性。

逻辑回归输出值是概率吗

逻辑回归模型之所以是sigmoid 的形式,源于我们假设y服从伯努利分布,伯努利分布又属于指数分布族,经过推导,将伯努利分布变成指数分布族的形式后。我们发现伯努利分布的唯一参数Φ与指数分布族中的参数η具有sigmoid函数关系,于是我们转而求η与x的关系,此时,我们又假设η与x具有线性关系。

至此,找到了我们要用的模型的样子,也就是逻辑回归。

逻辑回归输出的到底是不是概率呢?只有在满足 y服从伯努利分布,η和x之间存在线性关系时,输出值才是概率值。不满足的情况下,得到的输出值,只是置信度 。

逻辑回归也可以处理多分类

在这里插入图片描述

将多分类转换为二分类,对于有 k 分类,需要训练 k 个不同的逻辑回归模型。
在这里插入图片描述

如上图所示,三分类转换为三个二分类,其中上标表示分类的类别:
在这里插入图片描述

逻辑回归的求解方法

由于该极大似然函数无法直接求解,我们一般通过对该函数进行梯度下降来不断逼急最优解。

有随机梯度下降,批梯度下降,small batch 梯度下降三种方式,面试官可能会问这三种方式的优劣以及如何选择最合适的梯度下降方式。

批梯度下降会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据, 计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢。

随机梯度下降是以高方差频繁更新, 优点是使得sgd会跳到新的和潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂。

小批量梯度下降结合了sgd和batch gd的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中我们采用这种方法。

其实这里还有一个隐藏的更加深的加分项,看你了不了解诸如Adam,动量法等优化方法。因为上述方法其实还有两个致命的问题。

第一个是如何对模型选择合适的学习率。 自始至终保持同样的学习率其实不太合适。因为一开始参数刚刚开始学习的时候,此时的参数和最优解隔的比较远,需要保持一个较大的学习率尽快逼近最优解。但是学习到后面的时候,参数和最优解已经隔的比较近了,你还保持最初的学习率,容易越过最优点,在最优点附近来回振荡,通俗一点说,就很容易学过头了,跑偏了。

第二个是如何对参数选择合适的学习率。 在实践中,对每个参数都保持的同样的学习率也是很不合理的。有些参数更新频繁,那么学习率可以适当小一点。有些参数更新缓慢,那么学习率就应该大一点。这里我们不展开,有空我会专门出一个专题介绍。

梯度下降算法的原理

梯度表达式:

∇ = d f ( w ) d w \nabla=\frac{df(w)}{dw} =dwdf(w)

w w w 是自变量, f ( w ) f(w) f(w)是关于 w w w的函数, ∇ \nabla 表示梯度。

如果函数 f ( w ) f(w) f(w) 是凸函数,那么就可以使用梯度下降算法进行优化:

w = w 0 − η ⋅ ∇ f ( w 0 ) w=w_0−η⋅∇f(w_0) w=w0ηf(w0)

之所以写成这样,是因为局部下降最快的方向是梯度的负方向。可以用泰勒展开式来解释。

泰勒展开式利用的就是曲线函数的局部线性近似这个概念。以一阶泰勒展开式为例:

f ( w ) ≈ f ( w 0 ) + ( w − w 0 ) ⋅ ∇ f ( w 0 ) f(w)≈f(w_0)+(w−w_0)⋅∇f(w_0) f(w)f(w0)+(ww0)f(w0)

其中, w − w 0 w−w_0 ww0 是微小矢量,它的大小就是步进长度 η η η,而 w − w 0 w−w_0 ww0 的单位向量用 v v v 表示。则 w − w 0 w−w_0 ww0 可表示为: w − w 0 = η v w−w_0=ηv ww0=ηv

特别需要注意的是, w − w 0 w−w_0 ww0不能太大,否则线性近似就不够准确,一阶泰勒近似也不成立了。替换之后,表达式为:

f ( w ) ≈ f ( w 0 ) + η v ⋅ ∇ f ( w 0 ) f(w)≈f(w_0)+ηv⋅∇f(w_0) f(w)f(w0)+ηvf(w0)

局部下降的目的是希望每次 w w w 更新,都能让函数值 f ( w ) f(w) f(w) 变小。也就是说,上式中,我们希望 f ( w ) < f ( w 0 ) f(w)<f(w_0) f(w)<f(w0),则有:

f ( w ) − f ( w 0 ) ≈ η v ⋅ ∇ f ( w 0 ) < 0 f(w)−f(w_0)≈ηv⋅∇f(w_0)<0 f(w)f(w0)ηvf(w0)<0

因为 η η η 为标量,且一般设为正值,所以可以忽略,不等式变成了:

v ⋅ ∇ f ( w 0 ) < 0 v⋅∇f(w_0)<0 vf(w0)<0

上面这个不等式非常重要! v v v ∇ f ( w 0 ) ∇f(w_0) f(w0) 都是向量, ∇ f ( w 0 ) ∇f(w_0) f(w0) 是当前位置的梯度方向, v v v 表示下一步前进的单位向量,是需要我们求解的,有了它,就能根据 w − w 0 = η ⋅ v w−w_0=η·v ww0=ηv 确定 w w w值了。

插播一条向量内积的知识:
在这里插入图片描述

A 和B均为向量,α为两个向量之间的夹角。A和B的乘积为:
A ⋅ B = ∣ ∣ A ∣ ∣ ⋅ ∣ ∣ B ∣ ∣ ⋅ c o s ( α ) A⋅B=||A||⋅||B||⋅cos(α) AB=ABcos(α)

||A||和||B||均为标量,在||A||和||B||确定的情况下,只要cos(α)=−1,即A和B完全反向,就能让A和B的向量乘积最小(负最大值)。

所以!当 v v v ∇ f ( w 0 ) ∇f(w_0) f(w0)互为反向,即 v v v 为当前梯度方向的负方向的时候,能让 v ⋅ ∇ f ( w 0 ) v⋅∇f(w_0) vf(w0) 负最大,也就保证了 v v v 的方向是局部下降最快的方向。

v = − ∇ f ( w 0 ) ∥ ∇ f ( w 0 ) ∥ v=-\frac{\nabla f\left(w_{0}\right)}{\left\|\nabla f\left(w_{0}\right)\right\|} v=f(w0)f(w0)

之所以要除以模,因为 v v v 是单位向量。

求出最优解 v v v 之后,带入到 w − w 0 = η v w−w_0=ηv ww0=ηv 中,得:

w = w 0 − η ∇ f ( w 0 ) ∥ ∇ f ( w 0 ) ∥ w=w_0-η\frac{\nabla f\left(w_{0}\right)}{\left\|\nabla f\left(w_{0}\right)\right\|} w=w0ηf(w0)f(w0)

一般地,因为 ∣ ∣ ∇ f ( w 0 ) ∣ ∣ ||∇f(w_0)|| f(w0) 是标量,可以并入到步进因子 η η η 中,即简化为:

w = w 0 − η ∇ f ( w 0 ) w=w_0−η∇f(w_0) w=w0ηf(w0)

这样,我们就推导得到了梯度下降算法中 w w w 的更新表达式。

Hessian 矩阵正定性

在这里插入图片描述

概率和似然

在英文中,似然(likelihood)和概率(probability)是同义词,都指事件发生的可能性。但在统计中,似然与概率是不同的东西。

概率是已知参数,对结果可能性的预测。
似然是已知结果,对参数是某个值的可能性预测。

对于函数P(x|θ), 输入有两个:x表示某一个具体的数据;θ 表示模型的参数。从不同的观测角度来看可以分为以下两种情况:

  • 如果 θ 是已知确定的,x 是变量,则 P(x|θ) 称为概率函数 (probability function),它描述对于不同的样本点 x ,其出现概率是多少。
  • 如果 x 是已知确定的,θ 是变量,则 P(x|θ) 称为似然函数 (likelihood function),它表示在不同的 θ 下,出现 x 这个样本点的概率是多少,也记作 L(θ|x) 或 L(x;θ) 或 f(x;θ)。

极大似然估计

给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,“模型已定,参数未知”

例如,我们知道这个分布是正态分布,但是不知道均值和方差;或者是二项分布,但是不知道均值。 最大似然估计(MLE,Maximum Likelihood Estimation)就可以用来估计模型的参数。

MLE的目标是找出一组参数,使得模型产生出观测数据的概率最大。
在这里插入图片描述
其中 P( X; μ) 就是似然函数,表示在参数μ下出现观测数据的概率。我们假设每个观测数据是独立的,那么有
在这里插入图片描述
为了求导方便,一般对目标取log。 所以最优化对似然函数等同于最优化对数似然函数:
在这里插入图片描述

特征相关性

逻辑回归在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100遍,会造成怎样的影响?

先说结论,如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。

但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。

如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样,只是可能中间很多特征的值正负相消了。

为什么我们还是会在训练的过程当中将高度相关的特征去掉?

  • 去掉高度相关的特征会让模型的可解释性更好
  • 可以大大提高训练的速度。如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。其次是特征多了,本身就会增大训练的时间。

特征离散化

在工业界,很少直接将连续值作为特征喂给逻辑回归模型,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:

稀疏向量内积乘法运算速度快,计算结果方便存储,容易scalable(扩展)。

离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。

特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。

逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。

离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。

李沐指出,模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。

大概的理解:
1)计算简单
2)简化模型
3)增强模型的泛化能力,不易受噪声的影响

逻辑回归的优缺点

工业界常用模型

优点:

  • 形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。
  • 模型效果不错。在工程上是可以接受的(作为baseline),如果特征工程做的好,效果不会太差,并且特征工程可以大家并行开发,大大加快开发的速度。
  • 训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。并且逻辑回归的分布式优化sgd发展比较成熟,训练的速度可以通过堆机器进一步提高,这样我们可以在短时间内迭代好几个版本的模型。
  • 资源占用小,尤其是内存。因为只需要存储各个维度的特征值。
  • 方便输出结果调整。逻辑回归可以很方便的得到最后的分类结果,因为输出的是每个样本的概率分数,我们可以很容易的对这些概率分数进行cut off,也就是划分阈值(大于某个阈值的是一类,小于某个阈值的是一类)。

缺点:

  • 准确率并不是很高。因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布。
  • 很难处理数据不平衡的问题。举个例子:如果我们对于一个正负样本非常不平衡的问题比如正负样本比 10000:1,就算我们把所有样本都预测为正也能使损失函数的值比较小。但是作为一个分类器,它对正负样本的区分能力不会很好。
  • 处理非线性数据较麻烦。逻辑回归在不引入其他方法的情况下,只能处理线性可分的数据,或者进一步说,处理二分类的问题。
  • 逻辑回归本身无法筛选特征。有时候,我们会用gbdt来筛选特征,然后再上逻辑回归。

过拟合overfitting

过拟合现象是指对训练数据预测很好但是对未知数据预测不行的现象,直观的表现如下图所示, 随着训练过程的进行,模型复杂度增加,在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大——因为训练出来的网络过拟合了训练集, 对训练集外的数据却不work, 这称之为泛化(generalization)性能差

对新数据进行预测的能力称为泛化能力。一般来说泛化能力差都是由于发生了过拟合现象,通常是因为模型过于复杂,或者训练数据太少。

模型复杂体现在两个方面,一是参数过多,二是参数值过大。参数值过大会导致导数非常大,那么拟合的函数波动就会非常大,即下图所示,从左到右分别是欠拟合、拟合和过拟合。

在这里插入图片描述
从而,解决过拟合可以从两个方面入手,一是增加训练集个数,一是减少模型复杂度。比如,正则化 Regularization,随机失活 dropout,提前终止 early stopping

4: L1正则和L2正则有什么区别

相同点:都用于避免过拟合

不同点:

  • L1正则是拉普拉斯先验,而L2正则则是高斯先验。
  • L1可以产生稀疏解,可以让一部分特征的系数缩小到0,从而间接实现特征选择。所以L1适用于特征之间有关联的情况。L2让所有特征的系数都缩小,但是不会减为0,它会使优化求解稳定快速。所以L2适用于特征之间没有关联的情况
  • 因为L1和服从拉普拉斯分布,所以L1在0点处不可导,难以计算,这个方法可以使用Proximal Algorithms或者ADMM来解决。

过拟合解决方法

  • 正则化(Regularization),常用的有L1正则化和L2正则化。

  • 随机失活(dropout)
    在训练的运行的时候,让神经元以超参数p的概率被激活(也就是1-p的概率被设置为0), 每个w因此随机参与, 使得任意w都不是不可或缺的, 效果类似于数量巨大的模型集成。

  • 逐层归一化(batch normalization)
    这个方法给每层的输出都做一次归一化(网络上相当于加了一个线性变换层), 使得下一层的输入接近高斯分布. 这个方法相当于下一层的w训练时避免了其输入以偏概全, 因而泛化效果非常好.

  • 提前终止(early stopping)
    实践表明, 追求细粒度极小值具有较高的泛化误差。

  • 典型的方法是交叉验证+提前终止
    每次训练前, 将训练数据划分为若干份, 取一份为测试集, 其他为训练集, 因为每份都有一次机会当测试集, 所以此方法称之为交叉验证。 交叉验证的错误率最小时可以认为泛化性能最好, 这时候训练错误率虽然还在继续下降, 但也得终止继续训练了。

并行化

逻辑回归的并行化最主要的目标就是计算梯度。梯度计算里面最主要的就是矩阵乘法,一般的做法都是想办法将矩阵切割成大小合适的块。

针对二分类,现在有M个样本,N个特征,假如有m*n个计算节点,并且将计算节点排列成m行n列,那么每个节点分配M/m个样本,N/n个特征,同一样本的特征对应节点的行号相同,不同样本相同维度的特征对应节点的列号相同。
在这里插入图片描述

具体参考 并行逻辑回归 —— 冯扬的博客

算法的并行化有两种

  • 无损的并行化:算法天然可以并行,并行只是提高了计算的速度和解决问题的规模,但和正常执行的结果是一样的。
  • 有损的并行化:算法本身不是天然并行的,需要对算法做一些近似来实现并行化,这样并行化之后的双方和正常执行的结果并不一致,但是相似的。

基于Batch的算法 (Batch-GD, LBFGS, OWLQN)都是可以进行无损的并行化的。而基于SGD的算法(Ad Predictor, FTRL-Proximal)都只能进行有损的并行化。

并行化的工具MPI和OpenMP

逻辑回归与SVM

都是分类算法,都是监督学习算法,都是判别模型,都能通过核函数方法针对非线性情况分类,目标都是找一个分类超平面,都能减少离群点的影响。

损失函数不同,逻辑回归是cross entropy loss,svm是hinge loss,不过这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。

数据分布方面,逻辑回归在优化参数时所有样本点都参与了贡献,svm则只取离分离超平面最近的支持向量样本。这也是为什么逻辑回归不用核函数,它需要计算的样本太多。并且由于逻辑回归受所有样本的影响,当样本不均衡时需要平衡一下每一类的样本个数。

样本点的权重处理,SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。两者的根本目的都是一样的。

模型建立方面,LR对概率建模,可以给出每个点属于每一类的概率,而SVM是非概率的,对分类超平面建模。前者然是基于统计的方法,后者是基于几何的方法。

逻辑回归是经验风险最小化,svm是结构风险最小化。这点体现在svm自带L2正则化项,逻辑回归并没有,但两个方法都可以增加不同的正则化项,如l1,l2等等。

SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算量。

选择LR还是SVM

From Andrew Ng
假设: n = 特征数量,m = 训练样本数量

1)如果n相对于m更大,比如 n = 10,000,m = 1,000,则使用lr
理由:特征数相对于训练样本数已经够大了,使用线性模型就能取得不错的效果,不需要过于复杂的模型;

2)如果n较小,m比较大,比如n = 10,m = 10,000,则使用SVM(高斯核函数)理由:在训练样本数量足够大而特征数较小的情况下,可以通过使用复杂核函数的SVM来获得更好的预测性能,而且因为训练样本数量并没有达到百万级,使用复杂核函数的SVM也不会导致运算过慢;

3)如果n较小,m非常大,比如n = 100, m = 500,000,则应该引入/创造更多的特征,然后使用 lr 或者线性核函数的SVM
理由:因为训练样本数量特别大,使用复杂核函数的SVM会导致运算很慢,因此应该考虑通过引入更多特征,然后使用线性核函数的SVM或者lr来构建预测性更好的模型。

逻辑回归与最大熵模型

逻辑回归跟最大熵模型MaxEnt没有本质区别。逻辑回归是最大熵对应类别为二类时的特殊情况,也就是当逻辑回归类别扩展到多类别时,就是最大熵模型。


http://chatgpt.dhexx.cn/article/68D9jy3c.shtml

相关文章

SQL逻辑运算

SQL逻辑运算符 SQL 逻辑运算符逻辑运算符 ALL逻辑运算符 AND逻辑运算符 ANY逻辑运算符 BETWEEN逻辑运算符 EXISTS逻辑运算符 IN逻辑运算符 LIKE逻辑运算符 NOT逻辑运算符 OR逻辑运算符 IS NULL SQL 逻辑运算符 运算符描述ALL所有运算符用于比较的值到另一个值组中的所有值ANDA…

逻辑英语-写作

指日可待 In this way, a better tomorrow will not be a question of if, but when.1、shoulder 我们应当承担起保护环境的重任。 We must shoulder the liability of -----2. Word 我对你的感谢已经溢于言表 My thanks to you is beyond words.3. house 容纳 A wise man she…

逻辑英语公式R1+R2

一、主谓宾 1.1、主语 一般是名词&#xff0c;一般是动作的发出者&#xff0c;或者是被描述的对象 1.2、宾语 一般也是名词&#xff0c;一般是主语作用到的对象。 1.3、谓语 如果没有谓语那么这个世界就是静态&#xff0c;谓语就是来让这个主语和谓语产生关系。 常见的是…

串口USART和UART

串口通信&#xff1a; UART是通用串行数据总线&#xff0c;用于异步通信。该总线双向通信&#xff0c;可以实现全双工传输和接受。UART主要用于主机与辅助设备通信。 UART的功能计算器内部采用并行数据&#xff0c;不能直接把数据发到Modem&#xff0c;必须经过UART整理才能进…

【通信接口】UART、IIC、SPI

目录 一、预备知识 1、串行与并行 2、单工与双工 3、波特率 二、UART 三、IIC 四、SPI &#xff08;一对一、一对多&#xff09; 五、IIC、SPI异同点 参考文章&#xff1a;这些单片机接口&#xff0c;一定要熟悉&#xff1a;UART、I2C、SPI、TTL、RS232、RS422、RS485…

基于FPGA的UART接口设计

一、顶层设计思路&#xff1a; UART即通用异步收发传输接口&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;&#xff0c;简称串口&#xff0c;是一种常用的通信接口&#xff0c;其协议原理就不赘述了&#xff0c;不了解的可以自己查阅资料。&#xff08;…

单片机通信接口:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB

参考资料&#xff1a; 这些单片机接口&#xff0c;一定要熟悉&#xff1a;UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡 秒懂所有USB接口类型&#xff0c;USB接口大全 1. UART UART(通用异步收发器)指的是一种物理接口形式(硬件)。 UART是异步&#xff0c;全双…

通信接口:UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB

1. UART UART(通用异步收发器)指的是一种物理接口形式(硬件)。 UART是异步&#xff0c;全双工串口总线。它比同步串口复杂很多。有两根线&#xff0c;一根TXD用于发送&#xff0c;一根RXD用于接收。 UART的串行数据传输不需要使用时钟信号来同步传输&#xff0c;而是依赖于发送…

USB,串口(RS232、RS485),UART接口

USB转串口即实现计算机USB接口到通用串口之间的转换。为没有串口的计算机提供快速的通道&#xff0c;而且&#xff0c;使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。作为应用最广泛的USB接口&#xff0c;每台电脑必不可少的通讯接口之一&#xff0c;它的最大…

Uart接口的详细解释

我面试的时候一般喜欢问应聘者一个问题&#xff1a;UART与RS232/RS485的区别与联系&#xff1f;很多人对于这个问题答得都不是很好。还有些人压根就没有想过这个问题&#xff0c;一直认为他们是同一个东西&#xff0c;就是咱们俗称的串口。 我刚入嵌入式的大门时&#xff0c;对…

UART接口说明

逼近年关事情多&#xff0c;少了更新。今天冒个泡。说下UART通信接口。 UART扫盲 前面做了SPI和I2C&#xff0c;前两者一个是摩托&#xff0c;一个是飞利浦背书&#xff0c;简单好理解。这个UART就相对复杂一点&#xff0c;全称universal Asynchronous Receiver/Transmitter …

UART接口详解

文章目录 简介硬件接线RS232RS485RS232和RS485比较 通信原理uart和usart的区别实例针对STM32的串口数据位特点&#xff0c;改成对应PC的串口数据校验当使用9600波特率的时候&#xff0c;通讯稳定&#xff0c;当使用115200波特率的时候&#xff0c;通讯变得不稳定。 简介 UART全…

UART接口介绍

0 Preface/Foreword UART是Universal Asynchronous Receiver and Transmitter简称&#xff0c;中文为 通用异步接收和发送器&#xff0c;是常用的串行通讯接口。 RS-232&#xff1a;RS-232标准接口&#xff08;aka. EIA RS-232&#xff09;是常用的串行通信接口标准之一&#…

一文理解UART通信

还记得当年的打印机&#xff0c;鼠标和调制解调器吗?他们都有巨大笨重的连接器和粗电缆&#xff0c;并且必须拧到你的电脑上。这些设备正是使用UART协议与计算机进行通信。虽然USB几乎完全取代了旧的电缆和连接器&#xff0c;但UART绝对没有过时。您会发现目前许多项目中使用U…

Ajax传json对象(jQuery)

Ajax传json对象 相信很多小伙伴想要通过Ajax传输json数据给后端&#xff0c;本来直接发送一个data: JSON.stringify(obj)就可以了&#xff0c;但是发现后端的请求参数中有一个参数需要int类型&#xff0c;这个时候就需要用到对象了。 封装对象 首先得到数据并封装对象 &…

十分钟搞懂JSON(JSON对象---JSON字符串---对象 之间的区别)

好记性不如烂笔头&#xff0c;相信我&#xff0c;看了之后你会彻底搞懂JSON 前言&#xff1a;前天被JSON对象&#xff0c;JSON字符串&#xff0c;JAVA对象搞混了&#xff0c;不知道各自代表的意思&#xff0c;我就查了资料&#xff0c;总结为一篇博文。 另外我想List<User&g…

【python】将json字符串转化为json对象

首先导入python自带的json模块 import json loads方法将json<key,value>字符串转化为dict形式 info {"name":"Lucy","age":22,"addr": "China"} print(type(info)) info_dict json.loads(info) print(info_dict)…

将js对象转化为json对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script type"text/javascript">//编写 一个JavaScript对象&#xff0c;var user {name: "asdas",age…

Mysql JSON对象和JSON数组查询

文章目录 1. 函数说明2. JSON对象3. 字符串JSON数组3.1 AND关系3.2 OR关系 4. 对象数组5. 集成 Mybatis plus6. 模糊查询7. json_table7.1 分组计算总数7.2 对象去重 file_type可以是 varchar&#xff0c;也可以是 json类型 1. 函数说明 JSON_CONTAINS(json_doc, val[, path…

Json对象和Json字符串的区别

Json对象和Json字符串的区别 </h1><div class"clear"></div><div class"postBody"><div id"cnblogs_post_body" class"blogpost-body blogpost-body-html">1、Json概念 概念&#xff1a;JSON (JavaSc…