您的位置:首页 > 其它

机器学习-NG-week3-逻辑回归

2018-01-09 19:12 363 查看
这周我们主讲逻辑回归和正则化两个大问题:

一:逻辑回归

(1)分类问题

在分类问题中,我们预测的变量y是离散值,我们将学习一种广泛运用的逻辑回归算法。我们经常讨论的二元分类问题,例如预测这个肿瘤是良性还是恶性,判断这个邮件是不是垃圾邮件等等,对于二元的分类问题,我们将可能属于的两个类别一个称为负向类(negative class)和正向类(positive class),则因变量

,其中0表示负向类,1表示正向类。当我们使用线性回归来处理分类问题的时候,假设函数的输出值可能远大于1或者远小于1,所以我们不用线性回归来处理分类问题,而是使用逻辑回归来处理分类问题,这个算法的性质就是输出值永远在0到1之间。注意逻辑回归问题是一个分类算法,虽然他的名字里面出现“回归”二字。

(2)假设函数

逻辑回归模型的输出变量的范围始终在0和1之间。逻辑回归模型的假设是

,其中X是特征向量,g代表逻辑函数(logistic
function),是S形函数(sigmoid function),公式是

,该函数的图像如下:



所以合起来,我们得到逻辑回归模型的假设:



的作用在于:对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated
probability),即

,例如对于给定的x,通过已经确定的参数计算得出

,则表示有70%的几率y是正向类,相应的y为负向类的几率为0.3!

在逻辑回归中,我们预测:



大于等于0.5的时候,预测y=1;



小于0.5的时候,预测y=0。

根据上图可知,z=0的时候,g(z)=0.5,;z>0的时候,g(z)>0.5;z<0的时候,g(z)<0.5,然而

,所以当

,预测y=1;当

,预测y=0

(3)判定边界-decision boundary

结合上面的知识,给定数据集,我们求得了他的模型参数,得到了他的假设函数,我们可以从代价函数得到他的决策边界,例如Ng课程里面的一张图,我们得知了他的theta参数和代价函数,我们由此可知道通过

,模型预测y=0,这样可以得到一个决策边界线!

比如下图,他的参数

,那么

,即

,模型将预测y=1.那么我们绘制

,这个线便是该模型的分界线,将预测为1的区域和预测为0的区域分隔开!





当然边界线不全都是线性的直线也可以是曲线!我们需要二次方特征:假设函数

,则我们的判定边界刚好是圆心在原点且半径为1的圆!



(4)代价函数

训练集:


m examples:






对于线性回归模型,我们定义的代价函数是所有模型误差的平方和,理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题所在,当我们将

带入到这样定义的代价函数中时,我们得到的代价函数是一个非凸函数(non-convex
function)

下图拿的是Ng课程上的一张图来说明什么是凸函数什么是非凸函数:



如果是非凸函数,那意味着将会有许多的局部最小值,这就会影响梯度下降算法寻找全局最小值。

线性回归的代价函数:


逻辑回归的代价函数:


当y=1时:


当y=0时:


下图将展示



之间的关系:



这样构建的

函数的特点是:当实际的y=1且

也为1时误差为0,当y=1,但

不为1的时候,误差随着

的变小而变小;但实际y=0且

也为0的时候代价为0,当y=0但

不为0的时候,误差随着

变大而变大!

将构建的

简化:


代入到代价函数得到:


(5)梯度下降算法

我们照样可以在得到一个代价函数之后利用梯度下降算法求得使得代价函数最小的参数:

repeat{


(simultaneously update all)

}

进一步求导之后得到的是:

repeat{



}

推导的过程:



这里Ng视频里面有句话我无法理解:我们定义了单训练样本的代价函数,凸性分析超过了这门课的范围,但是可以证明我们所选的代价函数会给我们一个凸优化的问题。代价函数会是一个凸函数,并且没有局部最优值!!!到目前为止我不知道怎么这样得到的就是凸函数!

虽然这个梯度下降算法看上去与线性回归的梯度下降算法一致,但是这个函数里面的

与线性回归里面不同!!!同时注意梯度下降的特征缩放也是有必要的!

(6)向量化

虽然前面那张推导梯度下降的纸上写着向量化之后的各个公式,但是我觉得还是有必要在这里重新申明一下:

假设函数:


代价函数:


梯度下降推导公式:


以上的公式都可以通过维数来推导!

(7)高级优化算法

除了梯度下降算法之外,我们还有一些常用来是代价函数最小的算法。这些算法不需要人工选择学习率,你可以理解成算法有一个智能的内部循环,称为线性搜索(linear search),它可以自动的尝试各种学习率,选择最佳的学习率,甚至可以为迭代的每一步选择一个学习率;且这些算法通常比梯度下降算法更加快速。这些算法有:共轭梯度(conjugate gradient),局部优化算法(BFGS)和有限内存局部优化法(LBFS)。下面我们介绍一种Ng讲过的无约束最小化函数fminunc函数,这个是MATLAB自带的一种最小值优化函数。使用的时候我们需要提供代价函数和每个参数的求导,下面是介绍:

假设我们现在存在一个

,

,

,我们怎么使用这个函数
来求解最优值呢?

step1:编写函数求解代价函数和每个参数的求导

function [jval,gradient]=costfunction(theta)
jval=(theta(1)-5)^2+(theta(2)-5)^2;
gradient=zeros(2,1);
gradient(1)=2*(theta(1)-5);
gradient(2)=2*(theta(2)-5);
end

