机器学习经典算法(2)-逻辑回归

内容导读:文章中主要介绍了 逻辑回归的基本原理,详细易懂的公式推导,对损失函数的理解 等几个方面。

1. 基本思想

  在线性回归内容的讲解中,主要建立了多元自变量与因变量之间的线性关系,即多个输入与对应输出的关系。比较常见的线性回归模型如下:
h Θ ( x ) = Θ 0 + Θ 1 x 1 + Θ 2 x 2 + ⋯ + Θ n x n h_\Theta(x)=\Theta_0+\Theta_1x_1+\Theta_2x_2+\cdots+\Theta_nx_n hΘ(x)=Θ0+Θ1x1+Θ2x2++Θnxn

  正如在线性回归中经常提到的例子,根据一个人的工资和年龄情况预测其在某银行的贷款额度,又比如根据房屋的位置、面积、楼层以及采光等属性预测房价。

  然而这里要提到的逻辑回归却与之不同,逻辑回归这个叫法主要来源于Logistic Regression,作为机器学习的经典算法之一,虽然名字叫回归,但其实是一个经典的二分类算法。

  依然举个例子来形象地说明一下,通过分析年龄、性别、体质指数、平均血压、疾病指数等指标,判断一个人是否患糖尿病,Y=0表示未患病,Y=1表示患病。可以看出,这里最终的输出结果只有两个,包括0和1,因此不能再像线性回归一样,通过函数模型预测所得到的连续值来预测因变量Y(只能取0或1)。

  在讲解逻辑回归之前,我们首先介绍一个函数(sigmoid函数):
g ( z ) = 1 1 + e − z (1) g(z)=\frac{1}{1+e^{-z}}\tag{1} g(z)=1+ez1(1)

  直接看这个函数,可能会觉得还挺复杂的,不容易理解,别着急,我们先来一起看看他的函数图像( Fig.1)。
sigmoid function

Fig.1. Sigmoid Function

  可以看出,其自变量的取值范围为 [ − ∞ , + ∞ ] [-\infty,+\infty] [,+],值域的范围为 [ 0 , 1 ] [0,1] [0,1]。这一下是不是就明白多了,此函数的意义就是把任意的输入映射到 [ 0 , 1 ] [0,1] [0,1]区间。在二分类任务以及机器学习的很多经典算法中,都有可能用到sigmoid函数,只要记住这幅图,在使用的过程中,自然很容易就想清楚了。

  另外补充一点,在分析机器学习算法时,可能还要考虑很多的情况,比如sigmoid函数可能会出现梯度消失或者梯度爆炸,从而影响整个训练过程难以收敛等问题,这个不作为我们这部分的重点,有兴趣可以浏览我的这篇博客(待更新链接)。

  回到本文来,引入这个函数之后,我们要用来干什么呢?

  回想一下,在线性回归中,我们可以通过多个特征属性(变量)得到一个预测值。然而,在逻辑回归中,我们只需要将该值映射到sigmoid函数上,这样就将原来的值映射到 [ 0 , 1 ] [0,1] [0,1]区间了,也可以看成完成了由值到概率的转换,然后通过设定合适的阈值,从而完成整个分类任务。

  到现在,逻辑回归的基本思想算是交代清楚了,那么接下来,我们需要着重考虑的是如何建立模型?如何训练模型?又如何设定阈值?

2. 模型建立

  首先,根据刚刚我们引入的sigmoid函数,我们可以写出我们的预测函数
h Θ ( x ) = g ( Θ T x ) = 1 1 + e − Θ T x (2) h_\Theta(x)=g(\Theta^Tx)=\frac{1}{1+e^{-\Theta^Tx}}\tag{2} hΘ(x)=g(ΘTx)=1+eΘTx1(2)

  其中,(这里的 Θ T x \Theta^Tx ΘTx与线性回归中的内容是类似的)
