Coursera机器学习笔记 第3周 第六章 逻辑回归(二)

第六章 逻辑回归(二)

第2节 逻辑回归模型(Logistic Regression Model)

6.4 代价函数

参考视频: 6 - 4 - Cost Function (11 min).mkv

我们将要介绍如何拟合逻辑回归模型中的参数 θ \theta θ。具体来说,我要定义用来拟合参数的优化目标或者叫代价函数,这便是监督学习问题中的逻辑回归模型的拟合问题。
逻辑回归问题

对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将 h θ ( x ) = 1 1 + e − θ T x h_{\theta}(x)=\frac {1}{1+e^{-\theta^T x}} hθ(x)=1+eθTx1代入到这样定义了的代价函数中,我们得到的代价函数将是一个非凸函数(non-convex function)。这意味着我们的代价函数有很多局部最小值,这将影响梯度下降算法寻找全局最小值。
非凸函数与凸函数

回忆一下,线性回归的代价函数为: J ( θ ) = 1 m ∑ i = 1 m 1 2 ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac {1}{m} \sum_{i=1}^{m}\frac {1}{2}(h_{\theta}(x^{(i)})-y^{(i)})^2 J(θ)=m1i=1m21(hθ(x(i))y(i))2

逻辑回归中,我们重新定义逻辑回归的代价函数为: J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) J(\theta)=\frac {1}{m} \sum_{i=1}^{m}Cost(h_{\theta}(x^{(i)}),y^{(i)}) J(θ)=m1i=1mCost(hθ(x(i)),y(i))

其中 C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) )  if  y = 1 − l o g ( 1 − h θ ( x ) )  if  y = 0 Cost(h_{\theta}(x),y)=\begin{cases} -log(h_{\theta}(x)) & \text{ if } y=1 \\ -log(1-h_{\theta}(x)) & \text{ if } y=0 \end{cases} Cost(hθ(x),y)={log(hθ(x))log(1hθ(x)) if y=1 if y=0

h θ ( x ) h_{\theta}(x) hθ(x) C o s t ( h θ ( x ) , y ) Cost(h_{\theta}(x),y) Cost(hθ(x),y)之间的关系如下图所示:

关系

这样构建的 C o s t ( h θ ( x , y ) ) Cost(h_{\theta}(x,y)) Cost(hθ(x,y))函数的特点是:当实际的 y = 1 y=1 y=1 h θ h_{\theta} hθ 也为 1 时误差为 0,当 y = 1 y=1 y=1 h θ h_{\theta} hθ 不为 1 时误差随着 h θ h_{\theta} hθ 的变小而变大;当实际的 y = 0 y=0 y=0 h θ h_{\theta} hθ 也为 0 时误差为 0,当 y = 0 y=0 y=0 h θ h_{\theta} hθ 不为 0 时误差随着 h θ h_{\theta} hθ 的变大而变大。

将构建的 C o s t ( h θ ( x ) , y ) Cost(h_{\theta}(x),y) Cost(hθ(x),y)简化如下: C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) Cost(h_{\theta}(x),y)=-y\times log(h_{\theta}(x))-(1-y)\times log(1-h_{\theta}(x)) Cost(hθ(x),y)=y×log(hθ(x))(1y)×log(1hθ(x))

代入代价函数得到: J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) l o g h θ ( x ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=-\frac {1}{m}\sum_{i=1}^{m} \left[y^{(i)}log h_{\theta}(x^{(i)}) + (1-y^{(i)})log(1-h_{\theta}(x^{(i)}))\right] J(θ)=m1i=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

梯度下降算法:
Repeat{ θ j : = θ j − α ∂ ∂ θ j J ( θ )        ( s i m u l t a n e o u s l y   u p d a t e   a l l ) } \text{Repeat\{}\\ \quad \theta_j :=\theta_j - \alpha \frac {\partial}{\partial\theta_j}J(\theta) \;\;\;(simultaneously\ update\ all) \\ \} Repeat{θj:=θjαθjJ(θ)(simultaneously update all)}

求导后得到: ∂ ∂ θ j J ( θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac {\partial}{\partial\theta_j}J(\theta) = \frac{1}{m} \sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)} θjJ(θ)=m1i=1m(hθ(x(i))y(i))xj(i)

所以梯度下降算法变为(m为数据集的条目数,因此可以看作常数):
Repeat{ θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) (simultaneously update all) } \text{Repeat\{} \\ \quad \theta_j :=\theta_j - \alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)} \quad \text{(simultaneously update all)} \\ \} Repeat{θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)(simultaneously update all)}

在这个视频中,我们定义了单训练样本的代价函数,该函数是一个凸函数(凸性分析超出范围,不给出证明直接使用),并且没有局部最优值。

除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。有:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann, BFGS)和有限内存局部优化法(LBFGS)。fminunc是matlab和octave中都带的一个最小值优化函数,使用时我们需要提供代价函数和每个参数的求导,下面是octave中使用fminunc函数的代码示例(非重点):

function [jVal, gradient] = costFunction(theta)
    jVal = [...code to compute J(theta)...];
    gradient = [...code to compute derivative of J(theta)...];
end
options = optimset('GradObj', 'on', 'MaxIter', '100');
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

