CS229: 2

逻辑回归, Logistic Regression

逻辑回归(Logistic Regression)

回归解决的是yy连续时的预测问题,我们还想解决yy离散时的预测问题,即分类。

考虑最简单的,分成两类,即y{0,1}y\in \{0,1\}

hθ(x)=11+eθTxh_{\theta}(x)=\frac{1}{1+e^{-\theta^T x}},称为sigmoidsigmoid函数。这样既保留了“线性”的部分,又得到了一个被压缩到一个概率的输出。至于为什么选这个函数是恰当的,而不是其他类似arctan\arctan之类的函数之后会论证。这里x0=1x_0=1

一个小技巧是g(z)=g(z)(1g(z))g'(z)=g(z)(1-g(z))

然后还是类似前面的,做一个极大似然估计。

现在我们已知了输入,让匹配为训练集正确结果的概率最大,也就是要求θ\theta,满足P(y=y(i)x=x(i))\prod P(y=y^{(i)}|x=x^{(i)})最大。注意,这里和前面类似,要融入已知的信息x(i)x^{(i)},所以是一个条件概率。

然后还要定义

P(y=y(i)x=x(i))={hθ(x)if y(i)=11hθ(x)if y(i)=0P(y=y^{(i)}|x=x^{(i)})=\begin{cases} h_{\theta}(x) & \text{if } y^{(i)}=1\\ 1-h_{\theta}(x) & \text{if } y^{(i)}=0\\ \end{cases}

我们可以巧妙地写成

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

为什么不写成加法之类的形式呢?其实仔细观察会发现,这是伯努利分布的特例。可以理解为,线性回归的先验分布是高斯分布,而逻辑回归的先验分布是伯努利分布。当然,在之后的GLM中,可以看到他们都是一种更广义的分布的特例。

L(θ)=i=1nP(y(i)x(i))L(\theta)=\prod_{i=1}^{n}P(y^{(i)}|x^{(i)})

l(θ)=lnL(θ)=i=1ny(i)lnhθ(x(i))+(1y(i))ln(1hθ(x(i)))l(\theta)=\ln L(\theta)=\sum_{i=1}^{n}y^{(i)}\ln h_{\theta}(x^{(i)})+(1-y^{(i)})\ln (1-h_{\theta}(x^{(i)}))

右边这个也被叫做交叉熵函数

l(θ)θj=i=1n[y(i)1hθ(x(i))hθ(x(i))(1hθ(x(i)))+(1y(i))11hθ(x(i))(1)hθ(x(i))(1hθ(x(i)))]θTx(i)θj\frac{\partial{l(\theta)}}{\partial{\theta_j}}=\sum_{i=1}^{n}[y^{(i)}\frac{1}{h_{\theta}(x^{(i)})}h_{\theta}(x^{(i)})(1-h_{\theta}(x^{(i)})) +(1-y^{(i)})\frac{1}{1-h_{\theta}(x^{(i)})}(-1)h_{\theta}(x^{(i)})(1-h_{\theta}(x^{(i)}))]\frac{\partial{\theta^Tx^{(i)}}}{\partial{\theta_j}}

l(θ)θj=i=1n(y(i)hθ(x(i)))xj(i)\frac{\partial{l(\theta)}}{\partial{\theta_j}}=\sum_{i=1}^{n}(y^{(i)}-h_{\theta}(x^{(i)}))x^{(i)}_j

确实也可以看到这样设置概率求导比较方便。

然后就可以直接做梯度下降了。

如果沿用之前的SGD,更新规则就是

θj:=θj+α(hθ(x(i))y(i))xj(i)(1jd)\theta_j:=\theta_j+\alpha(h_{\theta}(x^{(i)})-y^{(i)})x^{(i)}_j(1\leq j\leq d)

多分类、softmax函数什么的,留到GLM再一起讲。

牛顿迭代法

如果要求函数的零点,我们知道大名鼎鼎的牛顿迭代法,即选定一个初始值θ0\theta_0,然后不断更新

θ:=θf(θ)f(θ)\theta:=\theta-\frac{f(\theta)}{f'(\theta)}

也就是在一点附近用切线来近似改函数,然后不断修正直到收敛。

而梯度下降也是类似的,我们是在求梯度的零点,所以可以更新

θ:=θf(θ)f(θ)\theta:=\theta-\frac{f'(\theta)}{f''(\theta)}

直观理解,多元函数中导数就是梯度,而二阶导就是海森矩阵,除以二阶导就是乘上海森矩阵的逆矩阵。

θ:=θH1θl(θ)\theta:=\theta-H^{-1}\nabla_\theta l(\theta)

感知机算法

如果不考虑sigmoidsigmoid,单纯

g(z)={1if z00if z<0,hθ(x)=g(θTx)g(z)=\begin{cases} 1 & \text{if } z\geq 0\\ 0 & \text{if } z<0\\ \end{cases},h_{\theta}(x)=g(\theta^Tx)

损失函数类似后面的svm,调用一样的θ\theta更新方法,就得到了古老的感知机算法。

实际上和后面的svm相似,都是试图用一个超平面来分隔点。

但是区别在于,svmsvm可以魔改后可以分类出错误的点,但是一定要最大化最小的geometric margin,但是感知机算法是一定要最小化分类错误的点的个数,就可能会导致过拟合。

没有核方法的情况下都无法处理非线性可分的问题,比如非常经典的异或。


CS229: 2
http://llz3724.github.io/2025/04/22/2025-04-22-cs229_2/
作者
llz3724
发布于
2025年4月22日
许可协议