• 逻辑回归


    1 假设

    模型的输出变量范围始终在 0 和 1 之间。
    逻辑回归模型的假设为:

    [hat y = sigma left(w^T x + b ight) ]

    其中:

    • (x) 代表特征向量
    • (sigma) 代表 Sigmoid 函数

    [sigma left( z ight)= frac{1}{1+{{e}^{-z}}} ]

    对模型理解: (hat y) 的作用是,对于给定的输入变量,根据选择的参数计算输出变量 = 1 的可能性(estimated probablity)即

    [hat y= Pleft( y=1|x;w,b ight) ]

    如果对于给定的 (x),已经确定的参数计算得出 (hat y=0.7),则表示有 70% 的几率 (y) 为正向类,相应地 (y) 为负向类的几率为 0.3。

    2 判定边界

    image

    逻辑回归中预测

    • (hat ygeq0.5)时,预测 (y=1)

    • (hat y<0.5)时,预测 (y=0)

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

    • (z=0) 时, (g(z)=0.5)

    • (z>0) 时, (g(z)>0.5)

    • (z<0) 时, (g(z)<0.5)

    即:

    • (z geq 0) 时,预测 (y=1)
    • (z <0) 时,预测 (y=0)

    假设有一个模型

    image

    [egin{align} hat y &= w^T cdot x + b\ &= left[egin{array}{l}w_{0} \ w_{1} \ w_{2}end{array} ight] cdot left[egin{array}{l}x_{0} , x_{1} , x_{2}end{array} ight] end{align} ]

    并且参数(w) 是向量 ([-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的区域分隔开。

    image!

    对于下面情况的数据,直线的判定边界不再适用

    image

    需要用曲线才能分隔 (y=0) 的区域和 (y=1) 的区域,我们需要二次方特征:

    [egin{align} hat y &= sigma left(left[egin{array}{l} w_{1} \ w_{2} \ w_3 \ w_4end{array} ight] cdot left[egin{array}{l}x_{1} , x_{2}, x_1^2, x_2^2end{array} ight] + b ight)\ &= w_1x_1 + w_2x_2+ w_3x_1^2 + w_4x_2^2 + b end{align} ]

    参数值分别为是 ([-1, 0,0,1,1]),得到的判定边界恰好是圆点在原点且半径为1的圆形。

    3 代价函数

    线性回归模型的代价函数是所有模型误差的平方和。

    对逻辑回归模型沿用这个定义的问题在于,当我们将

    [hat y = frac{1}{1+{e^{-left(w^{T}x + b ight)}}} ]

    带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数

    image

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

    线性回归的代价函数为:

    [J(w,b) =frac{1}{m} sumlimits_{i=1}^{m} frac{1}{2} left( hat y^{(i)} - y^{(i)} ight)^{2} ]

    重新定义逻辑回归的代价函数为:

    [Jleft( w,b ight)=frac{1}{m}sumlimits_{i=1}^{m}{{L}left( hat y ^{(i)},{y}^{left( i ight)} ight)} ]

    其中

    [Lleft(hat y, y ight)=left{egin{aligned}-log left(hat y ight) & ext { if } y=1 \-log left(1-hat y ight) & ext { if } y=0 end{aligned} ight. ]

    (hat y)(Lleft( hat y, y ight))之间的关系如下图所示:

    image

    • (hat yin [0,1],(1-hat y)in[0,1])

    可见 (L(hat y,y))(hat y) 之间的函数关系是凸函数

    这样构建的 (L(hat y,y)) 函数的特点是:

    • 当实际的 (y=1)(hat y) 也为 1 时误差为 0,

    • (y=1)(hat y) 不为1 即 (< 0.5) 时误差随着 (hat y) 变小而变大;

    • 当实际的 (y=0)(hat y) 也为 0 时代价为 0

    • (y=0)(hat y) 不为 0 即 (geq 0.5) 时误差随着 (hat y) 的变大而变大。

    将构建的 (Lleft( hat y,y ight)) 简化如下:

    [Lleft( hat y,y ight)=-y imes logleft( hat y ight)-(1-y) imes logleft( 1-hat y ight) ]

    带入代价函数得到:

    [egin{align} Jleft( w,b ight) &= frac{1}{m}sumlimits_{i=1}^{m} Lleft( hat y^{(i)},y^{(i)} ight) \ &= frac{1}{m}sumlimits_{i=1}^{m}{[-{{y}^{(i)}}log left( hat y^{(i)} ight)-left( 1-{{y}^{(i)}} ight)log left( 1-hat y^{(i)} ight)]} end{align} ]

    在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。算法为:

    [~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Repeat {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \ w:= w-alpha frac{partial J(w,b)}{partial w} \ b:= b -alpha frac{partial J(w,b)}{partial b} \ }~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ]

    求导后得到:

    [Repeat {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \ w:= w - alpha frac{1}{m}sumlimits_{i=1}^{m}{{left( hat y^{(i)}-y^{left( i ight)} ight)}}x_{j}^{(i)} \ b:= b - alpha frac{1}{m}sumlimits_{i=1}^{m}{{left( hat y^{(i)}-y^{left( i ight)} ight)}}b \ }~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ]

    转化后的代价函数 (J(w,b)) 会是一个凸函数,并且没有局部最优值。

    4 代价函数推导

    逻辑回归中,需要预测的结果是 (hat{y}), 可以表示为 (hat{y}=sigma(w^{T}x+b))(sigma) 是我们熟悉的 (Sigmoid) 函数

    [sigma(z)=sigma(w^{T}x+b)=frac{1}{1+e^{-left(w^Tx + b ight)}} ]

    假设 (hat{y}=p(y=1|x)) ,即算法的输出 (hat{y}) 是给定训练样本 (x) 条件下 (y) 等于 1 的概率。

    • 如果 (y=1),在给定训练样本 (x) 条件下(y=hat{y})

    • 如果(y=0),在给定训练样本 (x) 条件下 (y) 等于 1 减去 (hat{y}(y=1-hat{y}))

    因此,如果 (hat{y}) 代表 (y=1) 的概率,那么(1-hat{y}) 就是 (y=0) 的概率。接下来,我们就来分析这两个条件概率公式。

    [egin{align} &if; y=1:; p(y|x) = hat{y} \ &if; y=0:; p(y|x) = 1 - hat{y} end{align} ]

    这里推导的是二分类问题的损失函数,(y) 的取值只能是 0 或者 1。上述的两个条件概率公式可以合并成如下公式:

    [p(y|x)={hat{y}}^{y}{(1-hat{y})}^{(1-y)} ]

    由于 log 函数是严格单调递增的函数,最大化 (log(p(y|x))) 等价于最大化 (p(y|x)) 并计算 (p(y|x)) 的 log对数,通过对数函数化简为:

    [log({hat{y}}^{(y)}{(1-hat{y})}^{(1-y)}) \ =yloghat{y}+(1-y)log(1-hat{y}) ]

    而这就是我们前面提到的损失函数的负数 ((-L(hat{y},y))) ,前面有一个负号的原因是当你训练学习算法时需要算法输出值的概率是最大的(以最大的概率预测这个值),然而在逻辑回归中我们需要最小化损失函数,因此最小化损失函数与最大化条件概率的对数 (log(p(y|x))) 关联起来了,因此这就是单个训练样本的损失函数表达式。

    而在 (m)个训练样本的概率表示,更正式地来写一下。假设所有的训练样本服从同一分布且相互独立,也即独立同分布的,所有这些样本的联合概率就是每个样本概率的乘积:

    [Pleft( ext{labels in training set} ight) = prod_{i =1}^{m}{P(y^{(i)}|x^{(i)})} ]

    如果你想做最大似然估计,需要寻找一组参数,使得给定样本的观测值概率最大,但令这个概率最大化等价于令其对数最大化,在等式两边取对数:

    [egin{align} logP&= logprod_{i =1}^{m}{P(y^{(i)}|x^{(i)})} \ &= sum_{i = 1}^{m}{logP(y^{(i)}|x^{(i)})}\ &= sum_{i = 1}^{m}logleft( hat{y}^ycdot(1-hat y)^{(1-y)} ight) \ &=sum_{i = 1}^{m}ylog(hat y)+ (1-y)log((1-hat y)) \ &= sum_{i =1}^{m}{- L(hat y^{(i)},y^{(i)})} end{align} ]

    用最大似然估计求出一组参数使这个式子取最大值,即

    [opt.max. sum_{i= 1}^{m}{- L(hat y^{(i)},y^{(i)})} ]

    可以将负号移到求和符号的外面,这样我们就推导出了前面给出的 **logistic **回归的成本函数

    [opt.min.;; J(w,b)= sum_{i = 1}^{m}{L(hat y^{(i)},y^{hat( i)})} ]

    由于训练模型时,目标是让成本函数最小化,所以不是直接用最大似然概率,要去掉这里的负号,最后为了方便,可以对成本函数进行适当的缩放,我们就在前面加一个额外的常数因子 (frac{1}{m}),即:

    [J(w,b)= frac{1}{m}sum_{i = 1}^{m}{L(hat y^{(i)},y^{(i)})} ]

    为了最小化成本函数 (J(w,b)),从logistic回归模型的最大似然估计的角度出发,假设训练集中的样本都是独立同分布的条件下,推导出了逻辑回归的损失函数

    5 偏导数推导

    [Jleft( w,b ight)= -frac{1}{m}sumlimits_{i=1}^{m} {[{{y}^{(i)}}log left( hat y^{(i)} ight)+left( 1-{{y}^{(i)}} ight)log left( 1- hat y^{(i)} ight)]} ]

    因为 (w^T x^{(i)})(b) 求导方式相同,所以仅研究 (w^T x^{(i)})

    考虑:

    [hat y^{(i)}=frac{1}{1+{{e}^{-w^Tx^{(i)}}}} ]

    则:

    [egin{align} ecause &~~~~~~~{{y}^{(i)}} log left( hat y^{(i)} ight)+left( 1-{{y}^{(i)}} ight)log left( 1-hat y^{(i)} ight) \ &={{y}^{(i)}}log left( frac{1}{1+{{e}^{-w^Tx^{(i)}}}} ight)+left( 1-{{y}^{(i)}} ight)log left( 1-frac{1}{1+{{e}^{-w^Tx^{(i)}}}} ight) \ & =-{{y}^{(i)}}log left( 1+{{e}^{-w^Tx^{(i)}}} ight)-left( 1-{{y}^{(i)}} ight)log left( 1+{{e}^{-left(-w^Tx^{(i)} ight)}} ight) \ & =-{{y}^{(i)}}log left( 1+{{e}^{-w^Tx^{(i)}}} ight)-left( 1-{{y}^{(i)}} ight)log left( 1+{{e}^{w^Tx^{(i)}}} ight) end{align} ]

    [egin{align} herefore frac{partial }{partial {w_{j}}}Jleft( w,b ight) & =frac{partial }{partial {w_{j}}}left[-frac{1}{m}sumlimits_{i=1}^{m}{left[-{{y}^{(i)}}log left( 1+{{e}^{- w^T x^{(i)}}} ight)-left( 1-{{y}^{(i)}} ight)log left( 1+{{e}^{w^T x^{(i)}}} ight) ight]} ight] \ &= -frac{1}{m} sumlimits_{i=1}^{m} left[ -{y}^{(i)} frac{-x_j^{(i)}{e^{-w^T x^{(i)} }}}{1+{{e}^{-{w^{T}}{{x}^{(i)}}}}}-left( 1-{{y}^{(i)}} ight)frac{x_j^{(i)}{{e}^{{w^T}{{x}^{(i)}}}}}{1+{{e}^{w^T x^{(i)}}}} ight] \ &=-frac{1}{m}sumlimits_{i=1}^{m} left[{{y}^{(i)}}frac{x_j^{(i)}}{1+{{e}^{{w^T}{{x}^{(i)}}}}}-left( 1-{{y}^{(i)}} ight)frac{x_j^{(i)}{{e}^{{w^T}{{x}^{(i)}}}}}{1+{{e}^{{w^T}{{x}^{(i)}}}}} ight] \ &=-frac{1}{m}sumlimits_{i=1}^{m}{frac{{{y}^{(i)}}x_j^{(i)}-x_j^{(i)}{{e}^{{w^T}{{x}^{(i)}}}}+{{y}^{(i)}}x_j^{(i)}{{e}^{{w^T}{{x}^{(i)}}}}}{1+{{e}^{{w^T}{{x}^{(i)}}}}}} \ &=-frac{1}{m}sumlimits_{i=1}^{m}{frac{{{y}^{(i)}}left( 1 ext{+}{{e}^{{w^T}{{x}^{(i)}}}} ight)-{{e}^{{w^T}{{x}^{(i)}}}}}{1+{{e}^{{w^T}{{x}^{(i)}}}}}x_j^{(i)}} \ &=-frac{1}{m}sumlimits_{i=1}^{m}{({{y}^{(i)}}-frac{{{e}^{{w^T}{{x}^{(i)}}}}}{1+{{e}^{{w^T}{{x}^{(i)}}}}})x_j^{(i)}} \ &=-frac{1}{m}sumlimits_{i=1}^{m}{({{y}^{(i)}}-frac{1}{1+{{e}^{-{w^T}{{x}^{(i)}}}}})x_j^{(i)}} \ &=-frac{1}{m}sumlimits_{i=1}^{m}{left[{{y}^{(i)}}-hat y^{(i)} ight]x_j^{(i)}} \ &=frac{1}{m}sumlimits_{i=1}^{m}{left[hat y^{(i)}-{{y}^{(i)}} ight]x_j^{(i)}} end{align} ]

    最后得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,假设函数与线性回归中不同。在运行梯度下降算法之前,进行特征缩放依旧是非常必要的。
    除了梯度下降算法以外,还有一些常被用来令代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:

    • 共轭梯度Conjugate Gradient
    • 局部优化法(Broyden fletcher goldfarb shann,BFGS)
    • 有限内存局部优化法(LBFGS)

    6 梯度下降

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

    [Jleft( w,b ight)=-frac{1}{m}sumlimits_{i=1}^{m}{[{{y}^{(i)}}log left(hat y^{(i)} ight)+left( 1-{{y}^{(i)}} ight)log left( 1- hat y^{(i)} ight)]} ]

    根据前面求得的 (J(w,b)) 对于每个 (w_j)的偏导数为

    [frac{partial }{partial w_j}Jleft( w,b ight) = frac{1}{m}sumlimits_{i=1}^{m}{left( hat y^{(i)} -{{y}^{(i)}} ight)x_j^{(i)}} \ frac{partial }{partial b}Jleft( w,b ight) = frac{1}{m}sumlimits_{i=1}^{m}{left( hat y^{(i)} -{{y}^{(i)}} ight)b} ]

    如果我们要最小化这个关于 ( heta) 的函数值,这就是我们通常用的梯度下降法的模板。

    [egin{array}{l} ext { Want } min _{w,b} J(w,b): \ b:=b-alpha frac{1}{m} sum_{i=1}^{m}left(hat y^{(i)}-y^{(i)} ight) x_{j}^{(i)} \ ext { Repeat }{ \ qquad w_{j}:=w_{j}-alpha frac{1}{m} sum_{i=1}^{m}left(hat y^{(i)}-y^{(i)} ight) x_{j}^{(i)} \ quadleft( ext { simultaneously update all } w_{j} ight) \ }end{array} ]

    求和内的计算式其实就是预测误差乘以(x_j^{(i)})

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

    最后特征缩放的方法同样适用于逻辑回归。可以让逻辑回归中,梯度下降收敛更快。

    7 实现多类别分类

    • 第一个例子:假如说你现在需要一个学习算法能自动地将邮件归类到不同的文件夹里,或者说可以自动地加上标签,那么,你也许需要一些不同的文件夹,或者不同的标签来完成这件事,来区分开来自工作的邮件、来自朋友的邮件、来自家人的邮件或者是有关兴趣爱好的邮件,那么,我们就有了这样一个分类问题:其类别有四个,分别用(y=1)(y=2)(y=3)(y=4) 来代表。

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

    • 第三个例子:如果你正在做有关天气的机器学习分类问题,那么你可能想要区分哪些天是晴天、多云、雨天、或者下雪天,对上述所有的例子,(y) 可以取一个很小的数值,一个相对"谨慎"的数值,比如1 到3、1到4或者其它数值,以上说的都是多类分类问题,顺便一提的是,对于下标是0 1 2 3,还是 1 2 3 4 都不重要,我更喜欢将分类从 1 开始标而不是0,其实怎样标注都不会影响最后的结果。

    对于二分类问题,数据看起来可能如左下图所示,对于多分类问题,数据集或如右下图所示

    image

    假设训练集如上图表示有3个类别,我们用三角形表示 (y=1),方框表示(y=2),叉表示 (y=3)。要做的就是使用一个训练集,将其分成3个二元分类问题。

    image
    先从用三角形代表的类别1 开始,可以创建新的"伪"训练集,将类型2和类型3定为负类,类型1设定为正类,来正确分类类别1

    image

    即将一个类标记为正向类((y=1)),其他所有类都标记为负向类,这个模型记作(h_ heta^{left( 1 ight)}left( x ight))

    接着,类似地选择另一个类标记为正向类((y=2)),再将其它类都标记为负向类,将这个模型记作 (h_ heta^{left( 2 ight)}left( x ight)), 依此类推。
    最后我得到一系列的模型简记为: (h_ heta^{left( i ight)}left( x ight)=pleft( y=i|x; heta ight))其中:(i=left( 1,2,3....k ight))

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

    要做的就是训练这个逻辑回归的每一个分类器:(h_ heta^{left( i ight)}left( x ight)), 其中 (i) 对应每一个可能的 (y=i)

    对于一个输入 (x) 值,分别从三个分类器里面输入 (x),然后我们选择一个让 (h_ heta^{left( i ight)}left( x ight)) 最大的 $ i$,即 (mathop{max}limits_i\,h_ heta^{left( i ight)}left( x ight)),将数据 (x) 分类为对应的类别

    8 正则化的逻辑回归

    image

    正则化代价函数:

    [Jleft( heta ight)=frac{1}{m}sumlimits_{i=1}^{m}{[-{{y}^{(i)}}log left( {h_ heta}left( {{x}^{(i)}} ight) ight)-left( 1-{{y}^{(i)}} ight)log left( 1-{h_ heta}left( {{x}^{(i)}} ight) ight)]}+frac{lambda }{2m}sumlimits_{j=1}^{n}{ heta _{j}^{2}} ]

    要最小化该代价函数,通过求导,得出梯度下降算法为:

    [egin{align} Repeat~~until~~conver&gence { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\ &{ heta_0}:={ heta_0}-afrac{1}{m}sumlimits_{i=1}^{m}{(({h_ heta}({{x}^{(i)}})-{{y}^{(i)}})x_{0}^{(i)}}) \ &{ heta_j}:={ heta_j}-a[frac{1}{m}sumlimits_{i=1}^{m}{(({h_ heta}({{x}^{(i)}})-{{y}^{(i)}})x_{j}^{left( i ight)}}+frac{lambda }{m}{ heta_j}] \ &for j=1,2,...n \ }~~~~~~~~~& end{align} ]

    与线性回归的一致,但二者的目标函数不同,不属于同一个模型

  • 相关阅读:
    js实现中文转拼音
    JS中的call、apply、bind方法
    python 过滤html方法
    css 多出一行或多行后显示...的方法
    js 中文排序
    eclipse小技巧
    npm安装及webpack打包小demo
    zan扩展安装
    vagrant安装centos7
    centos7 nginx访问目录403解决
  • 原文地址:https://www.cnblogs.com/hhyx/p/15174233.html
Copyright © 2020-2023  润新知