机器学习随笔之梯度下降以及逻辑回归

梯度下降(Gradient Descent)

梯度下降的原理:
可以类比为一个下山的过程。假设这样一个场景:一个人被困在山上,需要从山上下来(i.e. 找到山的最低点,也就是山谷)。但此时山上的浓雾很大,导致可视度很低。因此,下山的路径就无法确定,他必须利用自己周围的信息去找到下山的路径。这个时候,他就可以利用梯度下降算法来帮助自己下山。具体来说就是,以他当前的所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着山的高度下降的地方走,同理,如果我们的目标是上山,也就是爬到山顶,那么此时应该是朝着最陡峭的方向往上走。然后每走一段距离,都反复采用同一个方法,最后就能成功的抵达山谷。
在这里插入图片描述

相关概念:

在详细了解梯度下降的算法之前,我们先看看相关的一些概念。

  • 步长(Learning rate):步长决定了在梯度下降迭代的过程中,每一步沿梯度负方向前进的长度。用上面下山的例子,步长就是在当前这一步所在位置沿着最陡峭最易下山的位置走的那一步的长度。

  • 特征(feature):指的是样本中输入部分,比如2个单特征的样本(x(0),y(0)),(x(1),y(1)),则第一个样本特征为x(0),第一个样本输出为y(0)。

  • 假设函数(hypothesis function):在监督学习中,为了拟合输入样本,而使用的假设函数,记为hθ(x)。比如对于单个特征的m个样本(x(i),y(i))(i=1,2,…m),可以采用拟合函数如下: hθ(x)=θ0+θ1x。

  • 损失函数(loss function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小化,意味着拟合程度最好,对应的模型参数即为最优参数。在线性回归中,损失函数通常为样本输出和假设函数的差取平方。比如对于m个样本(xi,yi)(i=1,2,…m),采用线性回归,损失函数为:

      	J(θ0,θ1)=∑i=1m(hθ(xi)−yi)2
    

其中xi表示第i个样本特征,yi表示第i个样本对应的输出,hθ(xi)为假设函数。

梯度下降算法

1. 先决条件: 确认优化模型的假设函数和损失函数。

比如对于线性回归,假设函数表示为 hθ(x1,x2,…xn)=θ0+θ1x1+…+θnxn, 其中θi (i = 0,1,2… n)为模型参数,xi (i = 0,1,2… n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征x0=1 ,这样hθ(x0,x1,…xn)=∑i=0nθixi。

同样是线性回归,对应于上面的假设函数,损失函数为:

       J(θ0,θ1...,θn)=12m∑j=0m(hθ(x(j)0,x(j)1,...x(j)n)−yj)2

2. 算法相关参数初始化:主要是初始化θ0,θ1…,θn,算法终止距离ε以及步长α。在没有任何先验知识的时候,我喜欢将所有的θ初始化为0, 将步长初始化为1。在调优的时候再 优化。

3. 算法过程:

1)确定当前位置的损失函数的梯度,对于θi,其梯度表达式如下:

∂∂θiJ(θ0,θ1…,θn)

2)用步长乘以损失函数的梯度,得到当前位置下降的距离,即α∂∂θiJ(θ0,θ1…,θn)对应于前面登山例子中的某一步。

3)确定是否所有的θi,梯度下降的距离都小于ε,如果小于ε则算法终止,当前所有的θi(i=0,1,…n)即为最终结果。否则进入步骤4.

4)更新所有的θ,对于θi,其更新表达式如下。更新完毕后继续转入步骤1.

θi=θi−α∂∂θiJ(θ0,θ1…,θn)
下面用线性回归的例子来具体描述梯度下降。假设我们的样本是(x(0)1,x(0)2,…x(0)n,y0),(x(1)1,x(1)2,…x(1)n,y1),…(x(m)1,x(m)2,…x(m)n,ym),损失函数如前面先决条件所述:

J(θ0,θ1…,θn)=12m∑j=0m(hθ(x(j)0,x(j)1,…x(j)n)−yj)2。

则在算法过程步骤1中对于θi 的偏导数计算如下:

∂∂θiJ(θ0,θ1…,θn)=1m∑j=0m(hθ(x(j)0,x(j)1,…x(j)n)−yj)x(j)i
由于样本中没有x0上式中令所有的xj0为1.

步骤4中θi的更新表达式如下:

       θi=θi−α1m∑j=0m(hθ(x(j)0,x(j)1,...xjn)−yj)x(j)i

