1、Cost Function
And the question that I want to talk about is given this training set, how do we choose, or how do we fit the parameter's theta?
2、Simplified Cost Function and Gradient Descent
In this video, we'll figure out a slightly simpler way to write the cost function than we have been using so far. And we'll also figure out how to apply gradient descent to fit the parameters of logistic regression.
Because y is either zero or one, we'll be able to come up with a simpler way to write this cost function. And in particular, rather than writing out this cost function on two separate lines with two separate cases, so y equals one and y equals zero.
I'm going to show you a way to take these two lines and compress them into one equation.
3、Advanced optimization
一些高级优化算法和一些高级的优化概念,利用这些方法,我们就能够使通过梯度下降进行逻辑回归的速度大大提高,而这也将使算法更加适合解决。
那么,我们再来回顾下梯度下降的运行思想?什么是梯度下降?
什么是梯度下降呢???我们现在有个代价函数 J ,而我们想要使其最小化,那么我们需要做的是,编写代码,当输入参数 θ 时,它们会计算出两样东西 J(θ) 以及 J等于 0、1直到 n 时的偏导数项,假设我们已经完成了,可以实现这两件事的代码,那么梯度下降所做的就是,反复执行这些更新,生成了这个叫做 data 的对象 是吧? 所以给出我们用于计算这些的偏导数的代码,梯度下降法就把它插入到这里,从而来更新参数 θ。
当我们明白了一个基本算法的思想之后,我们自然而然的会去想,有没有更好的算法?能够改善已有算法的时间复杂度或运算复杂度?在此处就是改善,是的逻辑回归的苏打大大提升???从哪个角度?
优化代价函数的不同算法: 共轭梯度法/BFGS (变尺度法)/ L-BFGS (限制变尺度法)/
这三种算法有许多优点:
1)不需要手动选择学习率 α:这些算法的一种思路是,给出计算导数项和代价函数的方法,你可以认为算法有一个智能的内部循环,而且事实上,他们确实有一个智能的内部循环称为线性搜索(line search)算法,它可以自动尝试不同的学习速率 α ,并自动选择一个好的学习速率 α 因此它甚至可以为每次迭代选择不同的学习速率,那么你就不需要自己选择。
2)运算速度很快。
但是,这些算法,相比较于批量梯度下降法,运算很复杂。幸运的是,有 Octave 和它密切相关的 MATLAB 语言,我们将会用到它们 Octave 有一个非常理想的库用于实现这些先进的优化算, 所以,如果你直接调用它自带的库,就能得到不错的结果。
一个很好的例子:Octave中 fminunc 函数的使用方法。
运行这个 costFunction 函数后,你就可以,调用高级的优化函数, 这个函数叫 fminunc,它表示 Octave 里无约束最小化函数,调用它的方式如下,你要设置几个 options,这个 options 变量,作为一个数据结构可以存储你想要的 options,所以 GradObj 和 On 这里设置梯度目标参数为打开(on),这意味着你现在确实要给这算法提供一个梯度,然后设置最大迭代次数,比方说 100 ,我们给出一个 θ 的猜测初始值,它是一个2×1的向量,那么这个命令就调用 fminunc 这个@符号表示,指向我们刚刚定义的costFunction 函数的指针,如果你调用它,它就会 使用众多高级优化算法中的一个,当然你也可以把它当成梯度下降,只不过它能自动选择学习速率α 你不需要自己来做,然后它会尝试使用这些高级的优化算法,就像加强版的梯度下降法为你找到最佳的 θ 值。