斯坦福机器学习笔记 第3周 六、逻辑回归(二)

来源:互联网 发布:网络拓扑图功能描述 编辑:程序博客网 时间:2024/06/05 06:47

六、逻辑回归

6.4 代价函数

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

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

逻辑回归问题

对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将hθ(x)=11+eθTx代入到这样定义了的代价函数中,我们得到的代价函数将是一个非凸函数(non-convex function)。

非凸函数与凸函数

这意味着我们的代价函数有很多局部最小值,这将影响梯度下降算法寻找全局最小值。

线性回归的代价函数为:

J(θ)=1mi=1m12(hθ(x(i))y(i))2

我们重新定义逻辑回归的代价函数为:

J(θ)=1mi=1mCost(hθ(x(i)),y(i))

其中

Cost(hθ(x),y)={log(hθ(x))log(1hθ(x)) if y=1 if y=0

hθ(x)Cost(hθ(x),y)之间的关系如下图所示:

关系

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

将构建的Cost(hθ(x),y)简化如下:

Cost(hθ(x),y)=y×log(hθ(x))(1y)×log(1hθ(x))

代入代价函数得到:

J(θ)=1mi=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价含糊最小的参数了。算法为:

Repeat{

θj:=θjαθjJ(θ)(simultaneously update all)
}

求导后得到:

Repeat{

θj:=θjαi=1m(hθ(x(i))y(i))x(i)j(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)...];endoptions = 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(θ)=1mi=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

这个式子可以合并为:

Cost(hθ(x),y)=y×log(hθ(x))(1y)×log(1hθ(x))

就是逻辑回归的代价函数:

J(θ)=1mi=1mCost(hθ(x(i)),y(i))=1mi=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

根据这个代价函数,为了拟合出参数,该怎么做呢?我们要试图尽量让J(θ)取得最小值的参数θ,即minθJ(θ)。接下来就是弄清楚如何用训练样本最大限度地最小化代价函数J(θ),以得到参数θ

最小化代价函数的方法,是使用梯度下降(gradient descent)。即:
Repeat{

θj:=θjαθjJ(θ)(simultaneously update all)
}

求导后得到:
Repeat{

θj:=θjαi=1m(hθ(x(i))y(i))x(i)j(simultaneously update all)
}

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

  1. 将学习率α后面的部分mi=1(hθ(x(i))y(i))x(i)j求出来
  2. n个特征
    θ=θ0θ1θ2...θnθ=θ0θ1θ2...θnαi=1m(...)x(i)j

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

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

6.6 高级优化

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

暂略。

6.7 多类别分类:一对多

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

二元分类问题的数据分布可能是:

这里写图片描述

而多元分类的问题,数据集可能是这样:

这里写图片描述

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

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

这里写图片描述

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

这里写图片描述

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

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

阅读全文
0 0
原创粉丝点击