在下一节中,我们会把单训练样本的代价函数的这些理念进一步发展,然后给出整个训练集的代价函数的定义。我们还会找到一种比目前用的代价函数更简单的写法,并应用梯度下降法得到我们的逻辑回归算法。

6.5 简化的成本函数和梯度下降

参考视频 : 6 - 5 - Simplified Cost Function and Gradient Descent (10 min).mkv

我们将会找出一种稍微简单一点的方法来写代价函数来替换我们现在用的方法,同时还要弄清楚如何运动梯度下降法来拟合逻辑回归的参数。

逻辑回归的代价函数:
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) C o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) )  if  y = 1 − l o g ( 1 − h θ ( x ) )  if  y = 0 N o t e : y = 0   o r   1   a l w a y s J(\theta)=\frac {1}{m} \sum_{i=1}^{m}Cost(h_{\theta}(x^{(i)}),y^{(i)}) \\ Cost(h_{\theta}(x),y)=\begin{cases} -log(h_{\theta}(x)) & \text{ if } y=1 \\ -log(1-h_{\theta}(x)) & \text{ if } y=0 \end{cases} \\ Note: y=0\ or\ 1\ always J(θ)=m1i=1mCost(hθ(x(i)),y(i))Cost(hθ(x),y)={log(hθ(x))log(1hθ(x)) if y=1 if y=0Note:y=0 or 1 always

使用梯度下降(gradient descent),求导后得到(把常数 1 m \frac{1}{m} m1合并到 α \alpha α中):
Repeat{ θ j : = θ j − α ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) simultaneously update all) } \text{Repeat\{} \\ \quad \theta_j :=\theta_j - \alpha\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)} \quad \text{simultaneously update all)} \\ \} Repeat{θj:=θjαi=1m(hθ(x(i))y(i))xj(i)simultaneously update all)}

我们采用向量化的方法来同时更新所有 θ \theta θ的值:

  1. j = 0 , 1 , . . . , n j=0,1,...,n j=0,1,...,n的公式写出来,便于理解
  2. 把学习结果与实际类标签间的误差 h θ ( x ( i ) ) − y ( i ) h_{\theta}(x^{(i)})-y^{(i)} hθ(x(i))y(i)求出来,记作 e r r o r error error
  3. 更新: θ = [ θ 0 θ 1 θ 2 . . . θ n ] , θ = [ θ 0 θ 1 θ 2 . . . θ n ] − α ∑ i = 1 m e r r o r ∗ x j ( i ) \theta=\begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2\\ ...\\ \theta_n \end{bmatrix} , \theta=\begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2\\ ...\\ \theta_n \end{bmatrix}-\alpha\sum_{i=1}^{m}error*x_j^{(i)} θ=θ0θ1θ2...θnθ=θ0θ1θ2...θnαi=1merrorxj(i)

你会发现这个方法正是用来做线性回归梯度下降的。

在线性回归中讲到了特征缩放,它提高梯度下降的收敛速度,并且也适用于逻辑回归。如果你的特征范围差距很大的话,那么应用特征缩放的方法,也可以逻辑回归的梯度下降收敛更快。

6.6 高级优化

参考视频 : 6 - 6 - Advanced Optimization (14 min).mkv

暂略。

第3节 多类别分类(Multiclass Classification)

6.7 多类别分类:一对多

参考视频 : 6 - 7 - Multiclass Classification_ One-vs-all (6 min).mkv

二元分类问题的数据分布可能是:
这里写图片描述

而多元分类的问题,数据集可能是这样:
这里写图片描述

我们用三种不同的符号来表示三个类别,问题就是在三个类型的数据集,我们如何进行分类。

简单来说,一对多的分类工作是:先将class 1看作正类(y=1),其余看作负类(y=0),得到模型 h θ ( 1 ) ( x ) h_{\theta}^{(1)}(x) hθ(1)(x);再将class 2看作正类(y=1),其余看作负类(y=0),得到模型 h θ ( 2 ) ( x ) h_{\theta}^{(2)}(x) hθ(2)(x);最后将class 3看作正类(y=1),其余看作负类(y=0),得到模型 h θ ( 3 ) ( x ) h_{\theta}^{(3)}(x) hθ(3)(x)。所以这个方法也叫做“一对余”方法。如下图:

这里写图片描述

我们最后会得到一系列模型: h θ ( i ) ( x ) h_{\theta}^{(i)}(x) hθ(i)(x),之前说过逻辑回归模型计算出的结果是一个概率,每个模型计算出概率 p ( y = 1 ∣ x ; θ ) p(y=1|x;\theta) p(y=1x;θ),其中 i = ( 1 , 2 , 3 , . . . , k ) i=(1,2,3,...,k) i=(1,2,3,...,k)

这里写图片描述

当我们要与测试,我们把所有的分类模型都运行以便,然后对每一个输入变量,选择最高可能性的输出变量作为结果,即 y = m a x i   h θ ( i ) ( x ) y=\underset{i}{max}\ h_{\theta}^{(i)}(x) y=imax hθ(i)(x)

无论 i i i值是多少,我们都有最高的概率值,预测 y y y就是那个值对应的类别。这就是多类别分类问题,以及一对多的方法。


参考资料:

  1. Logistic 回归与梯度上升算法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值