在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误),其往往是一个离散的值。比如:判断一封电子邮件是否是垃圾邮件;判断一次金融交易是否是欺诈。
逻辑回归算法,是用于分类问题的最广泛的学习算法。
简单二元分类
我们将因变量(dependent variable)可能属于的两个类分别称为负向类(negative class)和正向类(positive class),则因变量 y∈{0,1} ,其中 0 表示负向类,1 表示正向类。
而我们将用逻辑回归算法使得假设函数
h
θ
(
x
)
h_\theta(x)
hθ(x) 的输出范围∈[0,1],表示
P
(
y
=
1
∣
x
;
θ
)
P(y=1|x;\ \theta)
P(y=1∣x; θ),即“因变量 y=1 的概率”。
注:虽然“逻辑回归”的名字中带有“回归”二字,但其仍属于分类算法。
逻辑回归
假设模型
如果对如图的数据集进行线性回归的话,会得到一条直线。其结果并不能用作分类(值域不在0-1内)
而逻辑回归的预测模型为:
h
θ
(
x
)
=
g
(
θ
T
X
)
h_\theta(x) = g(\theta^TX)
hθ(x)=g(θTX)
其中
g
(
z
)
=
1
1
+
e
−
z
g(z) = \frac{1}{1+e^{-z}}
g(z)=1+e−z1
该函数图像如图所示:
如前所言,
h
θ
(
x
)
h_\theta(x)
hθ(x) 的作用是:对于给定的输入变量,根据选择的参数计算输出变量=1的可能性,即
P
(
y
=
1
∣
x
;
θ
)
P(y=1|x;\ \theta)
P(y=1∣x; θ)
例如,如果对于给定的?,通过已经确定的参数计算得出
h
θ
(
x
)
h_\theta(x)
hθ(x) = 0.7,则表示有70%的几率?为正向类,相应地?为负向类的几率为 30%
决策边界
若以0.5作为区分正向类与负向类的阈值,则可以发现:对于函数 g ( z ) = 1 1 + e − z g(z) = \frac{1}{1+e^{-z}} g(z)=1+e−z1,在 z < 0 z<0 z<0时, g ( z ) g(z) g(z)< 0.5 0.5 0.5 ;而 z > 0 z>0 z>0时, g ( z ) g(z) g(z) > 0.5 0.5 0.5
即
θ
T
x
>
0
\theta^Tx>0
θTx>0 时,
y
y
y =
1
1
1
θ
T
x
<
0
\theta^Tx<0
θTx<0 时,
y
y
y =
0
0
0
假设有如图的数据集,且经过线性回归后得到
θ
T
X
=
−
3
+
x
1
+
x
2
\theta^TX = -3 + x_1 + x_2
θTX=−3+x1+x2
则在图上画出 x 1 + x 2 = 3 x_1+x_2=3 x1+x2=3的图像。不难看出,这便是数据集的分界线,被称为决策边界(decision boundary)。将预测为 1 的区域( − 3 + x 1 + x 2 > 0 -3 + x_1 + x_2>0 −3+x1+x2>0)和预测为 0 的区域( − 3 + x 1 + x 2 < 0 -3 + x_1 + x_2<0 −3+x1+x2<0)分隔开。
- 注:决策边界是假设模型的属性,而不是数据集的属性。决策边界取决于模型的选择。
我们可以用非常复杂的模型来适应非常复杂形状的判定边界。
如图,假设已知
h
θ
(
x
)
=
−
1
+
x
1
2
+
x
2
2
h_\theta(x)=-1 +x_1^2+x_2^2
hθ(x)=−1+x12+x22,即正好是一个以原点为圆心,1为半径的圆。
代价函数
若将逻辑回归的模型代入线性回归的代价函数(误差平方和,即方差),得到的代价函数将会是一个非凸函数(non-convexfunction),无法进行梯度下降
对于线性回归,其代价函数可以表示为:(这是单训练样本的代价函数表达形式)
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
1
2
(
h
θ
(
x
)
−
y
)
2
Cost(h_\theta(x),\ y)=\frac{1}{2}(h_\theta(x)-y)^2
Cost(hθ(x), y)=21(hθ(x)−y)2
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
J(\theta)=\frac{1}{m}\sum^{m}_{i=1}Cost(h_\theta(x^{(i)}),\ y^{(i)})
J(θ)=m1i=1∑mCost(hθ(x(i)), y(i))
而逻辑回归的代价函数较为不同。
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
{
−
log
(
h
θ
(
x
)
)
y
=
1
−
(
log
(
1
−
h
θ
(
x
)
)
)
y
=
0
Cost(h_\theta(x),\ y)=\begin{cases} -\log(h_\theta(x)) & y = 1 \\ -(\log(1-h_\theta(x))) & y = 0 \end{cases}
Cost(hθ(x), y)={−log(hθ(x))−(log(1−hθ(x)))y=1y=0
这样构建的
C
o
s
t
(
h
θ
(
x
)
,
y
)
Cost(h_\theta(x),y)
Cost(hθ(x),y)函数的特点是:当实际的 ? = 1 且
h
θ
(
x
)
h_\theta(x)
hθ(x)也为 1 时误差为 0,当 ? = 1 但
h
θ
(
x
)
h_\theta(x)
hθ(x)不为 1 时误差随着
h
θ
(
x
)
h_\theta(x)
hθ(x)变小而变大;当实际的 ? = 0 且ℎ?(?)也为 0 时代价为 0,当? = 0 但
h
θ
(
x
)
h_\theta(x)
hθ(x)不为 0 时误差随着
h
θ
(
x
)
h_\theta(x)
hθ(x)的变大而变大。
为了对其进行梯度下降,将其化简为:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
y
log
(
h
θ
(
x
)
)
−
(
1
−
y
)
log
(
1
−
h
θ
(
x
)
)
Cost(h_\theta(x),\ y)=-y\log(h_\theta(x))-(1-y) \log(1-h_\theta(x))
Cost(hθ(x), y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
J ( θ ) = − 1 m ∑ i = 1 m [ y log ( h θ ( x ) ) + ( 1 − y ) log ( 1 − h θ ( x ) ] J(\theta) = -\frac{1}{m}\sum^{m}_{i=1}[y\log(h_\theta(x))+(1-y) \log(1-h_\theta(x)] J(θ)=−m1i=1∑m[ylog(hθ(x))+(1−y)log(1−hθ(x)]
接着对其使用梯度下降,需要对其求偏导。
求导过程:
- 注:可以发现最后的结果和线性回归的代价函数求导结果一样,但其性质完全不同,因为 h θ ( x ) h_\theta(x) hθ(x)的性质不一样。
最终得到梯度下降算法:
R
e
p
e
a
t
{
θ
j
=
θ
j
−
α
1
m
∑
i
=
1
m
[
h
θ
(
x
(
i
)
)
−
y
(
i
)
]
x
j
(
i
)
}
\begin {aligned} Re&peat \{ \\ &\theta_j = \theta_j - \alpha\frac{1}{m}\sum^{m}_{i=1}[h_\theta(x^{(i)})-y^{(i)}]x_j^{(i)}\\ &\} \end {aligned}
Repeat{θj=θj−αm1i=1∑m[hθ(x(i))−y(i)]xj(i)}
多类别分类:一对多
现实中有很多的多类别分类问题。比如判断天气是阴晴雨雪,或者判断邮件由来是家庭、公司或者陌生人。
用不同的编号表示不同的类别(比如 晴是1,阴是2,雨是3,雪是4)
多类别分类的数据集可能会像这样:
解决这种问题可以用一种叫“一对多”(one-vs-all)的算法,是由二元分类推广而来的,有时也叫“一对余(one-vs-rest)”
- 我们先从用三角形代表的类别 1 开始,实际上我们可以创建一个,新的"伪"训练集,类
型 2 和类型 3 定为同一种负类,类型 1 设定为正类,我们创建一个新的训练集。
这样可以得到一个二元分类模型,记为 h θ ( 1 ) ( x ) h_\theta^{(1)}(x) hθ(1)(x)
- 以此类推,得到一系列模型。其中
h
θ
(
i
)
(
x
)
h_\theta^{(i)}(x)
hθ(i)(x)代表的含义为:y = i 的概率,即
P
(
y
=
i
∣
x
;
θ
)
P(y=i|x;\ \theta)
P(y=i∣x; θ)
- 当我们输入一个新的x时,可以得到3个结果,然后我们选择最大的一个,即 max h θ ( i ) ( x ) \max h_\theta^{(i)}(x) maxhθ(i)(x), i i i 即为预测结果。