机器学习之逻辑回归(Logistic Regression)

背景

逻辑回归是用回归的方法做 分类

假设数据服从 0-1 分布(伯努利分布),那么随机变量 XX 只有正类 1 和 负类 0 两个选择,并且相应的概率为:pp1p1-p

可以使用线性回归方法,寻找判别函数 g(x)=θ0x0+θ1x1+...+θnxng(x) = \theta_0 x_0 + \theta_1 x_1 +...+\theta_n x_n,把数据分隔开。

但是遇到像以下这种数据,可以用逻辑回归,根据输出属于正类的概率来分类。

img

对于逻辑回归,学习的并不是一条线去拟合每个数据点,而是为了把不同类别的样本分开。

  1. 在判别函数 g(x)g(x) 输出的基础上使用 SigmoidSigmoid 函数 hθ(x)=11+eg(x)h_\theta(x) = \frac{1}{1 + e^{-g(x)}} 将预测值映射到 0,1 之间,表示预测结果的 概率
  2. 设置一个阈值,假设为 0.5,如果 hθ(x)=0.7h_\theta(x) = 0.7 ,则表示预测为正类的概率为 0.7。
  3. hθ(x)h_\theta(x) 的直观解释为:对于输入 xx ,求分类结果 yy 属于正类的概率。
  4. 若一个样本是正类的概率为 P(y=1x;θ)=hθ(x)P(y = 1 | x;\theta) = h_\theta(x)*,*则是负类的概率为 P(y=0x;θ)=1hθ(x)P(y = 0 | x;\theta) = 1 - h_\theta(x) 。将两个式子写在一块:P(yx;θ)=hθ(x)y(1hθ(x))1yP(y|x;\theta) = h_\theta(x)^y (1 - h_\theta(x))^{1-y} ,当 y=1y=1 或者 y=0y=0 的时,上式均满足,表示输入样本为正类的概率。

损失函数

为什么使用负的对数似然函数作为损失函数?

这里着重介绍以下,其实逻辑回归也可以使用其他损失函数,比如使用均方误差作为损失函数:

MSE=12mi=1m(yihθ(xi))2=12mi=1m(yi11+eθTxi)2\begin{aligned} MSE &= \frac{1}{2m} \sum_{i = 1}^{m} (y_i - h_\theta(x^i))^2 \\ &= \frac{1}{2m} \sum_{i = 1}^{m} (y_i - \frac{1}{1 + e^{- \theta^T x^i}})^2 \end{aligned}

但这个函数不是凸函数,很难进行优化。

再考虑常用于二分类模型中的交叉熵损失函数,即负的对数似然函数:

L(θ)=1m[i=1myi log y^i+(1yi) log (1y^i)]L(\theta) = -\frac{1}{m} [\sum_{i = 1}^{m} y_i \ log \ \hat y^i + (1-y^i) \ log \ (1 - \hat y^i)]

其中 y^i\hat y^i 表示预测正类的概率,也就是 hθ(xi)h\theta(x^i) 或者 g(θTxi)g(\theta^T x^i)

根据真实标签,也可以写成下面的格式:

