onesimple

逻辑回归与线性回归原理探微


封面

  回归和分类是机器学习解决的最重要的问题,本篇主要整理了线性回归和逻辑回归的基本推理过程和工程实践应用,首先对两种回归的方法做一下比较:

线性回归: 最小二乘法推导,预测连续值

逻辑回归: 基于最大似然估计,主要解决二分类问题,也可用于连续值的预测

1.线性回归

问题引出

  房价y和房屋面积x之间的关系,我们一般估计为线性关系,即目标函数为:

$$
f(x) = ax + b
$$
$$
f(x) \approx y
$$
根据样本很容易计算出a、b,也就能根据一个给定的面积x估算出房价了。\
如果有影响房价的不止一个因素(现实中往往如此,比如国民平均收入水平也是影响房价的一个因素),就是一个多变量问题,这时我们估计的目标函数就变成多元的了,如果有m个因素,记为列向量:
$$\sum_{i=1}^n a_i=0$$

$$
x = (x_0,x_1,…,x_{m-1})
$$
则要求解的参数w的也应该是m个,也记为列向量
$$
w =
\left (
\begin{matrix}
w_0 \\
w_1 \\
… \\
w_{m-1}
\end{matrix}
\right )
$$
预测的f(x)是一个值,f(x) = ax +b的形式就变成:
$$
f = xw
$$
推广到样本空间,记第i个样本为:
$$
x_i = (x_{i0}, x_{i1},…,x_{i,m-1})
$$
如果有n个样本,样本空间表示为矩阵X:
$$
X_{n \times m} =
\left (
\begin{matrix}
x_{00} & x_{01} & … & x_{0,m-1} \\
x_{10} & x_{11} & … & x_{1,m-1} \\
… & … & … & … \\
x_{n-1,0} & x_{n-1,1} & … & x_{n-1,m-1}
\end{matrix}
\right )
$$
则预测的所有f值的向量为:
$$
f_{n \times 1} =
\left (
\begin{matrix}
f_0 \\
f_1 \\
… \\
f_{n-1}
\end{matrix}
\right )
=
X_{n \times m}w_{m \times 1}
$$
预测值和实际值一般会有一个误差,记为e
$$
y_{n \times 1} = f_{n \times 1} + e_{n \times 1}
$$
任意第i个样本跟预测结果的误差的分布是随机的,既然是随机的,根据中心极限定理就可以估计其分布为正态分布,均值为0,方差为定值,则依据正态分布的概率密度定义,预测值与实际值之间误差的概率密度为:

$$
p({e^{(i)}}) = \frac {1}
{
\sqrt[2] {2\pi}
\sigma
}
e^{( - \frac { ( {e^{(i)}} ) ^ 2}
{2\sigma^2}
)}
$$
其中
$$
{e^{(i)}} = {y^{(i)}} - w_{m \times 1}^T {x_{m \times 1}^{(i)}}
$$
此式代入上式。假定n个样本独立,则n个样本的最大似然函数是各自概率密度的乘积:
$$
L(w) = \prod_{i=1}^{n} \frac {1}
{
\sqrt[2] {2\pi}
\sigma
}
e^{( - \frac { ( {e^{(i)}} ) ^ 2}
{2\sigma^2}
)}
$$
此式是关于w的似然函数,要求的是w,可以先对上式取对数,得:
$$
l(w) = \sum_{i=1}^{n} \ln [ {
\frac {1}
{
\sqrt[2] {2\pi}
\sigma
}
e^{( - \frac { ( {e^{(i)}} ) ^ 2}
{2\sigma^2}
)}
} ] \\\\
= n \ln (\frac {1} { \sqrt[2] {2\pi} \sigma }) -
\frac {1} {2\sigma^2} \sum_{i=1}^{n} ({y^{(i)}} - w_{n \times 1}^T {x_{n \times 1}^{(i)}})^2
$$
前半项是常数项,记后半项为:
$$ \begin{equation}
J(w) = \frac {1} {2} {\sum_{i=1}^{n} ({y^{(i)}} - w_{n \times 1}^T {x_{n \times 1}^{(i)}})^2} \\\\
= \frac {1} {2} {\sum_{i=1}^{n} (f_w(x) - y)^2}
\label{a0} \end{equation}
$$

l(w) J(w) 都是一个数值,根据最大似然估计法,概率总和最大时参数估计的最合理,则最大似然函数L(w)取最大时,可推出J(w)取最小,J(w)为最小二乘法的目标函数,问题变为求目标函数最小值的问题。

参数学习

