经典的机器学习二分类算法——Logistic回归

本文深入解析Logistic回归,包括Sigmoid函数的应用、代价函数的定义、优化目标与算法描述,以及如何利用Octave进行实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

对于维度为m+1m+1特征为xx样本的二分类问题,有负类(Negative Class)记为0,正类(Positive Class)记为11,即对于类别y,有

y{0,1}.y∈{0,1}.

我们期望找到一个hθ(x)hθ(x),使得
0hθ(x)1.0⩽hθ(x)⩽1.

其中,θθ为待优化的参数,使得在对未知类别的样本x0x0分类时,
hθ(x0)hθ(x0)为样本为正类的概率。即分类准则如下:
y0={0,1,if hθ(x0)<0.5;if hθ(x0)0.5.y0={0,if hθ(x0)<0.5;1,if hθ(x0)≥0.5.

Logistic回归

在线性回归(Linear Regression)中,我们常找一组参数

θ=θ0θ1...θmθ=(θ0θ1...θm)

计算
f(x)=θTx.f(x)=θTx.

设置阈值TT,通过f(x)TT的大小关系判断正负类。
而在Logistic回归中,我们引入Sigmoid函数
g(z)=11+ez.

其图像如下
这里写图片描述
Logistic回归取hypothesis function为
hθ(x)=g(θTx)=11+eθTx=p(y=1|x;θ)=p(y=0|x;θ).hθ(x)=g(θTx)=11+eθTx=p(y=1|x;θ)=p(y=0|x;θ).

hθ(x)hθ(x)等价于正类的概率,由Sigmoid函数图像可知,当θTx0θTx≥0时,判定为正类,当θTx<0θTx<0时,判定为负类。

代价函数(cost function)

与线性回归问题类似,Logistic同样需要定义代价函数使用梯度下降法优化参数
由于Sigmoid函数的使用,若使用与线性回归相同的二次损失函数,优化问题将变为非凸问题,即可能存在很多局部最优解。Logistic回归采用以下损失函数

cost(hθ(x),y)={log(hθ(x)),log(1hθ(x)),if y=1;if y=0.cost(hθ(x),y)={−log⁡(hθ(x)),if y=1;−log⁡(1−hθ(x)),if y=0.

为了方便计算,将分段损失函数改写为如下形式
cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x)).cost(hθ(x),y)=−ylog⁡(hθ(x))−(1−y)log⁡(1−hθ(x)).

优化目标

对于样本数目为nn的训练集,定义目标函数为

J(θ)=1ni=1ncost(hθ(x(i)),y(i))=1n[i=1ny(i)log(hθ(x(i))+(1y(i))log(1hθ(x(i))]

优化目标为:找到令J(θ)J(θ)最小的θθ.

算法描述

wantwant :

minθJ(θ)minθJ(θ)

RepeatRepeat
θj:=θjαJ(θ)θj,j=0,...,m.θj:=θj−α∂J(θ)θj,j=0,...,m.

其中,αα为梯度下降法的学习率.

优化算法列举

1)Gradient descent
2)Conjugate gradient
3)BFGS
4)L-BFGS

利用Octave实现Logistic回归

Octave是一种高层解释类编程语言,旨在解决线性和非线性的数值计算问题。Octave为GNU项目下的开源软件,早期版本为命令行交互方式,4.0.0版本发布基于QT编写的GUI交互界面。Octave语法与Matlab语法非常接近,可以很容易的将matlab程序移植到Octave。同时与C++,QT等接口较Matlab更加方便。
注:Octave与Matlab语法类似,下标从1开始。
例子:

θ=(θ1θ2)θ=(θ1θ2)

J(θ)=(θ11)2+(θ21)2J(θ)=(θ1−1)2+(θ2−1)2

J(θ)θ1=2(θ11)∂J(θ)θ1=2(θ1−1)

J(θ)θ2=2(θ21)∂J(θ)θ2=2(θ2−1)

代码:
定义函数,给出优化目标及对应的梯度,初始化梯度
    function [jVal, gradient] = costFunction(theta)
      jVal = (theta(1)-1)^2 + (theta(2)-1)^2;
      gradient = zeros(2,1)
      gradient(1) = 2 * (theta(1)-1);
      gradient(2) = 2 * (theta(2)-1);
    endfunction

设定option,设置梯度目标参数为打开,最大迭代次数为100,并初始化θθ.

options = optimset('GradObj', 'on', 'MaxIter','100')
initialTheta = zeros(2,1)

调用fminunc这个函数,传入三个参数,其中第一个参数@costFunction这里的@符号代表指向之前我们定义的costFunction函数的指针。后面两个参数分别是我们定义的thetatheta初始值和配置信息options。它会自动的从众多高级优化算法中挑选一个来使用。

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

输出结果
这里写图片描述
θ1=1θ1=1,θ2=1θ2=1exitFlag=1exitFlag=1表明已经收敛.

注:本文内容为网易云课堂吴恩达机器学习视频学习时的记录的笔记,仅做学习使用,笔者对OCTAVE首次接触,仅仅实现了课堂上的例子。如有错误,欢迎联系笔者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值