吴恩达机器学习——第7章 逻辑回归

概述

一看到这个驴唇不对马嘴的名字,就忍不住笑,明明是个分类算法,却非要命名为逻辑回归。这是个历史问题,是由于逻辑规则算法中的假设函数而来的,它的假设函数别名为“逻辑函数”。
逻辑回归是用来解决二分类问题的机器学习方法,用来评估某种事物的可能性。

名词解释

伯努利分布

这个名词非常好记:“不努力”。
伯努利分布又称“两点分布”或“0-1分布”,来源于伯努利实验。在做实验的时候,只有两种结果:成功、失败。假设成功的概率为p,则失败的概率就是1-p。
在这里插入图片描述

基本原理

逻辑回归是基于线性回归实现的,在线性回归的基础上增量了一个函数,从而增加了非线性的特性。

假设函数

线性回归的假设函数是 h θ ( x ) = θ T X h_θ(x)=θ^TX ,逻辑回归在线性函数的基础上增加函数 g ( z ) = 1 1 + e z g(z)=\frac{1}{1+e^{-z}} ,得出逻辑回归的假设函数是:
h θ ( x ) = g ( θ T X ) = 1 1 + e θ T X h_θ(x)=g(θ^TX)=\frac{1}{1+e^{-θ^TX}}

为了方便理解,假设这是一个二分类问题,y的取值只能是0或1。
h θ ( x ) h_θ(x) 就是针对指定x,y=1的概率,使用数学概率表示为: h θ ( x ) = P ( y = 1 x ; θ ) h_θ(x)=P(y=1|x;θ) ,意思是在限定x θ的情况下y=1的概率。
y=0的概率就是 P ( y = 0 x ; θ ) = 1 P ( y = 1 x ; θ ) P(y=0|x;θ)=1-P(y=1|x;θ)

决策边界

g ( z ) g(z) 函数的效果图如下所示:
在这里插入图片描述
当z趋近于无限大时,函数值无限趋近于1;当z趋近于无穷小时,函数值趋近于0;
当z=0时,函数值为0.5。
作为一个二分类问题,结果只能是0和1两种,所以我们做个假设:

  • g ( z ) > = 0.5 g(z)>=0.5 时,结果y为1.也就是 z = θ T X > = 0 z=θ^TX>=0
  • g ( z ) < 0.5 g(z)<0.5 时,结果y为0.也就是 z = θ T X < 0 z=θ^TX<0

基于以上的结论,我们可以对具体的逻辑回归案例进行分析,找出两个分类的临界点即决策边界。

线性的决策边界

假设逻辑回归的假设函数为 h θ ( x ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 ) h_θ(x)=g(θ_0+θ_1*x_1+θ_2*x_2) ,θ取值是 [ 3 1 1 ] \left[\begin{matrix}-3&1&1\end{matrix}\right] (参数的拟合过程老师没有给出,此处的目的是为了解释决策边界,而不是参数的拟合),根据上面的推导过程有以下的结论:

  • z = θ T X > = 0 z=θ^TX>=0 时,y=1,即 θ 0 + θ 1 x 1 + θ 2 x 2 > = 0 θ_0+θ_1*x_1+θ_2*x_2 >=0 ,带入θ值,
    3 + x 1 + x 2 > = 0 -3+x_1+x_2 >=0
    x 1 + x 2 > = 3 x_1+x_2 >=3 时,y=1
  • 同理当 z = θ T X < 0 z=θ^TX<0 时,y=0,即 x 1 + x 2 < 3 x_1+x_2 <3 时。
    在这里插入图片描述
    如上图所示,所有的元素以中间紫色的直线为界分为两部分,蓝色为y=0,红色的y=1,紫色的直线就是决策边界。
    需要注意的是当θ确定后,决策边界就确定了,它是假设函数的属性,不是训练集的属性。

圆形的决策边界

假设逻辑回归的假设函数为 h θ ( x ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 2 2 ) h_θ(x)=g(θ_0+θ_1*x_1+θ_2*x_2+θ_3*x_1^2+θ_4*x_2^2) ,θ取值是 [ 1 0 0 1 1 ] \left[\begin{matrix}-1&0&0&1&1\end{matrix}\right] ,根据上面的推导过程有以下的结论:

  • z = θ T X > = 0 z=θ^TX>=0 时,y=1,即 θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 2 2 > = 0 θ_0+θ_1*x_1+θ_2*x_2+θ_3*x_1^2+θ_4*x_2^2 >=0 ,带入θ值,
    1 + x 1 2 + x 2 2 > = 0 -1+x_1^2+x_2^2>=0
    x 1 2 + x 2 2 > = 1 x_1^2+x_2^2 >=1 时,y=1
  • 同理当 z = θ T X < 0 z=θ^TX<0 时,y=0,即 x 1 2 + x 2 2 < 1 x_1^2+x_2^2 <1 时。
    在这里插入图片描述
    对应的决策边界是个圆形。

