文章目录
逻辑回归
逻辑回归本质
二分类算法,计算样本x属于某个类别的概率p,样本属于另一类别的概率是1-p,最终认为样本x属于概率最大的哪一个类别
Logistic/sigmoid函数
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_{\theta}(x)=g\left(\theta^{T} x\right)=\frac{1}{1+e^{-\theta^{T} x}} hθ(x)=g(θTx)=1+e−θTx1
损失函数
J ( θ ) = − ∑ i = 1 m ( y ( i ) ln h θ ( x ( i ) ) + ( 1 − y ( i ) ) ln ( 1 − h θ ( x ( i ) ) ) ) J(\theta)=-\sum_{i=1}^{m}\left(y^{(i)} \ln h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \ln \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right) J(θ)=−i=1∑m(y(i)lnhθ(x(i))+(1−y(i))ln(1−hθ(x(i))))
梯度下降算法的参数迭代公式
θ j = θ j + α ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) θ j = θ j + α ( y ( i ) − h θ ( x ( i ) ) ) x j ( i ) \theta_{j}=\theta_{j}+\alpha \sum_{i=1}^{m}\left(y^{(i)}-h_{\theta}\left(x^{(i)}\right)\right) x_{j}^{(i)}\\ \theta_{j}=\theta_{j}+\alpha\left(y^{(i)}-h_{\theta}\left(x^{(i)}\right)\right) x_{j}^{(i)} θj=θj+αi=1∑m(y(i)−hθ(x(i)))xj(i)θj=θj+α(y(i)−hθ(x(i)))xj(i)
逻辑回归面试题
什么是逻辑回归?
逻辑回归用来做分类,线性回归是Y=wX+b,将Y的结果带入到sigmoid函数中,就可以得到[0,1]之间的数,可以将其看成概率,再设置一个阈值,比如0.5,大于0.5的是正样本,小于0.5的是负样本。
什么是Sigmoid函数?
g
(
x
)
=
1
1
+
e
−
x
g(x)=\frac{1}{1+e^{-x}}
g(x)=1+e−x1
无论x取什么值,结果都在[0,1]内
损失函数是什么?
J ( θ ) = − ∑ i = 1 m ( y ( i ) ln h θ ( x ( i ) ) + ( 1 − y ( i ) ) ln ( 1 − h θ ( x ( i ) ) ) ) J(\theta)=-\sum_{i=1}^{m}\left(y^{(i)} \ln h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \ln \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right) J(θ)=−i=1∑m(y(i)lnhθ(x(i))+(1−y(i))ln(1−hθ(x(i))))
逻辑回归模型为什么用自然对数函数(ln)来作为损失函数?
因为逻辑回归模型中用到了sigmoid函数,sigmoid函数中有e^n, ln(e^n)=n
可以进行多分类吗?
可以
y={0,1,2,…,n},总共有n+1个类别
思路:
首先将问题转换为二分类问题,即y=0是一类,y={1,2,…,n}是另一类,求出这两类的概率;
再把y=1看成一类,y={0,2,…,n}是另一类,求出这两类的概率;
以此类推;
最后找出概率最高的那个类别,就是样本所属的类别。
y
∈
{
0
,
1
,
…
,
n
}
h
θ
(
0
)
(
x
)
=
P
(
y
=
0
∣
x
,
θ
)
h
θ
(
1
)
(
x
)
=
P
(
y
=
1
∣
x
,
θ
)
⋯
h
θ
(
n
)
(
x
)
=
P
(
y
=
n
∣
x
,
θ
)
prediction
=
max
j
(
h
θ
(
1
)
(
x
)
)
\begin{array}{c}{y \in\{0,1, \ldots, n\}} \\ {h_{\theta}^{(0)}(x)=P(y=0 | x, \theta)} \\ {h_{\theta}^{(1)}(x)=P(y=1 | x, \theta)} \\ {\cdots} \\ {h_{\theta}^{(n)}(x)=P(y=n | x, \theta)} \\ {\text { prediction }=\max _{j}\left(h_{\theta}^{(1)}(x)\right)}\end{array}
y∈{0,1,…,n}hθ(0)(x)=P(y=0∣x,θ)hθ(1)(x)=P(y=1∣x,θ)⋯hθ(n)(x)=P(y=n∣x,θ) prediction =maxj(hθ(1)(x))
总之,以二分类来一次划分,求出概率最高的类别
逻辑回归有什么优点?
- 输出概率,不是0,1
- 可解释性强
- 训练速度快
逻辑回归的目标函数中增大L1正则化会是什么结果?
所有的参数w都会变成0
逻辑回归的本质:
极大似然估计
逻辑回归的激活函数:
sigmoid函数
逻辑回归的损失函数:
交叉熵损失函数
J
(
θ
)
=
−
∑
i
=
1
m
(
y
(
i
)
ln
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
ln
(
1
−
h
θ
(
x
(
i
)
)
)
)
J(\theta)=-\sum_{i=1}^{m}\left(y^{(i)} \ln h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \ln \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right)
J(θ)=−i=1∑m(y(i)lnhθ(x(i))+(1−y(i))ln(1−hθ(x(i))))
为什么要使用交叉熵函数作为损失函数,而不是平方误差函数?
https://blog.csdn.net/syyyy712/article/details/78252722
https://blog.csdn.net/qq_24568487/article/details/80594944
https://blog.csdn.net/ddydavie/article/details/82668141
-
使用交叉熵函数 会克服 平方误差函数 更新权重过慢 的缺点,因为激活函数是sigmoid,
交叉熵损失函数的梯度里不包括 sigmoid函数的导数
而使用 平方误差函数 时,其梯度里包括sigmoid函数的导数,会使梯度下降缓慢
-
平方误差函数的图像是非凸的 存在局部最优
-
交叉熵损失函数是凸函数
详细理解:
因为使用平方误差函数的话, 损失函数会有很多局部最优点,为什么呢?
使用平方误差函数时,w和b的偏导数与损失函数的导数有关,而损失函数中使用了sigmoid函数,就有导数接近0的时候,就会导致w和b的偏导数很小,梯度很小,w和b的更新幅度小,训练缓慢,会产生局部最优点。
而使用交叉熵损失函数时,w和b的偏导数与损失函数的导数无关,与 预测值和真实值的差值 有关,也就是与误差有关。当误差越大时,w和b的偏导数越大,梯度越大,w和b更新就越快,训练的速度就越快
逻辑回归相比于线性回归有什么异同?
不同点:
逻辑回归解决分类问题, 线性回归解决回归问题
逻辑回归的因变量是离散的,线性回归的因变量是连续的
相同点:
二者都使用了极大似然函数对训练文本进行建模
求解参数时,都可以使用梯度下降法
为什么逻辑回归需要取对数?
因为概率的乘积会出现数值下溢出,因此取对数,转换为加法
LR如何解决低维不可分?
特征映射,通过特征变化的方式将低维空间映射到高维空间,而在低维空间线性不可以分的数据,在高维空间线性可分的概率会增大,
具体方法:核函数(高斯核函数,多项式核函数)
关于逻辑回归,连续特征离散化的好处???
在工业界,很少直接将连续值作为特征喂给逻辑回归模型,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:
- 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展
- 离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。
- 逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。
- 离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。
- 特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。
大概的理解:1)计算简单;2)简化模型;3)增强模型的泛化能力,不易受噪声的影响