美文网首页【机器学习】自学笔记
零基础"机器学习"自学笔记|Note7:逻辑回归

零基础"机器学习"自学笔记|Note7:逻辑回归

作者: 木舟笔记 | 来源:发表于2021-03-13 19:55 被阅读0次
    logic.jpeg

    写在前面

    这个系列为我在自学【机器学习】时的个人笔记。学习过程中可能会有较多的纰漏,希望各位读者不吝赐教。本系列以吴恩达老师的【“机器学习”课程】为纲,辅以黄海广老师的【斯坦福大学 2014 机器学习教程个人笔记(V5.51)】,中间会穿插相关数理知识。

    逻辑回归

    7.1 分类问题

    逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。

    将因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),则因变量y\in { 0,1 \\} ,其中 0 表示负向类,1 表示正向类。

    7.1

    如果我们要用线性回归算法来解决一个分类问题,那么假设函数的输出值可能远大于 1,或者远小于0。然而逻辑回归算法,这个算法的性质是:它的输出值永远在0到 1 之间。

    逻辑回归算法是分类算法,我们将它作为分类算法使用。有时候可能因为这个算法的名字中出现了“回归”使你感到困惑,但逻辑回归算法实际上是一种分类算法,它适用于标签 y 取值离散的情况,如:1 0 0 1。

    7.2 假说表示

    回顾在一开始提到的乳腺癌分类问题,我们可以用线性回归的方法求出适合数据的一条直线:

    7.1

    根据线性回归模型我们只能预测连续的值,然而对于分类问题,我们需要输出0或1,我们可以预测:

    {h_\theta}\left( x \right)>=0.5时,预测 y=1

    {h_\theta}\left( x \right)<0.5时,预测 y=0

    对于上图所示的数据,这样的一个线性模型似乎能很好地完成分类任务。假使我们又观测到一个非常大尺寸的恶性肿瘤,将其作为实例加入到我们的训练集中来,这将使得我们获得一条新的直线。

    7.2

    这时,再使用0.5作为阀值来预测肿瘤是良性还是恶性便不合适了。可以看出,线性回归模型,因为其预测的值可以超越[0,1]的范围,并不适合解决这样的问题。

    我们引入一个新的模型,逻辑回归,该模型的输出变量范围始终在0和1之间。
    逻辑回归模型的假设是: h_\theta \left( x \right)=g\left(\theta^{T}X \right)

    其中:

    X 代表特征向量

    g 代表逻辑函数(logistic function)是一个常用的逻辑函数为S形函数(Sigmoid function),公式为: g\left( z \right)=\frac{1}{1+{{e}^{-z}}}

    该函数的图像为:

    [图片上传失败...(image-2e9344-1615636504740)].png)

    合起来,我们得到逻辑回归模型的假设:

    g\left( z \right)=\frac{1}{1+{{e}^{-z}}}

    h\theta \left( x \right)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity)即h\theta \left( x \right)=P\left( y=1|x;\theta \right)

    例如,如果对于给定的x,通过已经确定的参数计算得出h_\theta \left( x \right)=0.7,则表示有70%的几率y为正向类,相应地y为负向类的几率为1-0.7=0.3。

    7.3 判定边界

    7.5

    在逻辑回归中,我们预测:

    {h_\theta}\left( x \right)>=0.5时,预测 y=1

    {h_\theta}\left( x \right)<0.5时,预测 y=0

    根据上面绘制出的 S 形函数图像,我们知道当

    z=0g(z)=0.5

    z>0g(z)>0.5

    z<0g(z)<0.5

    z={\theta^{T}}x ,即:
    {\theta^{T}}x>=0 时,预测 y=1
    {\theta^{T}}x<0 时,预测 y=0

    现在假设我们有一个模型:

    7.6

    并且参数\theta 是向量[-3 1 1]。 则当-3+{x_1}+{x_2} \geq 0,即{x_1}+{x_2} \geq 3时,模型将预测 y=1
    我们可以绘制直线{x_1}+{x_2} = 3,这条线便是我们模型的分界线,将预测为1的区域和预测为 0的区域分隔开。

    7.7

    假使我们的数据呈现这样的分布情况,怎样的模型才能适合呢?

    7.8

    因为需要用曲线才能分隔 y=0 的区域和 y=1 的区域,我们需要二次方特征:{h_\theta}\left( x \right)=g\left( {\theta_0}+{\theta_1}{x_1}+{\theta_{2}}{x_{2}}+{\theta_{3}}x_{1}^{2}+{\theta_{4}}x_{2}^{2} \right)是[-1 0 0 1 1],则我们得到的判定边界恰好是圆点在原点且半径为1的圆形。

    我们可以用非常复杂的模型来适应非常复杂形状的判定边界。

    7.4 代价函数

    7.9

    对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将{h_\theta}\left( x \right)=\frac{1}{1+{e^{-\theta^{T}x}}}带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction)。

    7.10

    这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。

    线性回归的代价函数为:J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{\frac{1}{2}{{\left( {h_\theta}\left({x}^{\left( i \right)} \right)-{y}^{\left( i \right)} \right)}^{2}}}
    我们重新定义逻辑回归的代价函数为:J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{{Cost}\left( {h_\theta}\left( {x}^{\left( i \right)} \right),{y}^{\left( i \right)} \right)},其中:

    7.11

    {h_\theta}\left( x \right)Cost\left( {h_\theta}\left( x \right),y \right)之间的关系如下图所示:

    7.12

    这样构建的Cost\left( {h_\theta}\left( x \right),y \right)函数的特点是:当实际的 y=1{h_\theta}\left( x \right)也为 1 时误差为 0,当 y=1{h_\theta}\left( x \right)不为1时误差随着{h_\theta}\left( x \right)变小而变大;当实际的 y=0{h_\theta}\left( x \right)也为 0 时代价为 0,当y=0{h_\theta}\left( x \right)不为 0时误差随着 {h_\theta}\left( x \right)的变大而变大。
    将构建的 Cost\left( {h_\theta}\left( x \right),y \right)简化如下:
    Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right)
    带入代价函数得到:
    J\left( \theta \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{[-{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)-\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}
    即:J\left( \theta \right)=-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}

    这就是逻辑回归的代价函数:

    屏幕截图 2021-03-13 160155

    这个式子可以合并成:

    Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right)
    即,逻辑回归的代价函数:
    Cost\left( {h_\theta}\left( x \right),y \right)=-y\times log\left( {h_\theta}\left( x \right) \right)-(1-y)\times log\left( 1-{h_\theta}\left( x \right) \right)
    =-\frac{1}{m}\sum\limits_{i=1}^{m}{[{{y}^{(i)}}\log \left( {h_\theta}\left( {{x}^{(i)}} \right) \right)+\left( 1-{{y}^{(i)}} \right)\log \left( 1-{h_\theta}\left( {{x}^{(i)}} \right) \right)]}

    最小化代价函数的方法,是使用梯度下降法(gradient descent)。

    屏幕截图 2021-03-13 161844

    {\theta_j}更新过程可以写成:

    {\theta_j}:={\theta_j}-\alpha \frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}}){x_{j}}^{(i)}}

    所以,如果你有 n 个特征,也就是说:

    01710312350440

    ,参数向量\theta包括{\theta_{0}} {\theta_{1}} {\theta_{2}} 一直到{\theta_{n}},那么你就需要用这个式子:

    {\theta_j}:={\theta_j}-\alpha \frac{1}{m}\sum\limits_{i=1}^{m}{({h_\theta}({{x}^{(i)}})-{{y}^{(i)}}){{x}_{j}}^{(i)}}来同时更新所有\theta的值。

    对于线性回归假设函数:

    {h_\theta}\left( x \right)={\theta^T}X={\theta_{0}}{x_{0}}+{\theta_{1}}{x_{1}}+{\theta_{2}}{x_{2}}+...+{\theta_{n}}{x_{n}}

    而现在逻辑函数假设函数:

    {h_\theta}\left( x \right)=\frac{1}{1+{{e}^{-{\theta^T}X}}}

    因此,即使更新参数的规则看起来基本相同,但由于假设的定义发生了变化,所以逻辑函数的梯度下降,跟线性回归的梯度下降实际上是两个完全不同的东西。

    7.5 多类别分类:一对多

    先看有关药物诊断的例子,如果一个病人因为鼻塞来到你的诊所,他可能并没有生病,用 y=1 这个类别来代表;或者患了感冒,用 y=2 来代表;或者得了流感用y=3来代表。

    对于二元分类问题和多类分类问题数据如下图:

    7.16

    二元分类,可以使用逻辑回归,直线可以将数据集一分为二为正类和负类。

    现在我们有一个训练集,好比上图表示的有3个类别,我们用三角形表示 y=1,方框表示y=2,叉叉表示 y=3。我们下面要做的就是使用一个训练集,将其分成3个二元分类问题。

    我们先从用三角形代表的类别1开始,实际上我们可以创建一个,新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。

    为了能实现这样的转变,我们将多个类中的一个类标记为正向类(y=1),然后将其他所有类都标记为负向类,这个模型记作h_\theta^{\left( 1 \right)}\left( x \right)。接着,类似地第我们选择另一个类标记为正向类(y=2),再将其它类都标记为负向类,将这个模型记作 h_\theta^{\left( 2 \right)}\left( x \right),依此类推。

    屏幕截图 2021-03-13 155046

    最后我们得到一系列的模型简记为: h_\theta^{\left( i \right)}\left( x \right)=p\left( y=i|x;\theta \right)其中:i=\left( 1,2,3....k \right)

    最后,在我们需要做预测时,我们将所有的分类机都运行一遍,然后对每一个输入变量,都选择最高可能性的输出变量。

    总之,我们已经把要做的做完了,现在要做的就是训练这个逻辑回归分类器:h_\theta^{\left( i \right)}\left( x \right), 其中 i 对应每一个可能的 y=i,最后,为了做出预测,我们给出输入一个新的 x 值,用这个做预测。我们要做的就是在我们三个分类器里面输入 x,然后我们选择一个让 h_\theta^{\left( i \right)}\left( x \right) 最大的i,即\mathop{\max}\limits_i\,h_\theta^{\left( i \right)}\left( x \right)

    无论i值是多少,我们都有最高的概率值,我们预测y就是那个值。这就是多类别分类问题,以及一对多的方法,通过这个小方法,可以将逻辑回归分类器用在多类分类的问题上。


    往期:

    零基础"机器学习"自学笔记|Note1:机器学习绪论

    零基础"机器学习"自学笔记|Note2:单变量线性回归

    零基础"机器学习"自学笔记|Note3:线性代数回顾

    零基础"机器学习"自学笔记|Note5:多变量线性回归

    零基础"机器学习"自学笔记|Note6:正规方程及其推导(内附详细推导过程)

    相关文章

      网友评论

        本文标题:零基础"机器学习"自学笔记|Note7:逻辑回归

        本文链接:https://www.haomeiwen.com/subject/jaaxcltx.html