一、逻辑回归
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以及两个参数的梯度值。
-
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
-
>> options = optimset('GradObj','on','MaxIter',100);
-
>> initialTheta = zeros(2,1)
-
initialTheta =
-
-
0
-
0
-
-
>> [optTheta,functionVal,exitFlag] = fminunc(@costFunction,initialTheta,options)
-
-
Local minimum found.
-
-
Optimization completed because the size of the gradient is less than
-
the default value of the function tolerance.
-
-
optTheta =
-
-
5
-
5
-
-
functionVal =
-
-
0
-
-
exitFlag =
-
-
1
-
-
1
options = optimset('GradObj',100);设置梯度目标参数为打开(on),'MaxIter',100表示最大迭代100次。[optTheta,options),@符号表示指向我们定义的costFunction 函数的指针。
方法总结一下:首先Matlab里建立costFunction.m,定义函数costFunction以及参数的梯度值
-
>> options = optimset('GradObj',100);
-
>> initialTheta = zeros(n+1,1);
-
>> [optTheta,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,options)