Andrew Ng笔记-week3

来源:互联网 发布:抽奖算法 时间分布 编辑:程序博客网 时间:2024/04/28 13:14

分类

为了尝试分类,一个方法是使用线性回归并将所有的预测比0.5大的值映射为1;全部小于0.5的值映射为0。但是,因为分类实际上并不是线性函数,所以这种方法不能很好地工作。

分类问题就像回归问题,但我们现在要预测只取少量离散值的值。现在,我们将专注于二分类。问题中,Y只能取两个值,0和1(这里提到的也可以推广到多类的情况。)例如,如果我们试图建立电子邮件垃圾邮件分类,然后x(i)可以是电子邮件的一些特征,而y如果它是垃圾邮件为1,,否则为0。因此,y∈{0,1}。0也被称为负类,1为正类,它们有时也由符号“ - ”,“ +”表示。给定x(i),相应的 y(i)也被称作训练样本标签。

假设表示

我们可以处理分类问题忽略y是离散值的事实,并利用我们的旧线性回归算法来预测给定x下的y值。然而,很容易找例子证明这种方法表现的很差。直观地看,当我们知道y∈{0,1}时,hθ(x)大于1或者小于0的取值就显得毫无意义。为了解决这个问题,让我们改变形式,我们的假设hθ(x)满足

0hθ(x)1
这种形式通过将θ^Tx带入逻辑回归函数实现。

我们的新形式采用“双曲线函数”,也被称为“逻辑回归函数”:

hθ(x)=g(θTx)
z=θTx
g(z)=11+ez

下图显示了我们什么双曲线函数的样子:

image
函数g(Z),在此示出,映射任何实数到(0,1)之间,使得它可用于转化任意值函数为更好地适合于分类的函数。

hθ(x)会给我们输出为1的几率。例如,
hθ(x)=0.7
有70%的几率,我们的输出为1。预测是0的概率是预测是1的概率的补集(例如,如果概率是1为70%,那么概率是0是30%)。

决策边界

为了得到离散值0或1的分类,我们可以按照如下转换为假设函数输出:

hθ(x)0.5y=1
hθ(x)<0.5y=0

我们的逻辑函数g的行为方式是,当它的输入大于或等于零,其输出大于或等于0.5:

 z0  g(z)0.5

还记得:

z=0,e0=1g(z)=1/2
z,e0g(z)=1
z,eg(z)=0
所以,如果我们输入

g=θTX

,那意味着:

 θTx0  
hθ(x)=g(θTx)0.5

从以上表述,我们可以得出结论:

θTx0y=1
θTx<0y=0

该决策边界是由我们的假设函数创建的用于分割y = 0和y = 1的直线。

例如:

θ=510
 y=1 5+(1)x1+0x20
5x10
x15
x15

在这种情况下,我们的决策边界是在图形中 X1=5的一条垂直线,线的左侧表示Y = 1,而右侧表示y = 0。

同样,S形函数g(z)的输入不需要是线性的,可以是一个圆的方程(例如
z=θ0+θ1x21+θ2x22
)或其他任何形状,以拟合我们的数据。

成本函数

我们不能用与线性回归相同的成本函数,因为逻辑回归将导致输出为波浪形,造成了许多局部最优。换句话说,它不会是一个凸函数。

作为代替,我们的逻辑回归的成本函数如下:

J(θ)=1mmi=1Cost(hθ(x(i)),y(i))
Cost(hθ(x),y)=log(hθ(x)) if y = 1
Cost(hθ(x),y)=log(1hθ(x)) if y = 0

当Y = 1时,我们得到如下的J(θ) vs hθ(x)的对比图像:
image

同样,当Y = 0时,我们得到如下的J(θ) vs hθ(x)的对比图像:
image

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

如果我们正确的答案“Y”是0,如果我们的假设函数也输出0,那么成本函数将是0。如果我们的假设趋于1,则成本函数将趋于无穷大。

如果我们正确的答案“Y”是1,如果我们的假设函数也输出0,那么成本函数将是1。如果我们的假设趋于0,那么成本函数将趋于无穷大。

请注意,写这样的成本函数保证J(θ)是凸的逻辑回归。

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

我们可以把我们的成本函数两个条件的情况下合并成一个:

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

