UFLDL学习笔记系列 2

本文介绍了逻辑回归在二元分类问题中的应用,详细阐述了Logistic函数、算法描述,包括似然函数、梯度下降法,并提及在实际代码实现中遇到的效率问题以及对数据集的处理。
摘要由CSDN通过智能技术生成

监督学习和优化——逻辑回归(Logistic Regression)

问题描述

之前我们学习的是通过一个线性方程预测一个连续的值(e.g. 房屋价格)。但有时我们想要预测一个离散的值,比如一张图片是不是猫,这属于分类问题。而逻辑回归是一种简单的分类算法。在这里,我们只讨论二元分类问题,即 y ∈ { 0 , 1 } y\in \{0,1\} y{0,1}

Logistic函数

给定 x ( i ) , y ( i ) x^{(i)},y^{(i)} x(i)y(i)是其标签。若还是像线性回归中的描述方法: h θ ( x ) = θ ⊤ x h_\theta(x) = \mathbf{\theta}^\top x hθ(x)=θx来描述标签,则显然是不合理的,因为 y y y只能是0或者1,因此修改 h θ ( x ) = g ( θ ⊤ x ) = 1 1 + e − θ ⊤ x h_\theta(x) = g(\mathbf{\theta}^\top x) = \frac{1}{1+e^{-\mathbf{\theta}^\top x}} hθ(x)=g(θx)=1+eθx1其中 g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+ez1 该函数被叫做logistic函数或者sigmoid函数。该函数如下图所示sigmoid函数可以看到 g ( z ) ∈ ( 0 , 1 ) g(z) \in (0,1) g(z)(0,1),因此 h θ ( x ) h_\theta(x) hθ(x)的取值也在该范围内。其他取值在[0,1]之间的函数也可以替代这里的sigmoid函数。

算法描述

假设 h θ ( x ) h_\theta(x) hθ(x)表示分类为正类(y为1)的概率,则有 P ( y = 1 ∣ x ; θ ) = h θ ( x ) P(y=1|x;\theta) = h_\theta(x) P(y=1x;θ)=hθ(x) P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) P(y = 0|x;\theta) = 1-h_\theta(x) P(y=0x;θ)=1hθ(x)上面两式可简写为下面的式子: P ( y ∣ x ; θ ) = h θ ( x ) y ( 1 − h θ ( x ) ) 1 − y P(y|x;\theta) = h_\theta(x)^y(1-h_\theta(x))^{1-y} P(yx;θ)=hθ(x)y(1hθ(x))1y假设m个训练样本是独立生成的,则可以写出参数的似然函数为: L ( θ ) = p ( y ⃗ ∣ X ; θ ) = ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) = ∏ i = 1 m h θ ( x ( i ) ) y ( i ) ( 1 − h θ ( x ( i ) ) ) 1 − y ( i ) L(\theta) = p(\vec y | X;\theta)\\ = \prod_{i=1}^mp(y^{(i)}|x^{(i)};\theta)\\=\prod_{i=1}^mh_\theta(x^{(i)})^{y^{(i)}}(1-h_\theta(x^{(i)}))^{1-y^{(i)}} L(θ)=p(y X;θ)=i=1mp(y(i)x(i);θ)=i=1mhθ(x(i))y(i)(1hθ(x(i)))1y(i)使用对数似然更加容易计算: l ( θ ) = log ⁡ L ( θ ) = ∑ i − 1 m y ( i ) log ⁡ h ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h ( x ( i ) ) l(\theta) = \log L(\theta) \\ = \sum_{i-1}^my^{(i)}\log h(x^{(i)}) + (1-y^{(i)})\log (1-h(x^{(i)}) l(θ)=logL(θ)=i1my(i)logh(x(i))+(1y(i))log(1h(x(i))
现在的任务转变为最大化对数似然估计,即我们的 l ( θ ) l(\theta) l(θ)。最大化该函数可以使用上一章介绍的梯度下降进行计算。其中梯度为: ∂ ∂ θ j l ( θ ) = ∑ i ( y − h θ ( x ) ) x j ( i ) \frac{\partial}{\partial \theta_j}l(\theta) = \sum_i(y - h_\theta(x)) x_j^{(i)} θjl(θ)=i(yhθ(x))xj(i)伪代码如下所示:
      Repeat until convergence{
θ j : = θ j + α ∑ i = 1 m ( y ( i ) − h θ ( x ( i ) ) ) x j ( i )      ( f o r   e v e r y   j ) \theta_j :=\theta_j + \alpha\sum_{i=1}^m(y^{(i)} - h_\theta(x^{(i)}))x_j^{(i)} \ \ \ \ (for\ every\ j) θj:=θj+αi=1m(y(i)hθ(x(i)))xj(i)    (for every j)}
可以发现,这与线性规划的迭代公式一样,但它们不是同一个算法,因为目标函数 h θ ( x ) h_\theta(x) hθ(x)不同了。

Exercise 1B

ex1/ex1b_logreg.m文件中的代码实现的是对28*28像素大小的0或者1的数字图片进行分类。这里需要我们完成的部分就是在logistic_regression.m文件中计算目标函数 l ( θ ) l(\theta) l(θ)以及梯度 ∂ ∂ θ j l ( θ ) \frac{\partial}{\partial \theta_j}l(\theta) θjl(θ)
具体代码如下所示:

%compute the value of f
for i=1 : m
    f = f - (y(i) * log(1 / (1 + exp(-theta' * X(:,i)))) + (1 - y(i)) * log(1 - 1 / (1 + exp(-theta' * X(:,i)))));
end

% compute the gradient
for i = 1 : size(X,1)
    for j = 1 : m
        g(i) = g(i) + X(i,j) * (1 / (1 + exp(-theta' * X(:,j))) - y(j));
    end
end

最终训练数据以及测试数据的正确率都能达到100%,这是由于此分类任务较简单,且数据集充足。在一般分类问题中很难达到100%的正确率。
但此训练运行耗时巨大,共计花费约100分钟,主要在于 θ \theta θ每次迭代都需要遍历所有的训练数据,而我们的代码使用循环来完成,是完全串行的,使运行时间大大增长。下一节会描述如何将数据向量化,从而加快了运行速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值