算法梳理(二)逻辑回归原理及实现
逻辑回归原理
logistic回归又称logistic回归分析是一个分类算法,是一种广义的线性回归分析模型,它可以处理二元分类以及多元分类。常用于处理分类问题。
一、从线性回归到逻辑回归
我们知道,线性回归的模型是求出输出特征向量Y和输入样本矩阵X之间的线性关系系数θ,满足Y=Xθ。此时我们的Y是连续的,所以是回归模型。如果我们想要Y是离散的话,怎么办呢?一个可以想到的办法是,我们对于这个Y再做一次函数转换,变为g(Y)。如果我们令g(Y)的值在某个实数区间的时候是类别A,在另一个实数区间的时候是类别B,以此类推,就得到了一个分类模型。如果结果的类别只有两种,那么就是一个二元分类模型了。逻辑回归的出发点就是从这来的。下面我们开始引入二元逻辑回归。
二、二分类的逻辑回归
(一)过程推理
考虑二分类任务,其输出标记y值域是集合{0,1},而线性回归产生的预测值是实数,于是需要将实值转换为0/1值。于是我们用到了对数几率函数。
![](https://i-blog.csdnimg.cn/blog_migrate/31ea9bee484db7fc6fbd64a5016027c0.png)
函数图像如下:
![](https://i-blog.csdnimg.cn/blog_migrate/3de85d68b182591b98a4bf71042cd86b.png)
下面进行逻辑回归的分析和推理
y
^
\widehat{y}
y
表示f(x)模型的预测值
![](https://i-blog.csdnimg.cn/blog_migrate/7de7ac80ad4a302d7a93f19b90a004ee.png)
而在逻辑回归中我们输出一个概率值,则先用 p ^ \widehat{p} p 表示f(x)结果对应的概率
![](https://i-blog.csdnimg.cn/blog_migrate/623aa1c37c9c881758d2d9f49dc4fff5.png)
如果 p ^ \widehat{p} p 大于等于0.5,则结果为1, p ^ \widehat{p} p 小于等于0.5则结果为0
![](https://i-blog.csdnimg.cn/blog_migrate/e1b3e63176b303395acc5a2524c19429.png)
利用对数几率函数由线性回归到逻辑回归的转化:
![](https://i-blog.csdnimg.cn/blog_migrate/33780cccd5d2a695a3ba6cfb5266be31.png)
代入公式:
![](https://i-blog.csdnimg.cn/blog_migrate/dc83057df4b47c4148ba6a02482b0e15.png)
接下来就是给定x,y如何找到这个
θ
\theta
θ
我们可以使用最大似然函数直接进行求解
这里从另一个角度进行分析:
如图所示,如果y=1时, 即p>0.5, 这个时候概率p越小, 被错分为y=0的几率越大,损失函数便会越大。与之对应,如果y=0时, 即p<0.5, 这个时候概率p越大, 被错分为y=1的几率越大,损失函数便会越大。因此我们想到了下面的log函数。
![](https://i-blog.csdnimg.cn/blog_migrate/efc2a1afc2c5133c58a2164c805ffe95.png)
![](https://i-blog.csdnimg.cn/blog_migrate/46c7b8add1526225000d0591efe0aae7.png)
对应的y=0,1两个函数如下图:
可以看出两根曲线相应的表示成了y=1,y=0时对应的损失。
![](https://i-blog.csdnimg.cn/blog_migrate/3df08e3fd05c8abe7e9cf44f283f5198.png)
则最终的代价函数可定义为:
![](https://i-blog.csdnimg.cn/blog_migrate/76b59b03c1269876cab681eba3b308c3.png)
代入对数几率函数:
![](https://i-blog.csdnimg.cn/blog_migrate/31a5b50ff2bdce20a044ab4d31a46a62.png)
如何求解呢?我们先考虑梯度下降法的方式。
为了计算简便我们可以充分利用对数几率函数和log函数
![](https://i-blog.csdnimg.cn/blog_migrate/7ede1ce933e0e767c7cd2e50761779c4.png)
对 σ ( t ) \sigma(t) σ(t)求导可得:
![](https://i-blog.csdnimg.cn/blog_migrate/7bde00092d8a3180e3e9a17e8cf931a7.png)
然后再对log求导可得:
![](https://i-blog.csdnimg.cn/blog_migrate/29136c5804873a16153b3dff1f4ce3ec.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f9308981c65042111805b933ca4a4847.png)
可得到求导公式:
![](https://i-blog.csdnimg.cn/blog_migrate/ccd833ee7bb82e0299cce3591f390bee.png)
最终可得到对应的梯度矩阵
![](https://i-blog.csdnimg.cn/blog_migrate/72ffde90691a50aaed5fabb3011ed5dd.png)
之后取步长进行迭代,就可以得出最终的值 θ \theta θ。
(二)正则化
正则化是结构风险最小化策略的实现,是在经验风险上加上一个正则项(regularizer)或罚项(penalty term)。是模型选择的典型方法。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值越大。比较常用的正则化项有模型参数向量的范数,L1、L2等。
我们以线性回归为例,当我们的数据拟合出现过拟合的时候。
![](https://i-blog.csdnimg.cn/blog_migrate/7a66e40f120733e017eb3ab624f99787.png)
这个时候,我们可以发现w的一些值会变得很大。
![](https://i-blog.csdnimg.cn/blog_migrate/2f9726a92fd3adcda80fd4d794cd65ec.png)
而正则化的作用就是限制w参数大小。
首先来看加入L1正则化的优化目标(LASSO):
加入L1正则化的优化目标
m
i
n
1
2
m
∑
i
=
1
n
(
h
w
(
x
(
i
)
)
−
y
(
i
)
)
2
+
λ
∑
j
=
1
2
∣
w
j
∣
min \frac{1}{2m} \sum_{i=1}^{n} (h_w(x^{(i)})-y^{(i)})^2 + \lambda \sum_{j=1}^{2} |w_j|
min2m1i=1∑n(hw(x(i))−y(i))2+λj=1∑2∣wj∣
L1趋向于使得一部分的W值为零,可以起到特征选择的作用。
其中gamma是及其重要的参数,下面我们看一下在LASSO回归中gamma的取值对数据拟合的影响:
- gamma取0.01:
![](https://i-blog.csdnimg.cn/blog_migrate/68a18f9456b37aebe52c957ec6234f28.png)
- gamma取0.1:
![](https://i-blog.csdnimg.cn/blog_migrate/4c408dd9857ff5f3a4764688f7e93e90.png)
加入L2正则化的优化目标(Ridge):
m i n 1 2 m ∑ i = 1 n ( h w ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 2 w j 2 min \frac{1}{2m} \sum_{i=1}^{n} (h_w(x^{(i)})-y^{(i)})^2 + \lambda \sum_{j=1}^{2}w_j^2 min2m1i=1∑n(hw(x(i))−y(i))2+λj=1∑2wj2
L2趋向于一条曲线。
其中gamma是及其重要的参数,下面我们看一下在Ridge回归中gamma的取值对数据拟合的影响:
- gamma=1
![](https://i-blog.csdnimg.cn/blog_migrate/071c6b1c535f5a1ceeb3ca1578178485.png)
- gamma = 100
![](https://i-blog.csdnimg.cn/blog_migrate/f3577bd4922a1d7ce31ed416ed228f00.png)