赞
踩
LR算法可能不像随机森林、SVM、神经网络、GBDT等分类算法那么复杂那么高深的样子,可是绝对不能小看这个算法,因为它有几个优点是那几个算法无法达到的。
一是逻辑回归的算法已经比较成熟,预测较为准确;二是模型求出的系数易于理解,便于解释,不属于黑盒模型,尤其在银行业,80%的预测是使用逻辑回归;三是结果是概率值,可以做ranking model;四是训练快。
当然它也有缺点,分类较多的都不是很适用;对于自变量的多重共线性比较敏感,所以需要利用因子分析或聚类分析来选择代表性的自变量;另外预测结果呈现S型,两端概率变化小(在上一节也说过),中间概率变化大比较敏感,导致很多区间的变量的变化对目标概率的影响没有区分度,无法确定阈值。下面我先具体介绍下这个模型。
首先要搞清楚当你的目标变量是分类变量时,才会考虑逻辑回归,并且主要用于两分类问题。举例来说医生希望通过肿瘤的大小x1、长度x2、种类x3等等特征来判断病人的这个肿瘤是恶性肿瘤还是良性肿瘤,这时目标变量y就是分类变量(0良性肿瘤,1恶性肿瘤)。显然我们希望像保留像线性回归一样可以通过一些列x与y之间的线性关系来进行预测,但是此时由于Y是分类变量,它的取值只能是0,1,或者0,1,2等等,不可能是负无穷到正无穷,这个问题怎么解决呢?
对于二分类问题,此时引入了一个sigmoid函数,这个函数的性质,非常好的满足了,x的输入可以是负无穷到正无穷,而输出y总是[0,1],并且当x=0时,y的值为0.5,以一种概率的形式表示. x=0的时候y=0.5 这是决策边界。当你要确定肿瘤是良性还是恶性时,其实我们是要找出能够分开这两类样本的边界,叫决策边界。
sigmoid函数:https://blog.csdn.net/No_Game_No_Life_/article/details/89511056
sigmoid函数:
f
(
x
)
=
1
1
+
e
−
x
f(x)=\frac{1}{1+e^{-x}}
f(x)=1+e−x1
对于一个给定的x,可以通过确定的函数计算得出函数值
f
(
x
)
f(x)
f(x),如果
f
(
x
)
f(x)
f(x)=0.7,则说明,有70%的概率是恶性肿瘤。
不过上面的公式过于简单,因为决定性的因素
x
i
x_i
xi可能不止一个,每个因素的权重
θ
i
\theta _i
θi也不一定相同,可以把
x
x
x和
θ
\theta
θ理解成为参数向量。向量之间的乘积,我们用下面的公式表示:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
)
h_\theta (x)=g(\theta _0+\theta _1x_1+\theta _2 x_2+...)
hθ(x)=g(θ0+θ1x1+θ2x2+...)
好了,原始的sigmoid函数就应该这样表示:
f
(
x
)
=
1
1
+
e
−
h
θ
(
x
)
f(x)=\frac{1}{1+e^{-h_\theta (x)}}
f(x)=1+e−hθ(x)1
与之前我们学习的线性回归(https://blog.csdn.net/No_Game_No_Life_/article/details/89512688 ) 相比,因为它引入了非线性映射,将线性回归值域映射到(0,1)之间,有助于直观的做出预测类型的判断:大于等于0.5表示阳性,小于0.5表示阴性。
经过上面的讲解,我们应该对LR要做什么,有个一个大体上的把握。接下来,我们在深入一下,介绍一下决策边界(Decision Boundary的概念,这将会有助于我们能更好的理解LR的假设函数究竟是在计算什么。
我们知道sigmoid函数的图像,想象一下,在什么时候,我们能取到阳性的结果呢(函数值大于0.5)?
没错,就是上图的z的值大于0的时候,也就是说:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
)
h_\theta (x)=g(\theta _0+\theta _1x_1+\theta _2 x_2+...)
hθ(x)=g(θ0+θ1x1+θ2x2+...)的函数值大于0的时候。
于是我们可以得到这样的关系式子:
下面我们再举一个例子,假设我们有许多样本,并在图中表示出来了,并且假设我们已经通过某种方法求出了LR模型的参数(如下图)。也就是假设我们知道了向量
θ
T
\theta ^T
θT的值为
[
−
3
,
1
,
1
]
T
[-3,1,1]^T
[−3,1,1]T。
所以有:
其临界线也得出来了:
x
1
+
x
2
=
3
x_1+x_2=3
x1+x2=3
所以,这时,直线上方所有样本都是正样本y=1,直线下方所有样本都是负样本y=0。因此我们可以把这条直线成为决策边界。
同理,对于非线性可分的情况,我们只需要引入多项式特征就可以很好的去做分类预测,如下图:
要求 θ T \theta ^T θT怎么解,可以理解为求参数的权值。我们这里先介绍一个概念代价函数(似然函数)。
梯度下降是一个用于求解函数最小值的算法。在机器学习问题上,我们通常会得出模型的代价函数,用于评估模型与真实情况之间的差距。通常我们在确定模型时,会将代价函数取最小时的参数值作为我们模型的最终参数。而,在"找出使得代价函数取最小时的参数值"这一重要步骤的求解过程中,我们通常会见到梯度下降大法的身影。梯度下降法因其思想简单,易于实现,并且收敛效果也很不错的质地,使得它在机器学习领域混的那是相当好!
假设上面这个图是一个山脉的地理图,如果你站在红色区域部分(最高点),你要快速下山应该怎么办?应该每一步都朝着坡度最陡的地方迈过去(局部最优解)。我们计算代价函数
J
(
θ
)
J(\theta)
J(θ)也是这样的,寻找一个能让代价函数值下降最多的参数的组合。我们需要找到一个凸函数的
J
(
θ
)
J(\theta)
J(θ),拥有一个局部最小值,从而求出全局最小值。
具体如何求解代价函数
J
(
θ
)
J(\theta)
J(θ)呢。
在上一节的线性回归里,我们是这样表示一元一次方程的:
Y
=
a
+
b
X
Y=a+bX
Y=a+bX
其平方误差为:
∑
i
=
1
n
(
a
+
b
X
i
−
Y
)
2
\sum_{i=1}^{n}(a+bX_i-Y)^2
∑i=1n(a+bXi−Y)2
我们上一节的任务就是找到a,b的值来使得这个误差最小,我们通过各种变换,求出了a,b的式子,是关于
X
‾
\overline X
X 和
Y
‾
\overline Y
Y的。
这里我们定义一元一次的代价函数为:
J
(
a
,
b
)
=
1
2
n
∑
i
=
1
n
(
a
+
b
X
i
−
Y
)
2
J(a,b)=\frac{1}{2n}\sum_{i=1}^{n}(a+bX_i-Y)^2
J(a,b)=2n1∑i=1n(a+bXi−Y)2
为什么要加一个1/2呢?主要是为了方便求导,因为我们的目标是求一个最小的
J
(
a
,
b
)
J(a,b)
J(a,b),用导数就对了。
对了,这里的
J
(
a
,
b
)
J(a,b)
J(a,b)就是前面所说的
J
(
θ
)
J(\theta)
J(θ)。
梯度下降和代价函数,因为我是初学,就简单的理解到这里。
我们粗暴的将逻辑回归的假设函数
f
(
x
)
=
1
1
+
e
−
h
θ
(
x
)
f(x)=\frac{1}{1+e^{-h_\theta (x)}}
f(x)=1+e−hθ(x)1带入一元一次方程的代价函数中,我们得到的
J
(
θ
)
J(\theta)
J(θ)是一个非凸函数,如下图:
这样的函数拥有多个局部极小值,这就会使得我们在使用梯度下降法求解函数最小值时,所得到的结果并非总是全局最小,而有更大的可能得到的是局部最小值。这样解释应该理解了吧。虽然前面的解释否定了我们猜想,但是也给我们指明了思路,那就是我们现在要做的就是为LR找到一个凸的代价函数! 在逻辑回归中,我们最常用的损失函数为对数损失函数,对数损失函数可以为LR提供一个凸的代价函数,有利于使用梯度下降对参数求解。为什么对数函数可以做到这点呢? 我们先看一下对数函数的图像:
对数函数的性质大家都有所了解,在(0,1)上,当
z
=
1
z=1
z=1时,
l
o
g
z
=
0
logz=0
logz=0;当
z
−
>
0
z->0
z−>0时,
l
o
g
z
−
>
∞
logz->∞
logz−>∞。这就可以和代价函数联系起来,因为在预测分类中,当算法正确预测的时候,其代价函数的值应该是0;当错误预测的时候,其代价可看作无穷大来惩罚我们的学习算法,使其不要轻易预测错误。所以这个函数很符合我们选择代价函数的要求。
因此,我们将其应用与LR中:
对于惩罚函数Cost的这两种情况:
当实际标签和预测结果相同时,即
y
y
y和
h
θ
(
x
)
h_\theta(x)
hθ(x)同时为1或0,此时代价最小为0; 当实际标签和预测标签恰好相反时,也就是恰好给出了错误的答案,此时惩罚最大为正无穷。现在应该可以感受到对数损失之于LR的好了。
为了可以更加方便的进行后面的参数估计求解,我们可以把Cost表示在一行:
这与我们之前给出的两行表示的形式是等价的。因此,我们的代价函数最终形式为:(1)
此时的损失函数变成了凸函数,Theta的求解,就是梯度下降法求最小值,此时加入的正则化项,是解决过拟合问题。(过拟合问题:如果我们的模型有非常多的特征,模型很复杂,模型对原始数据的拟合效果很好,但是丧失一般性,对新的待预测变量预测效果很差。)
接下来要做的就是使用梯度下降估计参数值或参数组合。
梯度下降算法我们之前介绍过了:(2)
通过求导,我们得到:
求解(1)(2)就可以得到。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。