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)满足
这种形式通过将θ^Tx带入逻辑回归函数实现。
我们的新形式采用“双曲线函数”,也被称为“逻辑回归函数”:
下图显示了我们什么双曲线函数的样子:
函数g(Z),在此示出,映射任何实数到(0,1)之间,使得它可用于转化任意值函数为更好地适合于分类的函数。
hθ(x)会给我们输出为1的几率。例如,
有70%的几率,我们的输出为1。预测是0的概率是预测是1的概率的补集(例如,如果概率是1为70%,那么概率是0是30%)。
决策边界
为了得到离散值0或1的分类,我们可以按照如下转换为假设函数输出:
我们的逻辑函数g的行为方式是,当它的输入大于或等于零,其输出大于或等于0.5:
还记得:
所以,如果我们输入
,那意味着:
从以上表述,我们可以得出结论:
该决策边界是由我们的假设函数创建的用于分割y = 0和y = 1的直线。
例如:
在这种情况下,我们的决策边界是在图形中 X1=5的一条垂直线,线的左侧表示Y = 1,而右侧表示y = 0。
同样,S形函数g(z)的输入不需要是线性的,可以是一个圆的方程(例如
)或其他任何形状,以拟合我们的数据。
成本函数
我们不能用与线性回归相同的成本函数,因为逻辑回归将导致输出为波浪形,造成了许多局部最优。换句话说,它不会是一个凸函数。
作为代替,我们的逻辑回归的成本函数如下:
当Y = 1时,我们得到如下的J(θ) vs hθ(x)的对比图像:
同样,当Y = 0时,我们得到如下的J(θ) vs hθ(x)的对比图像:
如果我们正确的答案“Y”是0,如果我们的假设函数也输出0,那么成本函数将是0。如果我们的假设趋于1,则成本函数将趋于无穷大。
如果我们正确的答案“Y”是1,如果我们的假设函数也输出0,那么成本函数将是1。如果我们的假设趋于0,那么成本函数将趋于无穷大。
请注意,写这样的成本函数保证J(θ)是凸的逻辑回归。
简化的成本函数和梯度下降
我们可以把我们的成本函数两个条件的情况下合并成一个:
请注意,当y等于1,则第二项
将为零,且不会影响结果;
如果y等于0,则所述第一项
将为零,且不会影响结果。
我们完全可以写出我们整个成本函数如下:
向量化的表示为:
梯度下降
请记住,梯度下降的一般形式是:
我们可以用微积分求出导数部分:
请注意,这个算法与我们在线性回归中使用的算法是相同的。我们仍然需要同时更新所有的θ值。
向量化表示:
优化改进
“共轭梯度”,“BFGS”和“L-BFGS”是更复杂的,更快速的方式来代替梯度下降优化θ。我们建议你不要自己写这些更复杂的算法(除非你是在数值计算方面的专家),但是使用库则相反,因为他们已经被测试并高度优化。并且被Octave支持。
我们首先需要为给定的输入值θ给以下两个函数提供计算结果:
我们可以写一个函数返回这两个值:
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”是我们类中的一员的概率。
我们选择了一个类,然后将所有其他的类都归并到一个单独的类中。我们反复地这样做,将二元逻辑回归应用到每一个案例中,然后使用返回最高值作为我们的预测的假设。
下图显示了一个如何对三个类进行分类:
总结:
为每个类训练一个逻辑回归分类器h(x)来预测y=i的概率。
要对新x做出预测,要选择能使h(x)最大化的类。
过度拟合的问题
考虑从x ∈ R预测y的问题,下面最左边的图显示了将y=θ0+θ1x匹配到数据集的结果。我们看到数据并不是真的在直线上,所以这个数据不是很好。
相反,如果我们添加了一个额外的特征x^2,并且拟合
,那么我们就可以得到稍微更好的数据(参见中间图)。觉得我们添加的特征越多越好是很天真的。添加太多的特征也有危险:最右的图形是拟合一个5阶多项式
的结果。我们看到,即使拟合后曲线完美的通过数据,我们不觉得这是一个很好的预测,比如对不同生活地段(x)的房价(y)。不正式地定义这些术语的意思,我们会说左边的图显示了一个欠拟合的实例。数据明显显示了结构跟模型契合的很不好。右边的图是过拟合的一个例子。
欠拟合或高偏差,指当我们的假设函数h映射到数据的趋势时表现很差。它通常是由函数太简单或使用太少的特征引起的。另一个极端,过度拟合或高方差,是由符合可用数据但不能很好地预测新数据的假设函数引起的。它通常是由一个复杂的函数引起的,它会产生许多与数据无关的不必要的曲线和角。
这个术语适用于线性和逻辑回归。解决过拟合的问题有两个主要的选择:
1)减少特征的数量:
- 手动选择要保留的特性。
- 使用模型选择算法(在课程的后面学习)。
2)正则化
- 保持所有的特征,但是降低参数θj的量级。
- 当我们有很多有用的特征时,正则化就会很好。
正则化成本函数
如果我们的假设函数中存在过拟合,我们就可以通过增加函数中某些项的成本来减少它们的权重。
假设我们想让下面的函数更接近二次函数:
我们要消除θ3x^3 和 θ4x^4的影响。如果不去掉这些特征或者改变我们假设的形式,那么可以改变我们的成本函数:
我们在最后加了两个额外的项,以增加θ3和θ4的成本。现在,为了使成本函数接近于零,我们需要将θ3和θ4的值降低到接近0。这将极大地减少我们的假设函数中的θ3x^3 和θ4x^4 的值。因此,我们看到新的假设(由粉色曲线所描述)看起来像一个二次函数,但是由于额外两项θ3x^3 和θ4x^4,更拟合数据。
我们还可以将所有的函数值都用一个求和来进行正则化
λ或lambda,是正则化参数。它决定了我们的参数的成本是多少。
利用以上的成本函数和额外的总和,我们可以使假设函数的输出平滑,从而减少过度拟合。如果选择太大,它可能会使函数过于平滑,导致不合适。因此,如果λ=0或太小,会发生什么?
正规化的线性回归
注意:对矩阵X,如果是m≤n,那么X是不可逆的。正确的表述应该是,如果m<n,那么X是不可逆的,如果m=n,X可能是不可逆的。
我们可以将正则化应用于线性回归和逻辑回归。我们将首先处理线性回归。
梯度下降法
我们将修改梯度下降函数,将0与其他参数分离,因为我们不想对0进行惩罚。
其中
这一项执行正则化。通过一些处理,我们的更新规则也可以表示为:
在上面的方程的第一项,
总是小于1。直观上,您可以看到它在每次更新时都减少了θj的值。注意,第二项现在和以前完全一样了。
正规方程
现在让我们用非迭代法的替代,正规方程来接近正则化。
为了引入正则化,这个方程和原来的一样,除了在括号里加上另一个项:
L是一个矩阵,左上是0,在对角线上是1,在其它地方都是0。它应该有维数(n+1)×(n+1)。直观地说,这是单位矩阵(尽管我们不包括x0),乘以一个实数λ。
回想一下,如果m小于n,那么
是不可逆的。但是,当我们加上λ⋅L,那
就变成可逆的了。
正则化的逻辑回归
我们可以用类似的方法来正则化逻辑回归,就像我们对线性回归进行正则化一样。因此,我们可以避免过拟合。下面的图像显示了由粉色线显示的正则化函数,比蓝色线表示的非正则化函数更不可能过度拟合。
成本函数
回想一下,我们的逻辑回归的成本函数是:
我们可以通过在最后加上一个项来对这个等式进行正则化:
第二个和
明确地意味着排除偏置项θ0。也就是说,向量θ的索引从0到n(保持n+1个值,从θ0到θn),并且这个和从θ1到θn明显不包括θ0。因此,在计算方程时,我们应该不断更新以下两个方程:
- Andrew Ng笔记-week3
- 机器学习笔记week3(Andrew NG)
- Andrew Ng机器学习课程笔记--week3
- Andrew NG 机器学习 笔记-week3-逻辑回归
- Andrew Ng机器学习笔记week3 逻辑回归
- Machine Learning-Andrew Ng-week3
- Andrew Ng机器学习课程笔记--week3(逻辑回归&正则化参数)
- Andrew Ng机器学习课程笔记--week3(逻辑回归&正则化参数)
- Andrew Ng笔记
- Andrew Ng笔记-week1
- Andrew Ng笔记-week2
- Andrew Ng机器学习week3(Regularization)编程习题
- andrew ng机器学习笔记
- Machine_Learning_Yearning-Andrew NG 笔记整理
- Andrew Ng的machine learning课程week3编程题python实现
- Andrew Ng 《机器学习》课程笔记
- Andrew Ng 机器学习笔记(一)
- Andrew Ng 机器学习笔记(二)
- Swagger 自定义UI界面
- 1. Python tutorial
- CSS3学习笔记-背景
- app客户端上传图片实现方式
- spring-boot 学习笔记(1)
- Andrew Ng笔记-week3
- session共享策略
- ajax语法,ajax写法
- Python创建数字列表
- git: Your branch and 'origin/master' have diverged
- HTML简介——1
- STM32芯片型号的命名规则。
- mybatis+tk mapper使用oracle sequence自增时其中一点小结
- 日记