Θ 0 + Θ 1 x 1 + Θ 2 x 2 + ⋯ + Θ n x n = ∑ i = 1 n Θ i x i = Θ T x (3) \Theta_0+\Theta_1x_1+\Theta_2x_2+\cdots+\Theta_nx_n=\sum_{i=1}^n\Theta_ix_i=\Theta^Tx\tag{3} Θ0+Θ1x1+Θ2x2++Θnxn=i=1nΘixi=ΘTx(3)

  以上两个公式其实就是将式(3)计算出来的值映射到式(2)sigmoid函数上,从而完成预测值到概率的转换(逻辑回归模型本身是假设数据满足伯努利分布的,因此这里可以将其看作概率值)。

  得到预测函数后,再来看我们的这个逻辑回归问题。换句话再强调一遍,我们的做法是,先算出在满足相应特征属性 x x x的情况下,其对应类别( y = 1 y=1 y=1 y = 0 y=0 y=0)的概率值,然后通过设定的阈值(第4部分有讲解,不用着急),进行最终的分类。

  相当于我们求出的 h Θ ( x ) h_\Theta(x) hΘ(x)为一个概率值,其范围在 [ 0 , 1 ] [0,1] [0,1]区间,由于逻辑回归是个二分类问题,那么在给定 x x x的情况下, y = 1 y=1 y=1 y = 0 y=0 y=0的概率公式可如下表示

P ( y = 1 ∣ x ; Θ ) = h Θ ( x ) (4) P(y=1|x;\Theta)=h_\Theta(x)\tag{4} P(y=1x;Θ)=hΘ(x)(4)

P ( y = 0 ∣ x ; Θ ) = 1 − h Θ ( x ) (5) P(y=0|x;\Theta)=1-h_\Theta(x)\tag{5} P(y=0x;Θ)=1hΘ(x)(5)

  整合式(4)和式(5)可得
P ( y ∣ x ; Θ ) = ( h Θ ( x ) ) y ( 1 − h Θ ( x ) ) 1 − y (6) P(y|x;\Theta)=(h_\Theta(x))^y(1-h_\Theta(x))^{1-y}\tag{6} P(yx;Θ)=(hΘ(x))y(1hΘ(x))1y(6)

  我们分析一下整合出来的式(6),对于二分类任务(0,1),在该式中,若 y = 0 y=0 y=0,则只保留了 ( 1 − h Θ ( x ) ) (1-h_\Theta(x)) (1hΘ(x)),若 y = 1 y=1 y=1,则只保留了 h Θ ( x ) h_\Theta(x) hΘ(x),因此式(6)和式(4)、(5)表达的是一个意思。

3. 模型训练

  由以上模型建立,我们得到了关于 y ( i ) y^{(i)} y(i)的条件概率 p ( y ( i ) ∣ x ( i ) ; Θ ) p(y^{(i)}|x^{(i)};\Theta) p(y(i)x(i);Θ),这里要使得预测值更接近于真实值,即条件概率 p ( y ( i ) ∣ x ( i ) ; Θ ) p(y^{(i)}|x^{(i)};\Theta) p(y(i)x(i);Θ)越大越好。

  我们假设用于训练的样本为 m m m个,那么可通过找到最大似然估计,得到最优的解。

  首先我们写出似然函数
L ( Θ ) = ∏ i = 1 m p ( y i ∣ x i ; Θ ) = ∏ i = 1 m ( h Θ ( x i ) ) y i ( 1 − h Θ ( x i ) ) 1 − y i L(\Theta)=\prod _{i=1}^{m}p(y_i|x_i;\Theta)=\prod _{i=1}^{m}(h_\Theta(x_i))^{y_i}(1-h_\Theta(x_i))^{1-y_i} L(Θ)=i=1mp(yixi;Θ)=i=1m(hΘ(xi))yi(1hΘ(xi))1yi

  由于似然函数中包含了累乘,计算过程是很复杂的,这里将其转换为对数似然,做这样的处理似然函数的单调性并无影响,却大大改善了其计算复杂度。对数似然函数如下
