机器学习笔记(8)逻辑回归模型

/*本课程笔记依托于Machine Learning——Andrew Ng(Stanford University)*/

同样在这篇笔记中,我们一样会谈到代价函数和梯度下降方法,不过之前提到的代价函数和梯度下降法适用于线性回归的问题,而在这里我们提到的代价函数和梯度下降是适用于分类方法的

首先我们来看一下代价函数

和之前代价函数的作用相同,这里的代价函数同样是来验证假设函数是否符合预期,也就是拟合参数的优化目标

这是我们暂时需要用到的原材料,这里面有训练集,假设函数以及example,现在的问题如何选择合适的θ,我们可以先套用笔记(2)的表达式做一下试验在这里我们可以看到实际上真正的逻辑部分是当我们将hθx带入表达式中就会发现这是一个比较复杂的式子,而且经过绘图软件的绘制后我们发现这个函数图象其实是一个非凸函数对非凸函数进行梯度下降时最致命的问题就是很容易收敛到局部最优解,而我们希望通过核心部分得到的代价函数是类似的凸函数,这样在应用梯度下降算法的时候我们能很轻松的收敛到全局最优解,那么显然我们就不能使用线性回归中的核心思想,因为分类问题中y的值域在0-1根据这一特性,我们可以考虑使用对数函数(log),因此分类问题的代价函数就是这样带有log的方程组

这样构建方程组会有一些需要注意的问题,比方说不同y值下的函数图像,以及如何解读函数图象

至于图像是怎么画出来的就不用我说了想必大家都知道

通过这样构建的cost(hθ(x),y)函数的特点是:当实际的y=1并且hθ=1时误差为0,当y=1但hθ不等于1时误差随着hθ的变小而变大,当实际的y=0且hθ也为0时代价为0,当y=0但hθ不为0时误差随着hθ的变大而变大

当我们在编程环境中,处理一个方程组显然比处理单个算式要复杂,所以我们要对代价函数进行优化。这个函数可以代替上面的方程组,因为在分类问题中y的分类已经限定了0 1两个结果,因此根据这一特征我们可以很方便的理解上述算式,当y=0时得到的正是代价函数中y=0的方程,当y=1时得到的也正是代价函数中y=1的方程,这样当我们带入J(θ)函数后整个式子会比方程组显得更加友好,当然这个函数不止有看起来友好那么简单,这个函数实际上是凸函数,也就是梯度下降方法可以在这个函数上很好的运行

当我们有了代价函数后,并且代价函数也对梯度下降很友好的时候,我们就要开始应用梯度下降算法来最小化参数θ 自然梯度下降方法的计算公式是不会变的,将实际J(θ)带入后,我们会得到一个和线性回归时使用的梯度下降看起来差不多的一个算法公式也许你就会认为在这里的梯度下降算法和线性回归中的梯度下降算法是一样的,不过不要忽略了一个事情,这里的hθ(x)与梯度下降中的hθ(x)就不相同,因此这两个算法公式在本质上存在天壤之别。另外和之前一样在进行梯度下降之前进行特征缩放仍然是件很有必要的事情,我们在进行梯度下降的时候也可以使用例如循环迭代等方法来梯度下降,只要保证之前说的同步更新即可

当然梯度下降也只是Andrew Ng在课上提到的最小化代价函数的方法之一,当然也存在几个并不需要学习率α的、比常规梯度下降还要快的:共轭梯度(Conjugate Gradient)、局部优化法(BFGS)、有限内存局部优化法(LBFGS)等

前面我们只是介绍了如何对两个类进行分类,当我们需要对两个以上的类别进行分类的时候,我们就需要对上面的算法做一些小小的改动。前面是将两个类别分为了正类和负类分别记为y=0和y=1,在多类的分类问题中,我们可以引入多个标记,例如记录天气是晴天,多云,下雨还是下雪,我们就可以引入四个标记y=0,y=1,y=2,y=3,来表示前面说的四种天气。当然在MATLAB和Octave中下标是从1开始的(下标从几开始并不重要)。这张图说明了多类别的情况,当我们遇到这种情况应该如何分类呢?实际上还是采用前面提到的对于两个类别的逻辑分类,当我们选中绿色的那一类为正类时,将红色和蓝色默认归为负类,实际上就是创建了多个分类器,让多个分类器对数据进行处理,这样就将多类问题简化成了二类问题。以此类推这样就可以把三类甚至多类问题简化为二类问题,从而运用前面的知识就可以轻松解决

About the author

NOBUG.IN

Add comment

By NOBUG.IN

Your sidebar area is currently empty. Hurry up and add some widgets.