机器学习公开课笔记(3):Logistic回归

Logistic 回归

通常是二元分类器(也可以用于多元分类),例如以下的分类问题

  • Email: spam / not spam
  • Tumor: Malignant / benign

假设 (Hypothesis):hθ(x)=g(θTx) g(z)=11+ez 其中g(z)称为sigmoid函数,其函数图象如下图所示,可以看出预测值y的取值范围是(0, 1),这样对于 hθ(x)0.5, 模型输出 y=1; 否则如果 hθ(x)<0.5, 模型输出 y=0

1. 对于输出的解释

hθ(x)=该数据属于 y=1分类的概率, 即 hθ(x)=P{y=1|x;θ} 此外由于y只能取0或者1两个值,换句话说,一个数据要么属于0分类要么属于1分类,假设已经知道了属于1分类的概率是p,那么当然其属于0分类的概率则为1-p,这样我们有以下结论 P(y=1|x;θ)+P(y=0|x;θ)=1 P(y=0|x;θ)=1P(y=1|x;θ)

2. 决策边界(Decision Bound)

函数g(z)是单调函数,

  • hθ(x)0.5预测输出y=1, 等价于θTx0预测输出y=1;
  • θ(x)<0.5预测输出y=0, 等价于θTx<0预测输出y=0;

这样不需要具体的带入sigmoid函数,只需要求解θTx0即可以得到对应的分类边界。下图给出了线性分类边界和非线性分类边界的例子

 3. 代价函数 (Cost Function)

在线性回归中我们定义的代价函数是,即采用最小二乘法来进行拟合

J(θ)=1mi=1mcost(hθ(x(i)),y) cost(hθ(x),y)=12(hθ(x)y)2

然而由于这里的假设是sigmoid函数,如果直接采用上面的代价函数,那么J(θ)将会是非凸函数,无法用梯度下降法求解最小值,因此我们定义Logistic cost function为

cost(hθ(x),y)={log(hθ(x));y=1log(1hθ(x));y=0

函数图像如下图所示,可以看到,当y=1时,预测正确时(hθ(x)=1)代价为零,反之预测错误时(hθ(x)=0)的代价非常大,符合我们的预期。同理从右图可以看出,当y=0时,预测正确时(hθ(x)=0)代价函数为0,反之预测错误时(hθ(x)=1)代价则非常大。表明该代价函数定义的非常合理。

 4. 简化的代价函数

前面的代价函数是分段函数,为了使得计算起来更加方便,可以将分段函数写成一个函数的形式,即

cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x))

J(θ)=1mi=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))

梯度下降

有了代价函数,问题转化成一个求最小值的优化问题,可以用梯度下降法进行求解,参数θ的更新公式为

θj=θjαθjJ(θ)

其中对J(θ)的偏导数为 θjJ(θ)=1mi=1m(hθ(x(i))y(i))xj(i) 注意在logistic回归中,我们的假设函数hθ(x)变了(加入了sigmoid函数),代价函数J(θ)也变了(取负对数,而不是最小二乘法), 但是从上面的结果可以看出偏导数的结果完全和线性归回一模一样。那么参数θ的更新公式也一样,如下

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

为什么偏导数长这样子,为什么和线性回归中的公式一模一样?公开课中没有给出证明过程,主要是多次使用复合函数的链式求导法则,具体的证明过程可以看这里。我也提供一个更加简洁的证明过程如下,首先将hθ(x(i))写成如下两个等式,即:hθ(x(i))=g(z(i)), g(z(i))=θTx(i)

其中g(z)=11+ez是sigmoid激活函数,对两个等式分别求导,有

dg(z)dz=11(1+ez)2ez(1)=ez(1+ez)2=11+ez1(1+ez)2=g(z)g(z)2=g(z)(1g(z))

dzdθj=d(θTx)dθj=d(θ0+θ1x1+θ2x2++θnxn)dθj=xj

然后我们开始对代价函数J(θ)=1mi=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))求偏导数

J(θ)θj=1mi=1my(i)1g(z(i))g(z(i))dzdθj+(1y(i))11g(z(i))(1)g(z(i))dzdθj=1mi=1my(i)1g(z(i))g(z(i))(1g(z(i)))xj(i)+(1y(i))11g(z(i))(1)g(z(i))(1g(z(i)))xj(i)=1mi=1my(i)(1g(z(i)))xj(i)+(y(i)1)g(z(i))xj(i)=1mi=1m(y(i)g(z(i)))xj(i)=1mi=1m(g(z(i))y(i))xj(i)=1mi=1m(hθ(x(i))y(i))xj(i)

至此我们已经求出了logistic回归代价函数的偏导数,可以看出它和线性归回中采用最小二乘的代价函数的偏导数形式上是一样的。

高级优化算法

除了梯度下降算法,可以采用高级优化算法,比如下面的集中,这些算法优点是不需要手动选择α,比梯度下降算法更快;缺点是算法更加复杂。

  • conjugate gradient (共轭梯度法)
  • BFGS (逆牛顿法的一种实现)
  • L-BFGS(对BFGS的一种改进)

Logistic回归用于多元分类

 Logistic回归可以用于多元分类,采用所谓的One-vs-All方法,具体来说,假设有K个分类{1,2,3,...,K},我们首先训练一个LR模型将数据分为属于1类的和不属于1类的,接着训练第二个LR模型,将数据分为属于2类的和不属于2类的,一次类推,直到训练完K个LR模型。

对于新来的example,我们将其带入K个训练好的模型中,分别其计算其预测值(前面已经解释过,预测值的大小表示属于某分类的概率),选择预测值最大的那个分类作为其预测分类即可。

Regularization

1. Overfitting (过拟合)

上面三幅图分别表示用简单模型、中等模型和复杂模型对数据进行回归,可以看出左边的模型太简单不能很好的表示数据特征(称为欠拟合, underfitting),中间的模型能够很好的表示模型的特征,右边使用最复杂的模型所有的数据都在回归曲线上,表面上看能够很好的吻合数据,然而当对新的example预测时,并不能很好的表现其趋势,称为过拟合(overfitting)。

Overfitting通常指当模型中特征太多时,模型对训练集数据能够很好的拟合(此时代价函数J(θ)接近于0),然而当模型泛化(generalize)到新的数据时,模型的预测表现很差。

Overfitting的解决方案

  1. 减少特征数量:
    • 人工选择重要特征,丢弃不必要的特征
    • 利用算法进行选择(PCA算法等)
  2. Regularization
    • 保持特征的数量不变,但是减少参数θj的数量级或者值
    • 这种方法对于有许多特征,并且每种特征对于结果的贡献都比较小时,非常有效

2. 线性回归的Regularization

在原来的代价函数中加入参数惩罚项如下式所示,注意惩罚项从j=1开始,第0个特征是全1向量,不需要惩罚。

代价函数:

J(θ)=12m[i=1m(hθ(x(i))y(i))2+λj=1nθj2]

梯度下降参数更新:

θ0=θ0α1mi=1m(hθ(x(i))y(i))x0(i);j=0

θj=θjα[1mi=1m(hθ(x(i))y(i))xj(i)+λmθj];j>1

3. Logistic回归的Regularization

代价函数: J(θ)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]+λ2mj=1nθj2

梯度下降参数更新:

θ0=θ0α1mi=1m(hθ(x(i))y(i))x0(i);j=0

θj=θjα[1mi=1m(hθ(x(i))y(i))xj(i)+λmθj];j>1

参考文献

[1] Andrew Ng Coursera 公开课第三周

[2] Logistic cost function derivative: http://feature-space.com/en/post24.html

posted @   python27  阅读(3629)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示