X为nxm的样本矩阵,Y为nx1维列向量,J(w)可以写成以下形式:
$$
\begin{equation}
J(w) = \frac {1} {2} (Xw - Y)^T(Xw - Y)
\label{a1}
\end{equation}
$$
要求J(w)的极值,可对上式求偏导:
$$
\nabla _w J(w) = \nabla _w (Xw - Y)^T(Xw - Y) \\\\
= \nabla _w (w^T X^T X w - w^T X^T Y - Y^T X w - Y^T Y) \\\\
= 2 X^T X w - X^T Y - (Y^T X)^T \\\\
= 2 ( X^T X w - X^T Y )
$$

注意:

$Y^T X$ 是常数项对w求偏导为0
$ \frac{\partial Xw}{\partial w} = X^\mathrm {T} $

令上式偏导等于0,求解w:
$$
w = ( X^\mathrm {T} X ) ^ {-1} X^\mathrm {T} Y
$$
为防止$ X^\mathrm {T} X $ 不可逆或者防止过拟合,增加扰动$\lambda $
$$
\begin{equation}
w = ( X^\mathrm {T} X + \lambda I ) ^ {-1} X^\mathrm {T} Y
\label{a2}
\end{equation}
$$
I为单位阵,以上就是线性回归数理上的最终结论。

正则化处理

过拟合是指在样本集上表现良好,但测试集上不好,一般是w中有些值过大,振荡很大,而导致过拟合。
为解决这个问题可以让更多的$w_j$取0,且越多越好,这种处理方法叫$L_0$正则化;
一般是让$ \sum_{j=1}^{m} |w_j| $ 取最小,这种处理叫$L_0$正则化;
如果是让$ \sum_{j=1}^{m} |w_j|^2 $ 取最小,则称谓$L_2$正则化。
故目标函数 $(\ref{a1})$ 加入平方和损失:
$$
\begin{equation}
J(w) = \frac {1} {2} (Xw - Y)^T(Xw - Y) + \lambda \sum_{j=1}^{m} {w_j}^2
\end{equation}
$$
根据此式进行求解也能推出w的求解公式$(\ref{a2})$

训练与评价

怎么对样本进行训练呢?对于正则化项$\lambda$,怎么取值合理呢?

| ------- 1 ------- | -- 2 -- |-- 3 --|

按合适比例划分样本,得到1、2、3三个部分
区间1用于训练w
区间2可以试用不同的$\lambda$,使用$w+\lambda I $作预测,看$\lambda$取多少时预测的准确,则选定此$\lambda$,这个过程不需要严格。
区间3对w、$\lambda$ 进行验证,当然,还有些交叉验证的策略。
| ------------ 训练 ------------- | 10% 验证 |
| -------- 训练 --------- | 10%验证 | - 训练- |
… … 交叉训练验证走十次 … …

梯度下降算法

公式$(\ref{a2})$是参数w的解析解,但实际工程中样本空间很大,不可能对样本空间进行矩阵运算,所以这就需要机器学习的思路,从参数迭代的角度来求解w,梯度下降是常用的算法。

其意义是,为了求得函数的极值点(局部最小值),先任取一点,然后沿此点处梯度的负方向进行迭代到一个新的点,继续下降直到收敛,算法结束。

首先我们来对$(\ref{a0})$某个$w_j$求偏导
$$
\frac{\partial J(w)}{\partial w_j} = \frac{\partial }{\partial w_j} { \frac {1} {2} (f_w (x) - y)^2 } \\\\
= (f_w (x) - y) \cdot \frac{\partial }{\partial w_j} (f_w (x) - y)\\\\
= (f_w (x) - y) \cdot \frac{\partial }{\partial w_j} (\sum_{k=1}^{m} w_k x_k - y) \\\\
= (f_w (x) - y) x_j
$$
注意,上式除了$w_j$其他都算常量,所以求导得到上式结果。结论可简记为:

某个维度的梯度 = 预测误差 X 样本在该维度的取值

既然有了这个梯度,我们就可以有以下几种方式计算。

批量梯度下降

批量梯度下降是对所有样本的梯度做加和,然后按步长进行下降迭代,直到收敛

while 重复直到收敛 : {
$$ w_j = w_j + \alpha \sum_{i=1}^{n} [ (y^{(i)} - f_w(x^{(i)})) \cdot x_j^{(i)} ] $$
}
$\alpha$为每次迭代的步长
凸函数局部最小值一定是全局最小值,批量梯度下降一定会收敛。
初始可以让w都为0

随机梯度下降SGD

随机梯度下降也称SGD
针对每来一个样本进行一次迭代,而不是对所有样本的梯度做加和做迭代
while 迭代次数 : {
  for i = 0 to n : {
$$
w_j = w_j + \alpha (y^{(i)} - f_w(x^{(i)})) \cdot x_j^{(i)}
$$
  }
}
注:可以通过最大迭代次数来退出loop,也可以判断本次参数$w_j^{(k)}$ 和下次的$w_j^{(k+1)}$之间的误差,如果稳定到很小的值,则认为收敛,可以退出。