l ( Θ ) = l o g L ( Θ ) = ∑ i = 1 m ( y i l o g h Θ ( x i ) + ( 1 − y i ) l o g ( 1 − h Θ ( x i ) ) ) l(\Theta)=logL(\Theta)=\sum_{i=1}^m(y_ilogh_\Theta(x_i)+(1-y_i)log(1-h_\Theta(x_i))) l(Θ)=logL(Θ)=i=1m(yiloghΘ(xi)+(1yi)log(1hΘ(xi)))

  在这里,我们需要找到的是最大似然估计,那么可以应用梯度上升求最大值,引入 J ( Θ ) = − 1 m l ( Θ ) J(\Theta)=-\frac{1}{m}l(\Theta) J(Θ)=m1l(Θ) 转换为梯度下降任务。此处 J ( Θ ) J(\Theta) J(Θ) 即为逻辑回归的损失函数(交叉熵损失函数),最大化 似然估计 也就是 最小化 损失函数。

J ( Θ ) = − 1 m ∑ i = 1 m ( y i l o g h Θ ( x i ) + ( 1 − y i ) l o g ( 1 − h Θ ( x i ) ) ) J(\Theta)=-\frac{1}{m}\sum_{i=1}^m(y_ilogh_\Theta(x_i)+(1-y_i)log(1-h_\Theta(x_i))) J(Θ)=m1i=1m(yiloghΘ(xi)+(1yi)log(1hΘ(xi)))

补充:简单介绍一下在逻辑回归模型中,对 交叉熵损失函数 的理解。

首先,对于某一样本,其交叉熵损失函数为

J ( Θ ) = − ( y i l o g h Θ ( x i ) + ( 1 − y i ) l o g ( 1 − h Θ ( x i ) ) ) J(\Theta)=-(y_ilogh_\Theta(x_i)+(1-y_i)log(1-h_\Theta(x_i))) J(Θ)=(yiloghΘ(xi)+(1yi)log(1hΘ(xi)))

y i = 0 y_i=0 yi=0 时,此时 J ( Θ ) = − l o g ( 1 − h Θ ( x i ) ) J(\Theta)=-log(1-h_\Theta(x_i)) J(Θ)=log(1hΘ(xi));要使得 J ( Θ ) J(\Theta) J(Θ) 越小,即 h Θ ( x i ) h_\Theta(x_i) hΘ(xi) 越小;又因为 h Θ ( x i ) h_\Theta(x_i) hΘ(xi) 由 sigmoid 函数得到,范围为[0,1];因此,当 h Θ ( x i ) h_\Theta(x_i) hΘ(xi) 越接近 0(即越接近真实值 y i y_i yi ), J ( Θ ) J(\Theta) J(Θ) 就越小,模型也就越好。

y i = 1 y_i=1 yi=1 时,此时 J ( Θ ) = − h Θ ( x i ) J(\Theta)=-h_\Theta(x_i) J(Θ)=hΘ(xi);要使得 J ( Θ ) J(\Theta) J(Θ) 越小,即 h Θ ( x i ) h_\Theta(x_i) hΘ(xi) 越大;又因为 h Θ ( x i ) h_\Theta(x_i) hΘ(xi) 由 sigmoid 函数得到,范围为[0,1];因此,当 h Θ ( x i ) h_\Theta(x_i) hΘ(xi) 越接近 1(即越接近真实值 y i y_i yi ), J ( Θ ) J(\Theta) J(Θ) 就越小,模型也就越好。

由以上分析可以看出,交叉熵损失函数可以较好地评价逻辑回归模型的效果。

当然,也有提到将 “平方误差和” 作为逻辑回归的损失函数,但由于使用 平方误差和 在优化参数时,后面的优化问题可能变得非凸,从而出现较多局部最优解,使得梯度下降法无法准确找到最优解。

  对上式求导,数学功底还行的可以仔细看看下面的推导过程,要是数学比较弱,干脆直接用最后的结果:
