Logistic回归是一种广义的线性回归分析模型。它是一种分类方法,可以适用于二分类问题,也可以适用于多分类问题,但是二分类的更为常用,也更加容易解释。实际中最为常用的就是二分类的logistic回归,常用于数据挖掘,疾病自动诊断,经济预测等领域。
用于两分类问题。其基本思想为:
a. 寻找合适的假设函数,即分类函数,用以预测输入数据的判断结果;
b. 构造代价函数,即损失函数,用以表示预测的输出结果与训练数据的实际类别之间的偏差;
c. 最小化代价函数,从而获取最优的模型参数。
1. 分类问题
我们讨论的是要预测的变量y是一个离散情况下的分类问题。
分类问题中,我们尝试预测的是结果是否属于某一个类。分类问题的例子有:判断一封电子邮件是否是垃圾邮件; 判断一次金融交易是否是欺计;判断一个肿瘤是恶性的还是良性的。
我们预测的变量
y
∈
{
0
,
1
}
y \in\{0,1\}
y∈{0,1},其中 0 表示负类 (Negative class),1表示正类 (Positive class) 。
Logistic回归算法是一种分类算法,它适用于标签取值离散的情况,它的输出值永远在0到1之间。
不推荐将线性回归用于分类问题,线性回归模型的预测值可超越[0,1]范围。
2. 假设表示
对于分类问题, 我们需要输出0或1,我们可以预测:
当
h
θ
(
x
)
⩾
0.5
h_{\theta}(x) \geqslant 0.5
hθ(x)⩾0.5 时, 预测
y
=
1
y=1
y=1 。
当
h
θ
(
x
)
⩽
0.5
h_{\theta}(x) \leqslant 0.5
hθ(x)⩽0.5 时, 预测
y
=
0
y=0
y=0 。
Logistic回归模型的假设函数是
h
θ
(
x
)
=
g
(
θ
T
X
)
h_{\theta}(x)=g\left(\theta^{T} X\right)
hθ(x)=g(θTX), 其中
X
X
X 代表特征向量,
g
g
g 代表Logistic函数。一个常用的Logistic函数为S形函数 (Sigmoid function) , 公式为
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) 的作用是:对于给定的输入变量 x x x, 根据选择的参数计算输出变量 y = 1 y=1 y=1 的可能性 (estimated probablity), 即 h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_{\theta}(x)=P(y=1 \mid x ; \theta) hθ(x)=P(y=1∣x;θ), 所以有 P ( y = 0 ∣ x ; θ ) + P ( y = P(y=0 \mid x ; \theta)+P(y= P(y=0∣x;θ)+P(y= 1 ∣ x ; θ ) = 1 1 \mid x ; \theta)=1 1∣x;θ)=1。
3. 决策边界
决策边界分为线性决策边界 (Linear decision boundary) 和非线性决策边界 (Non-linear decision boundary)。下图为线性决策边界的例子,红色代表正类, 蓝色代表负类, 其中参数 θ \theta θ 为向量 [ [ [-3 1 1 ] ] ], 则当 − 3 + x 1 + x 2 ⩾ 0 -3+x_{1}+x_{2} \geqslant 0 −3+x1+x2⩾0, 即 x 1 + x 2 ⩾ 3 x_{1}+x_{2} \geqslant 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的区域分隔开。
下图为非线性决策边界的例子,其中参数 0 为向量[-1 0 0 1 1], 则当
−
1
+
x
1
2
+
x
2
2
⩾
0
-1+x_{1}^{2}+x_{2}^{2} \geqslant 0
−1+x12+x22⩾0, 即
x
1
2
+
x
2
2
⩾
1
x_{1}^{2}+x_{2}^{2} \geqslant 1
x12+x22⩾1 时, 模型将预测
y
=
1
y=1
y=1 。我们可以绘制圆心在原点且半径为1的圆形
x
1
2
+
x
2
2
=
1
x_{1}^{2}+x_{2}^{2}=1
x12+x22=1, 它 能将预测为1的区域和预测为0的区域分隔开。
决策边界是假设函数的一个属性,我们可以用非常复杂的模型来适应非常复杂形状的决策边界。
4. 代价函数
定义Logistic回归的代价函数为:
J ( θ ) = 1 m ∑ i = 1 m Cost ( h θ ( x ( i ) ) , y ( i ) ) J(\theta)=\frac{1}{m} \sum_{i=1}^{m} \operatorname{Cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right) J(θ)=m1∑i=1mCost(hθ(x(i)),y(i))
其中
Cost
(
h
θ
(
x
)
,
y
)
=
{
−
log
(
h
θ
(
x
)
)
,
if
y
=
1
−
log
(
1
−
h
θ
(
x
)
)
,
if
y
=
0
\operatorname{Cost}\left(h_{\theta}(x), y\right)=\left\{\begin{array}{ll}-\log \left(h_{\theta}(x)\right), & \text { if } y=1 \\ -\log \left(1-h_{\theta}(x)\right), & \text { if } y=0\end{array}\right.
Cost(hθ(x),y)={−log(hθ(x)),−log(1−hθ(x)), if y=1 if y=0
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 与
Cost
(
h
θ
(
x
)
,
y
)
\operatorname{Cost}\left(h_{\theta}(x), y\right)
Cost(hθ(x),y) 之间的关系如下图所示。
Cost
(
h
θ
(
x
)
,
y
)
\operatorname{Cost}\left(h_{\theta}(x), y\right)
Cost(hθ(x),y) 函数的特点是:
如上图 a)所示,当实际的
y
=
0
y=0
y=0 且预测的
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 也为0时代价为 0,当
y
=
0
y=0
y=0 但
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 不为0时误差随着
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 变大而变大;
如上图 b)所示,当实际的
y
=
1
y=1
y=1 且预测的
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 也为1时误差为 0 , 当
y
=
1
y=1
y=1 但
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 不为1时误差随着
h
θ
(
x
)
h_{\theta}(x)
hθ(x) 变小而变大。
Cost
(
h
θ
(
x
)
,
y
)
\operatorname{Cost}\left(h_{\theta}(x), y\right)
Cost(hθ(x),y) 函数也可以写成如下的式子:
Cost
(
h
θ
(
x
)
,
y
)
=
−
y
×
log
(
h
θ
(
x
)
)
−
(
1
−
y
)
×
log
(
1
−
h
θ
(
x
)
)
\operatorname{Cost}\left(h_{\theta}(x), y\right)=-y \times \log \left(h_{\theta}(x)\right)-(1-y) \times \log \left(1-h_{\theta}(x)\right)
Cost(hθ(x),y)=−y×log(hθ(x))−(1−y)×log(1−hθ(x))
那么 Logisitic回归的代价函数为
J
(
θ
)
=
1
m
∑
i
=
1
m
Cost
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
×
log
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
×
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
J(\theta)=\frac{1}{m} \sum_{i=1}^{m} \operatorname{Cost}\left(h_{\theta}\left(x^{(i)}\right), y^{(i)}\right)=-\frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} \times \log \left(h_{\theta}\left(x^{(i)}\right)\right)+\left(1-y^{(i)}\right) \times \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]
J(θ)=m1i=1∑mCost(hθ(x(i)),y(i))=−m1i=1∑m[y(i)×log(hθ(x(i)))+(1−y(i))×log(1−hθ(x(i)))]
5. 梯度下降
为了拟合出参数, 我们需要最小化代价函数, 找到尽量让
J
(
θ
)
J(\theta)
J(θ) 取得最小值的参数
θ
\theta
θ, 所用的方法是梯度下降法
梯度下降法的实现
Repeat
{
θ
j
:
=
θ
j
−
α
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
}
(Simultaneously update all
θ
j
)
\text { Repeat } \left.\left\{\theta_{j}:=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)}\right\} \quad \text { (Simultaneously update all } \theta_{j}\right)
Repeat {θj:=θj−αm1i=1∑m(hθ(x(i))−y(i))xj(i)} (Simultaneously update all θj)
6. 高级优化
一些更高级的优化算法有:共轭梯度法、BFGS 和L-BFGS 等。
优点:一个是通常不需要手动选择学习率,它们有一个智能内循环(线性搜索算法),可以自动尝试不同的学习速率
α
\alpha
α并自动选择一个好的学习速率,它们甚至可以为每次迭代选择不同的学习速率,那么我们就不需要自己选择。还有一个是它们经常快于梯度下降算法。
缺点:过于复杂
7. 多类别分类
如何使用 Logisitic回归来解决多类别分类的问题。
对于一个多类分类问题,我们的数据集看起来可能会像下图 b)所示,而下图 a)是我们之前讨论的二元分类问题的数据集。
我们用3种不同的符号来代表3个类别,可以使用"一对多"方法来进行分类。
现在我们有一个下图所示的训练集,共有3个类别,我们用三角形表示
y
y
y=1,方框表示
y
y
y= 2,叉表示
y
y
y = 3。我们下面要做的就是使用一个训练集,将其分成3个二元分类问题。
我们先从用三角形代表的类别1开始,实际上我们可以创建一个新的"伪"训练集,类型2和类型3定为负类,类型1设定为正类,我们创建一个新的训练集,如图7所示,我们要拟合出一个合适的分类器。
为了能实现这样的转变, 我们将多个类别中的一个类标记为正类
(
y
=
1
)
(y=1)
(y=1), 然后将其他所有类都标记为负类, 这个模型记作
h
θ
(
1
)
(
x
)
h_{\theta}^{(1)}(x)
hθ(1)(x) ;
接着, 类似地第我们选择另一个类标记为正类
(
y
=
2
)
(y=2)
(y=2), 再将其它类都标记为负类, 将这个模型记作
h
θ
(
2
)
(
x
)
h_{\theta}^{(2)}(x)
hθ(2)(x);
依此类推,最后我们得到一系列的模型简记为:
h
θ
(
i
)
(
x
)
=
p
(
y
=
i
∣
x
;
θ
)
h_{\theta}^{(i)}(x)=p(y=i \mid x ; \theta)
hθ(i)(x)=p(y=i∣x;θ), 其中
i
=
1
,
2
,
…
,
k
i=1,2, \ldots, k
i=1,2,…,k
最后,在我们需要做预测时,我们将所有的分类机都运行一遍, 然后对每一个输入变量,都选择可能性最高的输出变量。 在分类时,我们要做的就是训练这个逻辑回归分类器 h θ ( i ) ( x ) h_{\theta}^{(i)}(x) hθ(i)(x), 其中对应每一个可能的 y = i y=i y=i 。为了做出预测,我们给出输入一 个新的 x x x 值, 用这个值做预测。我们要做的就是在我们三个分类器里面输入 x x x, 然后我们选择一个让 h θ ( i ) ( x ) h_{\theta}^{(i)}(x) hθ(i)(x) 最大的 i i i, 即 max h θ ( i ) ( x ) \max h_{\theta}^{(i)}(x) maxhθ(i)(x)。