一、分类问题(Classification )
在分类问题中,当要预测的变量 𝑦 是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法。
在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈;区别一个肿瘤是恶性的还是良性的等等。
以二元分类为例,我们将因变量可能属于的两个类分别称为负向类和正向类,则因变量y 取值 0 或 1,其中 0 表示负向类,1 表示正向类。
对于分类, 𝑦 取值为 0 或者 1,如果你使用的是线性回归,那么假设函数的输出值可能远大于 1,或者远小于 0,根据线性回归模型我们只能预测连续的值,然而对于分类问题,我们需要输出0或1。线性回归只是机器学习类算法中最简单的用特征预测标签数值的回归算法,满足线性规律的真实场景并不是很多,所以我们在接下来的要研究的算法就叫做逻辑回归算法,这个算法的性质是:它的输出值永远在 0 到 1 之间。
二、假设函数(Hypothesis Representation)
逻辑回归模型的假设是:
h
θ
(
x
)
=
g
(
θ
T
X
)
h_\theta \left( x \right)=g\left(\theta^{T}X \right)
hθ(x)=g(θTX)
其中:
X
X
X 代表特征向量
g
g
g 代表逻辑函数(logistic function)是一个常用的逻辑函数为S形函数(又叫 Sigmoid 函数),公式为:
g
(
z
)
=
1
1
+
e
−
z
g\left( z \right)=\frac{1}{1+{{e}^{-z}}}
g(z)=1+e−z1。
该函数的图像为:
合起来,我们得到逻辑回归模型的假设:
h
θ
(
x
)
=
1
1
+
e
−
θ
T
X
h_\theta \left( x \right)=\frac{1}{1+{{e}^{-\theta^{T}X }}}
hθ(x)=1+e−θTX1
对模型的理解:
g
(
z
)
=
1
1
+
e
−
z
g\left( z \right)=\frac{1}{1+{{e}^{-z}}}
g(z)=1+e−z1。
h
θ
(
x
)
h_\theta \left( x \right)
hθ(x)的作用是,对于给定的输入变量,根据选择的参数计算输出变量=1的可能性(estimated probablity)即
h
θ
(
x
)
=
P
(
y
=
1
∣
x
;
θ
)
h_\theta \left( x \right)=P\left( y=1|x;\theta \right)
hθ(x)=P(y=1∣x;θ)
例如,如果对于给定的
x
x
x,通过已经确定的参数计算得出
h
θ
(
x
)
=
0.7
h_\theta \left( x \right)=0.7
hθ(x)=0.7,则表示有70%的几率
y
y
y为正向类,相应地
y
y
y为负向类的几率为1-0.7=0.3。
三、决策边界(Decision boundary)
根据上面绘制出的 S 形函数图像,我们知道当
z
=
0
z=0
z=0 时
g
(
z
)
=
0.5
g(z)=0.5
g(z)=0.5
z
>
0
z>0
z>0 时
g
(
z
)
>
0.5
g(z)>0.5
g(z)>0.5
z
<
0
z<0
z<0 时
g
(
z
)
<
0.5
g(z)<0.5
g(z)<0.5
又
z
=
θ
T
x
z={\theta^{T}}x
z=θTx ,即:
θ
T
x
>
=
0
{\theta^{T}}x>=0
θTx>=0 时,预测
y
=
1
y=1
y=1
θ
T
x
<
0
{\theta^{T}}x<0
θTx<0 时,预测
y
=
0
y=0
y=0
现在假设我们有下面的模型:
1.
并且参数
θ
\theta
θ 是向量[-3 1 1]。 则当
−
3
+
x
1
+
x
2
≥
0
-3+{x_1}+{x_2} \geq 0
−3+x1+x2≥0,即
x
1
+
x
2
≥
3
{x_1}+{x_2} \geq 3
x1+x2≥3时,模型将预测
y
=
1
y=1
y=1。
我们可以绘制直线
x
1
+
x
2
=
3
{x_1}+{x_2} = 3
x1+x2=3,这条线便是我们模型的分界线,将预测为1的区域和预测为 0的区域分隔开。
2.
因为需要用曲线才能分隔
y
=
0
y=0
y=0 的区域和
y
=
1
y=1
y=1 的区域,我们需要二次方特征:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
1
2
+
θ
4
x
2
2
)
{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)
hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22)是[-1 0 0 1 1],则我们得到的判定边界恰好是圆点在原点且半径为1的圆形。
我们可以用非常复杂的模型来适应非常复杂形状的判定边界。
四、代价函数(Cost Function)
下面介绍如何拟合逻辑回归模型的参数θ
对于线性回归模型,我们定义的代价函数是所有模型误差的平方和。关于线性回归的代价函数参考文章机器学习——代价函数
理论上来说,我们也可以对逻辑回归模型沿用这个定义,但是问题在于,当我们将
h
θ
(
x
)
=
1
1
+
e
−
θ
T
x
{h_\theta}\left( x \right)=\frac{1}{1+{e^{-\theta^{T}x}}}
hθ(x)=1+e−θTx1 带入到这样定义了的代价函数中时,我们得到的代价函数将是一个非凸函数(non-convexfunction)。
这意味着我们的代价函数有许多局部最小值,这将影响梯度下降算法寻找全局最小值。
线性回归的代价函数为:
J
(
θ
)
=
1
m
∑
i
=
1
m
1
2
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
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(θ)=m1i=1∑m21(hθ(x(i))−y(i))2 。
我们重新定义逻辑回归的代价函数为:
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
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)}
J(θ)=m1i=1∑mCost(hθ(x(i)),y(i)),其中
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)与
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost\left( {h_\theta}\left( x \right),y \right)
Cost(hθ(x),y)之间的关系如下图所示:
这样构建的
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost\left( {h_\theta}\left( x \right),y \right)
Cost(hθ(x),y)函数的特点是:当实际的
y
=
1
y=1
y=1 且
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)也为 1 时误差为 0,当
y
=
1
y=1
y=1 但
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)不为1时误差随着
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)变小而变大;当实际的
y
=
0
y=0
y=0 且
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)也为 0 时代价为 0,当
y
=
0
y=0
y=0 但
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)不为 0时误差随着
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)的变大而变大。
因为 y 的取值为0 or 1,所以可以把式子可以合并成:
C o s t ( h θ ( x ) , y ) = − y × l o g ( h θ ( x ) ) − ( 1 − y ) × l o g ( 1 − h θ ( x ) ) 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(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x))
J
(
θ
)
J\left( \theta \right)
J(θ)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
=\frac{1}{m}\sum\limits_{i=1}^{m}{{Cost}\left( {h_\theta}\left( {x}^{\left( i \right)} \right),{y}^{\left( i \right)} \right)}
=m1i=1∑mCost(hθ(x(i)),y(i))
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
=-\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)]}
=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
在得到这样一个代价函数以后,我们便可以用梯度下降算法来求得能使代价函数最小的参数了。梯度算法查看这篇文章:机器学习——多元梯度算法 。算法为:
Repeat {
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
\theta_j := \theta_j - \alpha \frac{\partial}{\partial\theta_j} J(\theta)
θj:=θj−α∂θj∂J(θ)
(simultaneously update all )
}
求导后得到:
Repeat {
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\theta_j := \theta_j - \alpha \frac{1}{m}\sum\limits_{i=1}^{m}{{\left( {h_\theta}\left( \mathop{x}^{\left( i \right)} \right)-\mathop{y}^{\left( i \right)} \right)}}\mathop{x}_{j}^{(i)}
θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)
(simultaneously update all )
}
我们注意到,得到的梯度下降算法表面上看上去与线性回归的梯度下降算法一样,但是这里的 h θ ( x ) = g ( θ T X ) {h_\theta}\left( x \right)=g\left( {\theta^T}X \right) hθ(x)=g(θTX)与线性回归中不同,所以实际上是不一样的。
除了梯度下降算法以外,还有一些常被用来求代价函数最小的算法,这些算法更加复杂和优越,而且通常不需要人工选择学习率,通常比梯度下降算法要更加快速。这些算法有:共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS)
五、多元分类
举一个多元分类的例子:如果一个病人因为鼻塞来到你的诊所,他可能并没有生病,用 y = 1 y=1 y=1 这个类别来代表;或者患了感冒,用 y = 2 y=2 y=2 来代表;或者得了流感用 y = 3 y=3 y=3来代表。
对于之前的一个,二元分类问题,我们的数据看起来可能是像这样:
对于一个多类分类问题,我们的数据集或许看起来像这样:
用3种不同的符号来代表3个类别,那么对于这3个类型的数据集,我们如何得到一个学习算法来进行分类呢?
好比上图表示的有3个类别,我们用三角形表示 y=1,方框表示y=2,叉叉表示 y=3。我们下面要做的就是使用一个训练集,将其分成3个二元分类问题。
我们先从用三角形代表的类别1开始,实际上我们可以创建一个新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,我们创建一个新的训练集,如下图所示的那样,我们要拟合出一个合适的分类器。
这里的三角形是正样本,而圆形代表负样本。我们将多个类中的一个类标记为正向类(y=1),然后将其他所有类都标记为负向类,这个模型记作
h
θ
(
1
)
(
x
)
h_\theta^{\left( 1 \right)}\left( x \right)
hθ(1)(x)
类似地第我们选择另一个类标记为正向类(
y
=
2
y=2
y=2),再将其它类都标记为负向类,将这个模型记作
h
θ
(
2
)
(
x
)
h_\theta^{\left( 2 \right)}\left( x \right)
hθ(2)(x),依此类推。
我们得到一系列的模型简记为:
h
θ
(
i
)
(
x
)
=
p
(
y
=
i
∣
x
;
θ
)
h_\theta^{\left( i \right)}\left( x \right)=p\left( y=i|x;\theta \right)
hθ(i)(x)=p(y=i∣x;θ)其中:
i
=
(
1
,
2
,
3....
k
)
i=\left( 1,2,3....k \right)
i=(1,2,3....k)
最后,在我们需要做预测时,我们将所有的分类机都运行一遍,在三个分类器里面输入
x
x
x,然后我们选择一个让
h
θ
(
i
)
(
x
)
h_\theta^{\left( i \right)}\left( x \right)
hθ(i)(x) 最大的 i,即
max
i
h
θ
(
i
)
(
x
)
\mathop{\max}\limits_i\,h_\theta^{\left( i \right)}\left( x \right)
imaxhθ(i)(x),这个分类器就是可信度最高,效果最好的,使用这个分类机我们便可以到的输入的x的具体输出y属于哪一类。
以上就是所有关于逻辑回归算法的内容。这篇文章是我学习吴恩达机器学习记录的一些笔记,有问题欢迎大家提出!