δ δ Θ j J ( Θ ) = − 1 m ∑ i = 1 m ( y i 1 h Θ ( x i ) δ δ Θ j h Θ ( x i ) − ( 1 − y i ) 1 1 − h Θ ( x i ) δ δ Θ j h Θ ( x i ) ) = − 1 m ∑ i = 1 m ( y i 1 g ( Θ T x i ) − ( 1 − y i ) 1 1 − g ( Θ T x i ) ) δ δ Θ j g ( Θ T x i ) = − 1 m ∑ i = 1 m ( y i 1 g ( Θ T x i ) − ( 1 − y i ) 1 1 − g ( Θ T x i ) ) g ( Θ T x i ) ( 1 − g ( Θ T x i ) ) δ δ Θ j Θ T x i = − 1 m ∑ i = 1 m ( y i ( 1 − g ( Θ T x i ) ) − ( 1 − y i ) g ( Θ T x i ) ) x i j = − 1 m ∑ i = 1 m ( y i − g ( Θ T x i ) ) x i j = 1 m ∑ i = 1 m ( h Θ ( x i ) − y i ) x i j \begin{aligned} \frac{\delta}{\delta_{\Theta_j}}J(\Theta)&=-\frac{1}{m}\sum_{i=1}^m(y_i\frac{1}{h_\Theta(x_i)}\frac{\delta}{\delta_{\Theta_j}}h_\Theta(x_i)-(1-y_i)\frac{1}{1-h_\Theta(x_i)}\frac{\delta}{\delta_{\Theta_j}}h_\Theta(x_i)) \\ &=-\frac{1}{m}\sum_{i=1}^m(y_i\frac{1}{g(\Theta^Tx_i)}-(1-y_i)\frac{1}{1-g(\Theta^Tx_i)})\frac{\delta}{\delta_{\Theta_j}}g(\Theta^Tx_i)\\ &=-\frac{1}{m}\sum_{i=1}^m(y_i\frac{1}{g(\Theta^Tx_i)}-(1-y_i)\frac{1}{1-g(\Theta^Tx_i)})g(\Theta^Tx_i)(1-g(\Theta^Tx_i))\frac{\delta}{\delta_{\Theta_j}}\Theta^Tx_i\\ &=-\frac{1}{m}\sum_{i=1}^m(y_i(1-g(\Theta^Tx_i))-(1-y_i)g(\Theta^Tx_i))x_i^j\\ &=-\frac{1}{m}\sum_{i=1}^m(y_i-g(\Theta^Tx_i))x_i^j\\ &=\frac{1}{m}\sum_{i=1}^m(h_\Theta(x_i)-y_i)x_i^j \end{aligned} δΘjδJ(Θ)=m1i=1m(yihΘ(xi)1δΘjδhΘ(xi)(1yi)1hΘ(xi)1δΘjδhΘ(xi))=m1i=1m(yig(ΘTxi)1(1yi)1g(ΘTxi)1)δΘjδg(ΘTxi)=m1i=1m(yig(ΘTxi)1(1yi)1g(ΘTxi)1)g(ΘTxi)(1g(ΘTxi))δΘjδΘTxi=m1i=1m(yi(1g(ΘTxi))(1yi)g(ΘTxi))xij=m1i=1m(yig(ΘTxi))xij=m1i=1m(hΘ(xi)yi)xij

  这里的 x i j x_i^j xij是地 i i i个样本的第 j j j个特征属性值,对应这里的 Θ j \Theta_j Θj

  接下来对参数进行更新,即梯度下降中沿着最快的方向(梯度方向)走一步, α \alpha α为学习率,在这里相当于控制了梯度下降的步长:
Θ j = Θ j − α δ δ Θ j J ( Θ ) = Θ j − α 1 m ∑ i = 1 m ( h Θ ( x i ) − y i ) x i j \Theta_j=\Theta_j-\alpha\frac{\delta}{\delta_{\Theta_j}}J(\Theta)=\Theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\Theta(x_i)-y_i)x_i^j Θj=ΘjαδΘjδJ(Θ)=Θjαm1i=1m(hΘ(xi)yi)xij

  经过多轮的迭代训练,整个过程收敛,得到最优的 Θ \Theta Θ值。

4. 阈值选择

  阈值的选择并没有一个固定的标准,一般看来,选择中间值0.5,即概率为50%,比较合适。但是在某些任务中显得并不那么合适,比如在前面的例子中,预测患糖尿病,如果将阈值设为0.5,那么对于小于50%却非常接近50%的概率患了糖尿病的人,却被诊断为未患糖尿病。若是将阈值设置为0.3,那么有30%的概率,就诊断为患病,这对整个病的预防效果也是很好的。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值