大框架:
function [jval,gradient]=costfunction(theta)

jval=[code to compute 

];

gradient(1)=[code to compute 

];

gradient(2)=[code to compute 

];

....

....

gradient(n+1)=[code to compute 

];

end

step2:在命令行里面运行下面的代码,得到想要的答案

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

解释:上面的options表示是一个数据结构,这个第一个参数表示梯度目标参数,第二个表示第一个参数是打开状态,意味着你需要给算法提供一个梯度,第三个参数是迭代步数,第四个参数表明他是100步;这个是自动旋转学习率的,无需人工干预,但是你的initialTheta必须大于等于2维,最后返回的参数exitflag表示的是该算法是否已经收敛,1表示已经收敛。


具体的用法:先完成step1保存这个代码在一个.m的文件里面,然后在matlab或者octave的命令行里面输入切换至这个.m文件所在的位置,之后完成step2。

下面是我在MATLAB里面的实践步骤截图:



上面的步骤不仅可以运用到逻辑回归也可以运用到线性回归当中,只需要你按照上面的步骤实现就行!

对于大规模的机器学习的问题,我们推荐你使用高级算法,而不是使用梯度下降算法。

(8)多类别分类-一对多-一对余

我们之前讨论的都是二元分类问题,现在我们开始讨论多元分类问题;案例,比如你收到了很多的邮件想判断这个邮件是属于那个类别的,是来自工作的,来自朋友的,来自家人的,来自兴趣爱好的,那么我们为这个问题分成四个类别,分别用y=1,y=2,y=3,y=4来代表。

记得二元分类问题的时候,我们绘制了一个数据集的图,分别是有圆圈和叉代表y=1和y=0这两个类。同样的多元分类问题的时候,我们需要使用三个图标来完成这个图:





我们怎么解决这样的问题呢?我们使用的是一对余的方法:



步骤:我们先从三角形代表的y=1的类别开始,将其余的两个类别全部当成负类,类型1当成正类;



这里的三角形代表正样本,而圆形代表负样本,这样我们可以当成二元分类问题来训练一个标准的逻辑回归分类器,我们称这个模型为

,这样我们得到了一个正边界。这样类似的我们选择另一个类标记为正向类,将其他的标记为负向类,在得到一个模型称为

,其余的类似这样运用这种方法。最后我们得到一系列的模型简称为:





那我们怎么进行预测新的输入变量的类别呢?

我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。

一对多的方法总结:我们就是需要训练多个逻辑回归的分类器,

,每一个i对应于可能的y=i,最后为了做出新的预测,我们需要输入一个新的x值,并且我们将这个x输入到每一个分类器中都会得到一个结果,最后比较这几个结果谁最大,即


二:正则化

(1)过拟合

我们现在所学的线性回归和逻辑回归已经能够解决一系列的很多问题了,但是当运用到某些特定的机器学习运用的时候,会碰到过拟合的问题,可能导致他们的效果十分的差!

下面是Ng课程上的一个截图,可以很清楚的看出什么是欠拟合什么是过拟合问题:



欠拟合:不能很好的适应我们的数据集;过拟合:过于强调原始的数据,当预测新的数据的时候,表现的特别的差。

过拟合处理方法:

方法一:丢弃一些不能帮助我们正确预测的特征。可以人工选择,也可以使用一些模型选择的算法来帮忙(PCA)

方法二:正则化。保留所有的特征,但是减少参数的大小

(2)代价函数

如上图的例三里面的假设函数,我们可以看出正是那些高次项导致了过拟合的产生,如果我们能够让那些高次项的系数接近于0,我们就能很好的拟合了。那我们需要做的就是减小

的值,我们修改代价函数,给

添加惩罚,这样我们在最小化代价函数的时候会选择更小的




那么扩展到很多的特征,我们不知道要惩罚哪些项,那我们将对所有的特征都进行惩罚:

,λ表示正则化参数,注意我们不要对

进行惩罚。下图的蓝线是之前未正则化,紫色是正则化之后的,大红色的是lambda过大的情况:



如果lambda选择的过大的话,就会使得所有的参数都减小了,导致模型变成

,欠拟合了!!!

(3)正则化线性回归

代价函数:


A.梯度下降算法

我们没有对

进行正则化操作,所以在进行梯度下降的时候,我们需要分情况:

repeat until convergence{




=


}可以看出:正则化线性回归的梯度下降算法的变化在于,每一次都在原有算法更新规则的基础上另theta值减少了一个额外的值。

B.正规方程

X是m*(n+1)维的矩阵,y是m*1维的向量,在线性回归方程中,我们正规方程求解最小值代价函数,

,正则化之后我们求得

(矩阵尺寸是(n+1)*(n+1)维)

推导过程:





(4)正则化逻辑回归

对于线性回归问题,我们学习了两种学习算法,一种基于梯度下降,一种基于正规方程

对于逻辑回归问题,我们学习了两种优化算法,一种基于梯度下降算法,接下来学习了更高级的优化算法,这种高级优化算法需要你自己设计代价函数



代价函数:


A.梯度下降算法:

repeat until convergence{




=



}

看上去和线性回归是一样的!!!但是我们知道

,与线性回归不一样!!

B.同样可以使用fminuc函数来求解代价函数最小化的参数,值得注意的是参数

的更新规则与其他情况不一样。

注意:

不参与其中任何一个正则化!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息