请注意,当y等于1,则第二项
(1y)log(1hθ(x))
将为零,且不会影响结果;

如果y等于0,则所述第一项
ylog(hθ(x))
将为零,且不会影响结果。

我们完全可以写出我们整个成本函数如下:

J(θ)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]
向量化的表示为:

h=g(Xθ)
J(θ)=1m(yTlog(h)(1y)Tlog(1h))

梯度下降

请记住,梯度下降的一般形式是:

Repeat{
θj:=θjαθjJ(θ)
}

我们可以用微积分求出导数部分:

Repeat{
θj:=θjαmmi=1(hθ(x(i))y(i))x(i)j
}

请注意,这个算法与我们在线性回归中使用的算法是相同的。我们仍然需要同时更新所有的θ值。

向量化表示:

θ:=θαmXT(g(Xθ)y⃗ )

优化改进

“共轭梯度”,“BFGS”和“L-BFGS”是更复杂的,更快速的方式来代替梯度下降优化θ。我们建议你不要自己写这些更复杂的算法(除非你是在数值计算方面的专家),但是使用库则相反,因为他们已经被测试并高度优化。并且被Octave支持。

我们首先需要为给定的输入值θ给以下两个函数提供计算结果:

J(θ)
θjJ(θ)

我们可以写一个函数返回这两个值:

function [jVal, gradient] = costFunction(theta)  jVal = [...code to compute J(theta)...];  gradient = [...code to compute derivative of J(theta)...];end

然后我们可以使用Octave的”fminunc()”优化算法和“optimset()”函数创建一个包含我们想要传给“fminunc()”的选项(Options)的对象。

options = optimset('GradObj', 'on', 'MaxIter', 100);initialTheta = zeros(2,1);   [optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

我们传给函数“fminunc()”我们的成本函数,θ值的初始向量,还有我们事先创建的“选项”对象。

多分类:一对多(一对余)

现在,当我们有两个以上的类别时,我们将处理数据的分类。而不是y=0,1,我们将展开我们的定义,使y={0,1…n}。

因为y = {0,1…n},我们把问题分成n+1(+1因为索引是从0开始的)个二分类问题;在每一项中,我们都预测“y”是我们类中的一员的概率。

y{0,1n}
h(0)θ(x)=P(y=0|x;θ)
h(1)θ(x)=P(y=1|x;θ)

h(n)θ(x)=P(y=n|x;θ)
prediction=maxi(h(i)θ(x))

我们选择了一个类,然后将所有其他的类都归并到一个单独的类中。我们反复地这样做,将二元逻辑回归应用到每一个案例中,然后使用返回最高值作为我们的预测的假设。

下图显示了一个如何对三个类进行分类:
image

总结:

为每个类训练一个逻辑回归分类器h(x)来预测y=i的概率。
要对新x做出预测,要选择能使h(x)最大化的类。

过度拟合的问题

考虑从x ∈ R预测y的问题,下面最左边的图显示了将y=θ0+θ1x匹配到数据集的结果。我们看到数据并不是真的在直线上,所以这个数据不是很好。

image
相反,如果我们添加了一个额外的特征x^2,并且拟合

y=θ0+θ1x+θ2x2
,那么我们就可以得到稍微更好的数据(参见中间图)。觉得我们添加的特征越多越好是很天真的。添加太多的特征也有危险:最右的图形是拟合一个5阶多项式
y=5j=0θjxj
的结果。我们看到,即使拟合后曲线完美的通过数据,我们不觉得这是一个很好的预测,比如对不同生活地段(x)的房价(y)。不正式地定义这些术语的意思,我们会说左边的图显示了一个欠拟合的实例。数据明显显示了结构跟模型契合的很不好。右边的图是过拟合的一个例子。

欠拟合或高偏差,指当我们的假设函数h映射到数据的趋势时表现很差。它通常是由函数太简单或使用太少的特征引起的。另一个极端,过度拟合或高方差,是由符合可用数据但不能很好地预测新数据的假设函数引起的。它通常是由一个复杂的函数引起的,它会产生许多与数据无关的不必要的曲线和角。

这个术语适用于线性和逻辑回归。解决过拟合的问题有两个主要的选择:

1)减少特征的数量:
- 手动选择要保留的特性。
- 使用模型选择算法(在课程的后面学习)。