从这个例子可以看出当前点的梯度方向是由所有的样本决定的,加1m 是为了好理解。由于步长也为常数,他们的乘机也为常数,所以这里α1m可以用一个常数表示。

逻辑回归(Logistic Regression),即对数几率回归

  • 逻辑回归的模型是一个非线性模型
  • sigmoid函数,又称逻辑回归函数。但他本质上又是一个线性回归模型,因为除去sigmoid映射函数关系,其他的步骤,算法都是线性回归的。
  • 可以说,逻辑回归,都是以线性回归为理论支持的。只不过,线性模型,无法做到sigmoid的非线性形式,sigmoid可以轻松处理0/1分类问题。

1)找一个合适的预测函数,一般表示为h函数,该函数就是需要找的分类函数,它用来预测输入数据的判断结果。

2)构造一个cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他的形式。综合考虑所有训练数据的“损失”,将cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。

3)显然,J(θ)函数的值越小表示预测函数越准确(即h函数准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有的是梯度下降法。

二分类问题

二分类问题是指预测的y值只有两个取值(0或1),二分类问题可以扩展到多分类问题。例如:我们要做一个垃圾邮件过滤系统,是邮件的特征,预测的y值就是邮件的类别,是垃圾邮件还是正常邮件。对于类别我们通常陈伟正类(positive class)和负类(negative class),垃圾邮件的例子中,正类就是正常邮件,负类就是垃圾邮件。

Logistic函数

如果忽略二分类问题中y的取值是一个离散的取值(0或1),我们继续使用线性回归类似预测y的取值。这样做会导致y的取值并不为0或1。逻辑回归使用一个函数来归一化y值,使y的取值在区间(0,1)内,这个函数称为Logistic函数,也称为Sigmoid函数。函数公式如下:
g(z) = 1/1+e^(-z)
Logistic函数当z趋近与无穷大时,g(z)趋近于1,;当z趋近于无穷小时,g(z)趋近于0。Logistic函数的图形如图所示:
在这里插入图片描述

先回想一下线性回归,线性回归模型帮助我们用最简单的线性方程实现了对数据的拟合,然而,这只能完成回归任务,无法完成分类任务,那么logistic regression就是在线性回归的基础上添砖加瓦,构建出了一种分类模型。
如果在线性模型(z=w^T + b)的基础上做分类,比如二分类任务,即y∈{0,1},直觉上我们会怎么做?最直观的,可以将线性模型的输出值再套上一个函数y=g(z),最简单的就是"单位阶跃函数"(unit-step function),如下面所示:
y=[(1,z<0),(0.5,z=0),(1,z>0)]
也就是把z=xw^T+b看作为一个分割线,大于z的判定为类别0,小于z的判定为类别1。
但是,这样的分段函数数学性质不太好,它既不连续也不可微。我们知道,通常在做优化任务时,目标函数最好是连续可微的,那么如何改进呢?
这里就用到了对数几率函数:
y=1/1+e^(-z)
在这里插入图片描述

它是一种"Sigmoid"函数,Sigmoid函数这个名词是表示形式S形的函数,对数几率函数就是其中最重要的代表。这个函数相比前面的分段函数,具有非常好的数学性质,其主要优势如下:

  • 使用该函数做分类问题时不仅可以预测出类别,还能够得到近似概率预测,这点对很多需要概率辅助决策的任务很有用。
  • 对数几率函数是任意阶可导函数,它有着很好的数学性质,很多数值优化算法都可以直接用于求取最优解。总的来说,模型的完全形式如下:
    y= 1/1+e^(xw^(T)+b)
    其实,LR模型就是在拟合z=xw^T+b这条直线,使得这条直线尽可能地将原始数据中的两个类别正确的划分开

损失函数

对于任何机器学习问题,都需要先明确损失函数,LR模型也不例外,在遇到回归问题时,通常我们会直接想到如下的损失函数形式(平均误差平方损失MSE):
在这里插入图片描述
但是LR模型要解决的二分类问题中,损失函数是什么样的呢?先给处这个损失函数的形式
L =-[ylogy’ +(1-y)log(1-y’)]
这个损失函数通常称作为对数损失(logloss),这里的对数低为自然数e,其中真实值y是0/1两种情况,而推测值y’由于借助对数几率函数,其输出是介于0-1之间连续概率值。仔细查看,不难发现,当真实值y=0时,第一项为0,当真实值y=1时,第二项为0,所以,这个损失函数其实在每次计算时永远都只有一项在发挥作用,那这不就可以转换为分段函数了

猜你喜欢

转载自blog.csdn.net/huang_yong_peng/article/details/82728996
今日推荐