Stanford机器学习 第三周:逻辑回归与正则化

一、逻辑回归

1.1 分类问题

判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;判断肿瘤是恶性的还是良性的等属于分类问题。

Eg:预测病人的肿瘤是恶性(malignant)还是良性(benign),用线性回归的方法拟合一条直线如图

当hθ大于等于0.5时,预测 y=1;当hθ小于0.5时,预测 y=0,这样的一个线性模型似乎能很好地完成分类任务。假使我们又观测到一个非常大尺寸的恶性肿瘤,将其作为实例加入到我们的训练集中来,这将使得我们获得一条新的直线(图中蓝色线)。

这时再使用0.5作为阀值来预测肿瘤是良性还是恶性便不合适了。线性回归模型对于分类问题不是一个好的方法,通常不会将线性回归应用到分类问题。在此引出逻辑回归模型。

分类问题y的输出为0或者1,线性回归的值可能大于1也可能小于0,逻辑回归。需要注意的是逻辑回归虽然名字上带有"回归"俩字,但是其属于分类算法

1.2 Hypothesis Representation

逻辑回归模型:

表示对于给定的输入变量x, y=1 的评估概率。

1.3 决策边界(Decision boundary)

Eg1:线性决策边界。假设现有训练集如图所示,假设函数为 ,其中

上图中直线就是决策边界。值得注意的是:决策边界不是训练集的属性,而是假设函数及其参数()的属性。参数定了决策边界也就定了,而不是通过训练集来决定决策边界。训练集是用来拟合参数的。

Eg2:非线性决策边界。假设现有训练集如图所示,假设函数为 ,假设通过某种方法已知参数的值(之后的课程会讲到如何选取参数的值)为[-1 0 0 1 1]T, 此时的决策边界就是一个圆。

对于更复杂的决策边界就需要用到高阶多项式了

1.4 代价函数

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

对于线性回归模型,我们定义的代价函数是 。当我们将 带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convex function)。

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

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

由于y总是等于0或者1,所以代价函数可以简化为

接下来就可以用梯度下降算法来算参数θ

形式上与之前的线性回归一样,只不过线性回归时,现在逻辑回归

1.5 高级优化

我们可以使用梯度下降算法来计算参数,但梯度下降算法并不是我们可以使用的唯一算法。还有其他一些算法,更高级、更复杂。如下图所示的三种算法以及优缺点

下边通过例子说明高级优化算法的使用方法

Eg:

这个代价函数,如果将 J(θ) 最小化的话,那么它的最小值将是 θ1等于5 ,θ2 等于5。在Matlab或者Octave里运行

Matlab里建立costFunction.m,定义函数costFunction以及两个参数的梯度值。

  1. function [ jVal,gradient ] = costFunction( theta )  
  2. jVal= (theta(1)-5)^2+(theta(2)-5)^2;  
  3. gradient = zeros(2,1);  
  4. gradient(1) = 2 * (theta(1)-5);  
  5. gradient(2) = 2 * (theta(2)-5);  
  6. end  

Matlab命令窗口里调用高级的优化函数fminunc

  1. >> options = optimset('GradObj','on','MaxIter',100);
  2. >> initialTheta = zeros(2,1)
  3. initialTheta =
  4.  
  5. 0
  6. 0
  7.  
  8. >> [optTheta,functionVal,exitFlag] = fminunc(@costFunction,initialTheta,options)
  9.  
  10. Local minimum found.
  11.  
  12. Optimization completed because the size of the gradient is less than
  13. the default value of the function tolerance.
  14.  
  15. optTheta =
  16.  
  17. 5
  18. 5
  19.  
  20. functionVal =
  21.  
  22. 0
  23.  
  24. exitFlag =
  25.  
  26.     
  27.      1  

options = optimset('GradObj','on','MaxIter',100);设置梯度目标参数为打开(on),'MaxIter',100表示最大迭代100次。[optTheta,functionVal,exitFlag] = fminunc(@costFunction,initialTheta,options),@符号表示指向我们定义的costFunction 函数的指针。

 

方法总结一下:首先Matlab里建立costFunction.m定义函数costFunction以及参数的梯度值

然后Matlab命令窗口里调用高级优化函数

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

1.6 多类别分类:一对多

多类别分类例如

one-vs-all method的分类方法就是将binary分类的方法应用到多类分类中。比如想分成k类,那么就将其中一类作为positive,另(k-1)合起来作为negative,这样进行k个h(θ)的参数优化,每次得到的一个hθ(x)是指给定θ和x,它属于positive的类的概率。

二、正则化

2.1 过拟合问题

以线性回归的预测房价为例,下边图一属于欠拟合,高偏差;图二拟合得比较好;图三属于过拟合,高方差。

过拟合特征多,过于复杂,失去泛化能力。所谓泛化能力就是通过学习(或机器学习)得到的模型对未知数据的预测能力。

对于逻辑回归:

过拟合解决办法:

2.2 代价函数

房价预测问题,假设模型如下边右图所示,代价函数中我们让前边的参数很大,那么最终最小化代价函数后会接近于0

正则化的方法就是在代价函数中加入惩罚项,由于我们并不知道其中哪些特征我们要惩罚,所以将对所有的特征进行惩罚

按照惯例我们不对进行惩罚,实践中这只有非常小的差异。上图中蓝色曲线为过拟合曲线,粉色为正则化后的曲线,可以看出正则化后的曲线更加简单与流畅。

 

在正则化线性回归时,如果我们选择的正则化参数λ过于大,就会导致所有的参数θ都近似为0,得到的回归模型就会为一条水平线,这就导致了欠拟合

2.3 正则化线性回归

对于线性回归的求解,之前讲到了梯度下降和标准方程两种方法,接下来就把这两种算法应用到正则化线性回归中

正则化线程回归代价函数为:

梯度下降算法为

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

标准方程算法为:

之前的标准方程法:,其中可能不可逆,也就是Matlab无法用

inv(), 正则化线性回归的标准方程算法括号里的矩阵是可逆的

2.4 正则化逻辑回归

之前讲过逻辑回归的代价函数和过拟合的问题

为了抑制过拟合我们加入惩罚项

正则化逻辑回归梯度下降算法:

 

接下来讨论用更高级优化算法得到正则化线性回归,需要注意的是对于高级优化算法需要我们自己定义代价函数

代价函数定义完后,在Matlab命令行窗口用使用fminunc调用即可

[optTheta,functionVal,exitFlag] = fminunc(@costFunction,initialTheta,options)

 

猜你喜欢

转载自blog.csdn.net/king_jie0210/article/details/63255760