【Machine Learning】笔记:Logistic Regression Model

来源:互联网 发布:淘宝清库存 编辑:程序博客网 时间:2024/04/29 15:34

课程是 Coursera 上 Andrew Ng 的公开课 Machine Learning 第三周的内容之一。

Hypothesis Representation

在 logistic regression 中,定义 hypothesis 为:

Hθ(x)=g(θTx)g(z)=11+ez

其中,g(z) 也叫作 sigmoid function 或 logistic function.
本质上,就是 θTx 与0的关系决定了分到哪一类,这代表了一条平面上的直线或一个超平面,叫作 dicision boundary,决策边界是由 hypothesis 决定的,与数据集无关。

Cost Function

在 Linear Regression 中,定义误差函数为:

J(θ)=1m1m12(hθ(x(i))y(i))2

把里面的 12(hθ(x(i))y(i))2 定义为 cost function:

Cost(hθ(x),y)=12(hθ(x)y)2

可以把 J(θ) 一般化为:

J(θ)=1m1mCost(hθ(x(i)),y(i))

但是,当 hθ(x) 为 logistic regression 中所定义的 hypothesis 时,代入 linear regression 的 cost function 会导致 J(θ) 非凸,变得不容易进行优化。
因此,重新定义 logistic regression 的 cost function 为:

Cost(hθ(x),y)={log(hθ(x)),log(1hθ(x)),if y=1if y=0

再次运用 Gradient Descent

先把 Cost(hθ(x),y) 的分段函数形式简化一下:

J(θ)=1m1mCost(hθ(x(i)),y(i))=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

如果写成向量化的形式:

hJ(θ)=g(Xθ)=1m(yTlog(h)(1y)Tlog(1h))

使用梯度下降法更新:

θj:=θjαmi=1m(hθ(x(i))y(i))x(i)j

在向量化形式下:

θ:=θαmXT(g(Xθ)y)

其他最优化方法

在最小化 J(θ) 的过程中,梯度下降法不是唯一的方法,还有一些其他的更高级的方法:

  • Conjugate gradient 共轭梯度法
  • BFGS 变尺度法
  • L-BFGS

在使用它们时,要求定义出下面两项的计算方法:

  • J(θ)
  • θjJ(θ)for j=0,1,,n

这些高级的算法相比于梯度下降法,可以不用人为地选择学习速率 α,事实上它们有一个智能的内部循环(line search 算法),它可以自动尝试不同的 α 并选择一个较好的 α,并且,这些算法比梯度下降法收敛地更快。但它们的缺点就是太复杂了。

Octave 最优化方法示例

下面举一个在 Octave 中使用最优化函数的例子。
先定义一个 costFunction 函数,返回值是 J(θ) 和它的梯度:

function [jVal, gradient] = costFunction(theta)    jVal = [...code to compute J(theta)...];    gradient = [...code to compute derivative of J(theta)...];end

然后我们就可以调用 Octave 自带的无约束最小化函数 fminunc:

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

上面的代码中,先用 options 存储一些设置参数,第一个是设置梯度目标函数的状态为“打开”,这意味着需要提供一个梯度,第二个是指最大迭代次数为100次。
之后将事先定义好的 costFunction 传入 fminunc 函数中,@ 表示传入函数的指针。
fminunc 的返回值有三个:参数的最优解,最优的函数值,退出的状态(1表示收敛)。

原创粉丝点击