全局梯度下降有可能在一些拐点位置停止不前,而随机梯度下降就或许能跳过一些拐点到达真正的收敛点附近,这是梯度下降的一些特点,以后有机会附文研讨。
随机梯度下降一般速度会比较快,学习步长也可以让它先大后小。

mini-batch梯度下降

基于以上两种算法的折中算法,每次随机选取b个样本做一个批量梯度下降,这样既节省了计算整个批量的时间,同时计算的方向也会像SGD一样更加准确。
repeat until convergency{
  for i=1;i<n ; i+=b: {
$$ w_j = w_j + \alpha \sum_{i=1}^{i+b} [ (y^{(i)} - f_w(x^{(i)})) \cdot x_j^{(i)} ] $$
  }
}  

2.非线性回归

区别

其实只是特征增加了$x^2$项,y相对于特征是非线性的,相对于w还是线性的。往往可以先通过变量置换,$x^{‘} = x^2$把非线性回归化为线性回归,再利用线性回归的方法确定参数及估计值。

局部加权回归暂不介绍

3.逻辑回归

问题引出

线性回归适合预测连续值,在解决分类问题时则有些不合理,比如
如果只有A B 两簇,线性回归拟合直线为$L_1$,此时取定义域中点a处的值作为界限进行分类,可能暂时满足。但当是ABC三簇数据时,再依此法取b出的值作为分类界限,就会发现分类很不合理。所以线性回归解决分类问题是不合理的,而逻辑回归则适合解决二分类问题。(如果解决多分类问题,可使用softmax回归)


线性回归拟合直线

逻辑回归虽然叫回归,但它实际是一种分类方法,主要解决分类问题,它的核心是利用了Logistic函数(也称Sigmoid函数),函数形式为:

$$
f{(x)} = \frac {1} {1 + e^{-x}}
$$



逻辑回归中,取预测值$w^Tx$为自变量,得

$$
\begin{equation}
f_w{(x)} = g(w^Tx) = \frac {1} {1 + e^{-{w^T}x}}
\label{a3}
\end{equation}
$$

上式可得到(0,1)区间的的分类预测值,以0.5为界进行划分即可完成分类。
要求解参数w,我们先对Sigmoid函数求偏导:
$$
\begin{equation}
g^{‘}{(x)} = ( \frac {1} {1 + e^{-x}} )^{‘} \\\\
= \frac {e^{-x}} {(1+e^{-x})^2} \\\\
= \frac {1} {1 + e^{-x}} \cdot { \frac {e^{-x}} {1+e^{-x}} } \\\\
= \frac {1} {1 + e^{-x}} \cdot { (1 - {\frac {1} {1+e^{-x}}}) } \\\\
= g(x)(1-g(x))
\label{a4}
\end{equation}
$$

和线性回归高斯分布不同,逻辑回归是二项分布,可以写成分段概率形式:
$$
p(y=1|x,w) = f_w{(x)}
p(y=0|x,w) = 1 - f_w{(x)}
$$
整合一下可以写成:
$$
p(y|x,w) = (f_w{(x)})^y (1 - f_w{(x)})^{(1-y)}
$$
似然函数变为:
$$
L(w) = \prod_{i=1}^{n} p( y^{(i)} | x^{(i)} ; w)
$$
对数似然函数:
$$
l(w) = \sum_{i=1}^{n} {( y^{(i)} \ln {(f_w{(x^{(i)}}))} + (1-y^{(i)}) \ln {(1-f_w{(x^{(i)}})} )}
$$

对$w_j$求偏导,并代入$(\ref{a3})$,$(\ref{a4})$,可得:
$$
\frac{\partial l(w)}{\partial w_j}
= (y- f_w (x)) x_j
$$

进而可以得到梯度上升(往往也通称梯度下降)的迭代公式为:

$$
w_j = w_j + \alpha (y^{(i)} - f_w(x^{(i)})) \cdot x_j^{(i)} + \lambda w_j
$$

预测时:
$$
f(x|w) > 0.5 ,y = 1
f(x|w) <= 0.5 ,y = 0
$$
这里的f(x|w)也可以理解为后验概率来用。

4.总结

逻辑回归是基于最大似然估计和二项分布的,跟线性回归中用的最小二乘法没有关系。
后续将补充一些逻辑回归做预测的应用实例,并介绍谷歌ftrl在线学习算法等,敬请关注!

🐶 五百年雨打的石桥,有你走过 🐶