L(θ)={log hθ(xi)if y=1log (1hθ(xi))if y=0\begin{aligned} L(\theta) = \left\{ \begin{array}{ll} -log \ h_\theta(x^i) & \textrm{if $y=1$}\\ -log \ (1 - h_\theta(x^i)) & \textrm{if $y=0$} \end{array} \right. \end{aligned}

其图像如图所示:

img

既然是分类任务,不同的类别可以单独的计算损失。对于真实标签为 1 的样本,预测值越接近于 1,损失越小;而真实标签为 1 的样本,预测值越接近于 0,损失越小,交叉熵损失函数刚好满足以上特点,比均方误差损失函数要好得多。

其实这里的损失函数可以通过极大似然估计推导出来。

通过极大似然估计推导损失函数

因为数据真实标签 yy 只有 1 和 0 两种分类,服从 0-1 分布,故 yyxx 上概率分布为:

P(yx;θ)=hθ(x)y(1hθ(x))1yP(y|x;\theta) = h_\theta(x)^y (1 - h_\theta(x))^{1-y}

其似然函数为:

L(θ)=i=1mp(yx;θ)=i=1mhθ(xi)yi(1hθ(xi))1yi\begin{aligned} L(\theta) = \prod_{i=1}^{m} p(y|x;\theta) = \prod_{i=1}^{m} h_\theta(x^i)^{y^{i}} (1 - h_\theta(x^i))^{1-y^i} \end{aligned}

为方便计算,两边取对数,化连乘为累加:

l(θ)=logL(θ)=i=1m[yiloghθ(xi)+(1yi)log(1hθ(xi))]\begin{aligned} l(\theta) = log L(\theta) = \sum_{i = 1}^{m} [y_i log h_\theta(x^i) + (1-y^i) log (1 - h_\theta(x^i))] \end{aligned}

目标是最大化 log 似然函数,加负号转换成最小化:

J(θ)=1mi=1m[yi log hθ(xi)+(1yi) log (1hθ(xi))]\begin{aligned} J(\theta) = -\frac{1}{m} \sum_{i = 1}^{m} [y_i \ log \ h_\theta(x^i) + (1-y^i) \ log \ (1 - h_\theta(x^i))] \end{aligned}

梯度下降法

梯度下降算法中自变量迭代公式:

θj:=θjαθJ(θ)\theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta} J(\theta)

参数更新推导:

θJ(θ)=1mi=1myi1hθ(xi)hθ(xi)θ(1yi)11hθ(xi)hθ(xi)θ=1mi=1m[yi1hθ(xi)(1yi)11hθ(xi)]hθ(xi)θ=1mi=1m[yi1g(θTxi)(1yi)11g(θTxi)]g(θTxi)θ=1mi=1m[yi1g(θTxi)(1yi)11g(θTxi)]g(θTxi)(1g(θTxi))xi=1mi=1m{yi[1g(θTxi)](1yi)g(θTxi)}xi=1mi=1m[yig(θTxi)]xi=1mi=1m[hθ(xi)yi]xi\begin{aligned} \frac{\partial}{\partial \theta} J(\theta) &= -\frac{1}{m} \sum_{i = 1}^{m} y_i \frac{1}{h_\theta(x^i)} \frac{\partial{h_\theta(x^i)}}{\partial \theta} - (1 - y_i) \frac{1}{1 - h_\theta(x^i)} \frac{\partial{h_\theta(x^i)}}{\partial \theta} \\ &= -\frac{1}{m} \sum_{i = 1}^{m} [y_i \frac{1}{h_\theta(x^i)} - (1 - y_i) \frac{1}{1 - h_\theta(x^i)}] \frac{\partial{h_\theta(x^i)}}{\partial \theta} \\ &= -\frac{1}{m} \sum_{i = 1}^{m} [y_i \frac{1}{g(\theta^T x^i)} - (1 - y_i) \frac{1}{1 - g(\theta^T x^i)}] \frac{\partial{g(\theta^T x^i)}}{\partial \theta} \\ &= -\frac{1}{m} \sum_{i = 1}^{m} [y_i \frac{1}{g(\theta^T x^i)} - (1 - y_i) \frac{1}{1 - g(\theta^T x^i)}] g(\theta^T x^i)(1 - g(\theta^T x^i)) x^i \\ &= -\frac{1}{m} \sum_{i = 1}^{m} \{y_i [1 - g(\theta^T x^i)] - (1 - y_i) g(\theta^T x^i)\} x^i \\ &= -\frac{1}{m} \sum_{i = 1}^{m} [y_i - g(\theta^T x^i)] x^i \\ &= \frac{1}{m} \sum_{i = 1}^{m} [h_\theta(x^i) - y_i] x^i \end{aligned}

θj:=θjα1mi=1m[hθ(xi)yi]xi\begin{aligned} \theta_j := \theta_j - \alpha \cdot \frac{1}{m} \sum_{i = 1}^{m} [h_\theta(x^i) - y_i] x^i \end{aligned}

Note:hθ(x)=g(z), z=θTxh_\theta(x) = g(z), \ z = \theta^Tx

题外话

对于真实标签为 1 和 -1 表示正类和负类的情况,还可以这么表示其损失函数。

hθ(x)h_\theta(x)SigmoidSigmoid 函数,有以下属性:

1htheta(x)=hθ(x)1 - h_theta(x) = h_\theta(-x) ,也就是 111+eθTx=11+eθTx1 - \frac{1}{1 + e^ {-\theta^T x}} = \frac{1}{1 + e^ {\theta^T x}}

和上面一样,设 P(y=1x;θ)=hθ(x)P(y = 1 | x;\theta) = h_\theta(x) ,则 P(y=1x;θ)=1hθ(x)=hθ(x)P(y = -1 | x;\theta) = 1 - h_\theta(x) = h_\theta(-x)

将两个概率公式合并,P(yx;θ)=hθ(yx)P(y | x;\theta) = h_\theta(yx)

似然函数:

L(θ)=i=1mp(yx;θ)=L(θ)=i=1mhθ(yixi)\begin{aligned} L(\theta) &= \prod_{i=1}^{m} p(y|x;\theta) \\ &= L(\theta) = \prod_{i=1}^{m} h_\theta(y^ix^i) \end{aligned}

为方便计算,两边取对数,取负号,得到损失函数:

logL(θ)=i=1mlog hθ(x)=i=1mlog 11+eyixi=i=1mlog(1+eyixi)\begin{aligned} -log L(\theta) &= -\sum_{i = 1}^{m} log \ h_\theta(x) \\ &= -\sum_{i = 1}^{m} log \ \frac{1}{1 + e^{-y^ix^i}} \\ &= \sum_{i = 1}^{m} log(1 + e^{-y^ix^i}) \end{aligned}

根据损失函数图像,可以看出:

y=1y = 1 时,损失函数为 log(1+ex)log (1 + e^{-x}) ,如红线所示,预测值离 1 越近,损失越小;

y=1y = -1 时,损失函数为 log(1+ex)log (1 + e^{x}) ,如绿线所示,预测值离 -1 越近,损失越小。

img

参考

逻辑回归常见面试点总结

逻辑回归(Logistic Regression, LR)简介