第二章 机器学习算法之逻辑回归

一、前言

之前我们说到有关线性回归的一些内容,有兴趣的小伙伴可以去看一下。
这一章我们主要说一下逻辑回归。逻辑回归和线性回归有区别但是更有联系。
就从逻辑回归的作用来看,我觉得它不应该叫逻辑回归,而应该叫回归逻辑,或者更直白一点叫:线性回归后的逻辑化分类算法。
没错,逻辑回归不是回归算法,而是分类算法。
为什么我们得出了线性回归的结构之后还要记性逻辑回归呢,其实很简单,这个就像我们大学考试拿等级一样,比如 90 90 90分以上的人可以拿到A, 90 90 90分以下的是B,而只有A等级在最后计算绩点时可以加分,这个时候你的考试分数往往不够直观,我们就需要等级化,这里的具体的考试分数可以看成线性回归的结果,而A、B等级就是逻辑回归的结果,这个90分就是一个阈值。
或者在看一个例子,又是借贷款的问题,借贷银行对你的综合情况进行评估(线性回归过程),最终得出了一个可贷估计值(假设范围是0~1),如果可贷估计值在 [ 0 , 0.5 ) [0,0.5) [0,0.5),银行不借贷,如果在 [ 0.5 , 1 ] [0.5,1] [0.5,1],银行借贷(逻辑回归过程)。

二、sigmoid 函数

我们说过,逻辑回归就是将线性回归产生的结果进行二分化,既然是二分化我们就需要寻找一个阈值作为二分的标准,这个时候就需要用到 s i g m o i d sigmoid sigmoid函数, s i g m o i d sigmoid sigmoid函数不光可以实现一个阈值对数据进行二分化,由于其值域是0~1,所以 s i g m o i d sigmoid sigmoid函数可以很好的表示概率。
s i g m o i d sigmoid sigmoid 函数的表达式为:
g ( z ) = 1 1 + e − z g(z)={1\over{1+e^{-z}}} g(z)=1+ez1
y = θ T x y=\theta^Tx y=θTx代入其中便可以得到:
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x)=g(\theta^Tx)={1\over{1+e^{-{\theta^Tx}}}} hθ(x)=g(θTx)=1+eθTx1
函数的图像如下所示:
sigmoid

三、逻辑回归的损失函数(目标函数)