不规则的决策边界

通过调整假设函数,可以得出不同的决策边界。
在这里插入图片描述

代价函数

代价函数是拟合参数的手段,回顾一下线性回归的代价函数为:
J ( θ ) = 1 2 m i = 1 m ( h θ ( x ( i ) ) y ( i ) ) 2 = 1 m i = 1 m 1 2 ( h θ ( x ( i ) ) y ( i ) ) 2 J(θ )=\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2=\frac{1}{m}\sum_{i=1}^m\frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2
假设: c o s t ( h θ ( x ( i ) ) , y ( i ) ) = 1 2 ( h θ ( x ( i ) ) y ( i ) ) 2 cost(h_θ(x^{(i)}), y^{(i)})=\frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2
简化一下,去掉i c o s t ( h θ ( x ) , y ) = 1 2 ( h θ ( x ) y ) 2 cost(h_θ(x), y)=\frac{1}{2}(h_θ(x)-y)^2
因为在逻辑回归中 h θ ( x ) = 1 1 + e θ T X h_θ(x)=\frac{1}{1+e^{-θ^TX}}
则代入到 J ( θ ) J(θ) 中后画出的图形如下图所示,有很多局部优化点,这种图形称之为“非凸函数”,不利于进行梯度下降:在这里插入图片描述
下面给出逻辑回归的代价函数:
c o s t ( h θ ( x ) , y ) = { l o g ( h θ ( x ) ) i f y = 1 l o g ( 1 h θ ( x ) ) i f y = 0 } cost(h_θ(x), y)= \left\{ \begin{aligned} -log(h_θ(x)) \qquad if \quad y = 1 \\ -log(1 - h_θ(x)) \qquad if \quad y = 0 \\ \end{aligned} \right\}
该公式等价于:
c o s t ( h θ ( x ) , y ) = { y l o g ( h θ ( x ) ) ( 1 y ) l o g ( 1 h θ ( x ) ) } cost(h_θ(x), y)= \left\{ \begin{aligned} -y*log(h_θ(x)) -(1-y)log(1 - h_θ(x)) \end{aligned} \right\}

y=1的情况下,代价函数的图形如下所示,y轴代表代价函数的值,则当 h θ ( x ) h_θ(x) 趋近于1时代价函数趋近于0,所以可知 h θ ( x ) = 1 h_θ(x)=1 时,y=1的概率最大:
在这里插入图片描述

y=0的情况下,代价函数的图形如下所示,y轴代表代价函数的值,则当 h θ ( x ) h_θ(x) 趋近于0时代价函数趋近于0,所以可知 h θ ( x ) = 0 h_θ(x)=0 时,y=0的概率最大:
在这里插入图片描述
这与我们的推想是一致的,当预测值与实际值一致时,没有代价:

  • h θ ( x ) = 0 h_θ(x)=0 时,y=0的概率最大,代价为0;
  • h θ ( x ) = 1 h_θ(x)=1 时,y=1的概率最大,代价为0;

我们同样可以使用梯度下降法去求θ,梯度下降法可以参考线性回归中的描述。
梯度下降并不是唯一的算法,也可以使用conjugate gradiat、BFGS、L-BFGS算法计算,这些算法更加复杂也更加智能,计算速率也更快。

多类别分类算法

多类别分类问题,可以看成是多个二分类问题,假设现在y的取值范围变成了(1,2,3),可以定义以下3个假设函数:

  • h θ ( 1 ) ( x ) h^{(1)}_θ(x) ,表示特定θX的情况下,y=1的概率:P(y=1|x;θ)
  • h θ ( 2 ) ( x ) h^{(2)}_θ(x) ,表示特定θX的情况下,y=2的概率:P(y=2|x;θ)
  • h θ ( 3 ) ( x ) h^{(3)}_θ(x) ,表示特定θX的情况下,y=3的概率:P(y=3|x;θ)

所以假设函数可以表示为: h θ ( i ) ( x ) = P ( y = i x ; θ ) h^{(i)}_θ(x)=P(y=i|x;θ)

所以判断x是什么类别,就是把x分别代入到3个公式中,取h最大的i作为最终的类别

示例

from sklearn.linear_model import LogisticRegression
import os
import pandas as pd
import numpy as np

# 要预测的结果字段
y_label = ['predclass']
# training_data 训练集,指标字段
x_label = [i for i in training_data.columns if i not in y_label]

lr = LogisticRegression(C=0.01, penalty='l1')

lr.fit(training_data[x_label], training_data[y_label])
# test_data是测试集,在测试集上测试一下效果
score = lr.score(test_data[x_label], test_data['predclass'])
# 速度比近邻要快得多
print("score", score)

参考

https://zhuanlan.zhihu.com/p/28408516

发布了48 篇原创文章 · 获赞 34 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/u013252773/article/details/89228048