2)正则化
- 保持所有的特征,但是降低参数θj的量级。
- 当我们有很多有用的特征时,正则化就会很好。

正则化成本函数

如果我们的假设函数中存在过拟合,我们就可以通过增加函数中某些项的成本来减少它们的权重。

假设我们想让下面的函数更接近二次函数:

θ0+θ1x+θ2x2+θ3x3+θ4x4

我们要消除θ3x^3 和 θ4x^4的影响。如果不去掉这些特征或者改变我们假设的形式,那么可以改变我们的成本函数:

minθ 12mmi=1(hθ(x(i))y(i))2+1000θ23+1000θ24

我们在最后加了两个额外的项,以增加θ3和θ4的成本。现在,为了使成本函数接近于零,我们需要将θ3和θ4的值降低到接近0。这将极大地减少我们的假设函数中的θ3x^3 和θ4x^4 的值。因此,我们看到新的假设(由粉色曲线所描述)看起来像一个二次函数,但是由于额外两项θ3x^3 和θ4x^4,更拟合数据。
image
我们还可以将所有的函数值都用一个求和来进行正则化

minθ 12m mi=1(hθ(x(i))y(i))2+λ nj=1θ2j

λ或lambda,是正则化参数。它决定了我们的参数的成本是多少。
利用以上的成本函数和额外的总和,我们可以使假设函数的输出平滑,从而减少过度拟合。如果选择太大,它可能会使函数过于平滑,导致不合适。因此,如果λ=0或太小,会发生什么?

正规化的线性回归

注意:对矩阵X,如果是m≤n,那么X是不可逆的。正确的表述应该是,如果m<n,那么X是不可逆的,如果m=n,X可能是不可逆的。
我们可以将正则化应用于线性回归和逻辑回归。我们将首先处理线性回归。

梯度下降法

我们将修改梯度下降函数,将0与其他参数分离,因为我们不想对0进行惩罚。

Repeat {
θ0:=θ0α 1m mi=1(hθ(x(i))y(i))x(i)0
θj:=θjα [(1m mi=1(hθ(x(i))y(i))x(i)j)+λmθj] j{1,2n}
}

其中
λmθj
这一项执行正则化。通过一些处理,我们的更新规则也可以表示为:

θj:=θj(1αλm)α1mmi=1(hθ(x(i))y(i))x(i)j

在上面的方程的第一项,
1αλm
总是小于1。直观上,您可以看到它在每次更新时都减少了θj的值。注意,第二项现在和以前完全一样了。

正规方程

现在让我们用非迭代法的替代,正规方程来接近正则化。

为了引入正则化,这个方程和原来的一样,除了在括号里加上另一个项:

θ=(XTX+λL)1XTy
where  L=0111

L是一个矩阵,左上是0,在对角线上是1,在其它地方都是0。它应该有维数(n+1)×(n+1)。直观地说,这是单位矩阵(尽管我们不包括x0),乘以一个实数λ。
回想一下,如果m小于n,那么
XTX
是不可逆的。但是,当我们加上λ⋅L,那
XTX+λL
就变成可逆的了。

正则化的逻辑回归

我们可以用类似的方法来正则化逻辑回归,就像我们对线性回归进行正则化一样。因此,我们可以避免过拟合。下面的图像显示了由粉色线显示的正则化函数,比蓝色线表示的非正则化函数更不可能过度拟合。
image

成本函数

回想一下,我们的逻辑回归的成本函数是:

J(θ)=1mmi=1[y(i) log(hθ(x(i)))+(1y(i)) log(1hθ(x(i)))]

我们可以通过在最后加上一个项来对这个等式进行正则化:

J(θ)=1mmi=1[y(i) log(hθ(x(i)))+(1y(i)) log(1hθ(x(i)))]+λ2mnj=1θ2j

第二个和
nj=1θ2j
明确地意味着排除偏置项θ0。也就是说,向量θ的索引从0到n(保持n+1个值,从θ0到θn),并且这个和从θ1到θn明显不包括θ0。因此,在计算方程时,我们应该不断更新以下两个方程:
image

原创粉丝点击