由于逻辑回归是一个分类算法,所以我们的损失函数也显得很离散:
c o s t ( h θ ( x ) , y ) = { − l o g ( h θ ( x ) ) y = 1 − l o g ( 1 − h θ ( x ) ) y = 0 cost(h_\theta (x),y)=\begin{cases} -log(h_\theta (x))&y=1\\ -log(1-h_\theta (x))&y=0 \end{cases} cost(hθ(x),y)={ log(hθ(x))log(1hθ(x))y=1y=0
完整的损失函数为:
c o s t ( h θ ( x ) , y ) = ∑ i = 1 n − y i l o g ( h θ ( x ) ) − ( 1 − y i ) l o g ( 1 − h θ ( x ) ) cost(h_\theta (x),y)=\sum_{i=1}^n-y_ilog(h_\theta (x))-{(1-y_i)}log(1-h_\theta (x)) cost(hθ(x),y)=i=1nyilog(hθ(x))(1yi)log(1hθ(x))
看到这里是不是觉得特别抽象,那么我就来带大家理一下:
假设有一个老师对四位同学分别根据平时表现,对专业的态度,学习效率等多方面进行学习成绩评估得出了预测结果(也就是下表的线性回归结果),并将90分以上定为等级A(也就是二分类中的类别1),90分以下定为等级B(也就是二分类中的类别0),好了,考试结果出来了,几位同学的成绩和老师的预测结果存在一些一些出入,现在需要对评估标准进行调整,我们将产生的偏置代入 s i g m o i d sigmoid sigmoid函数计算出概率,我们还知道有的预测对了有的预测错了。

样本 线性回归结果 真实结果 偏置 sigmoid结果(概率) 预测对错
小红 88 91 -2 0.112
小橙 91 93 1 0.734
小橙 99 100 9 0.999
小橙 81 89 -9 0.0001

那么损失函数值是多少呢?
c o s t ( h θ ( x ) , y ) = − ( 1 ∗ l o g ( 0.112 ) + 1 ∗ l o g ( 0.734 ) + 1 ∗ l o g ( 0.999 ) + 0 ∗ l o g ( 0.0001 ) ) = 1.09 cost(h_\theta (x),y)=-(1*log(0.112)+1*log(0.734)+1*log(0.999)+0*log(0.0001))=1.09 cost(hθ(x),y)=(1log(0.112)+1log(0.734)+1log(0.999)+0log(0.0001))=1.09

三、梯度下降法优化逻辑回归算法

这一下节如果看不懂,建议复习线性回归
梯度下降法不仅可以用在逻辑回归上,还可以用在线性回归上。他的主要思想是通过迭代的方法让函数收敛到一个最小值。
具体算法如下:
首先选取一个初始点
求这一点在几个方向上的梯度最大值
设置学习率更新初始点
下面我们从一个二维函数开始看起
假设我们有一个二次函数: y = x 2 y=x^2 y=x2,并且我们不知道它的最低点是 ( 0 , 0 ) (0,0) (0,0)
那么我们首先选取一个初始点为 ( 1 , 1 ) (1,1) (1,1)
然后我们发现这一点的导数: y ′ = 2 x y'=2x y=2x,二维情况下肯定也就只有这个方向梯度最大(毕竟只有这一个梯度)。
然后又我们设置一个学习率: α = 0.4 \alpha=0.4 α=0.4
所以此时便可以迭代出一个新的点的横坐标(): x ( 1 ) = x − α ⋅ y ′ ( 1 ) = 0.2 x^{(1)}=x-\alpha\cdot y'(1)=0.2 x(1)=xαy(1)=0.2
以此类推:
x ( 2 ) = x ( 1 ) − α ⋅ y ′ ( 0.2 ) = 0.04 x ( 3 ) = x ( 2 ) − α ⋅ y ′ ( 0.04 ) = 0.008 . . . \begin{array}{cc} x^{(2)}=x^{(1)}-\alpha\cdot y'(0.2)=0.04\\ x^{(3)}=x^{(2)}-\alpha\cdot y'(0.04)=0.008\\ ... \end{array} x(2)=x(1)αy(0.2)=0.04x(3)=x(2)αy(0.04)=0.008...
你会发现,迭代之后逐渐趋近最低点
这里我们需要的就是目标函数的梯度(对于一维来说也就是导数),梯度的方向就是变化率最大的方向,梯度的值就是变化率最大方向对应的变化率,上面小节我们已经知道了目标函数以及梯度:
J ( θ ) = 1 2 ∑ i = 1 n ( y ( i ) − θ T x ( i ) ) 2 = 1 2 ( X θ − y ) T ( X θ − y ) ∇ θ J ( θ ) = X T X θ − X T y \begin{array}{cc} J(\theta)={1\over2}\sum_{i=1}^n{({y^{(i)}-\theta^Tx^{(i)}})^2}={1\over2}(X\theta-y)^T(X\theta-y)\\ \nabla_\theta J(\theta)=X^TX\theta-X^Ty \end{array} J(θ)=21i=1n(y(i)θTx(i))2=21(Xθy)T(Xθy)θJ(θ)=XTXθXTy
这个时候我们就可以按照上面的思路对 θ \theta θ进行迭代,此时 X X X以及 y y y均是已知的常数矩阵。
但是啊但是,梯度下降法很容易陷入局部最优,这个问题目前也比较棘手,没有特别好的解决方法。

猜你喜欢

转载自blog.csdn.net/qq_41459262/article/details/104479177