逻辑回归模型(Logistic Regression)
动机与目的
逻辑回归主要用于分类问题(预测目标是类别型变量),介绍逻辑回归前,我们先了解下为什么不能用回归模型进行分类问题的处理?
一个例子:
有一批数据,
x
x
x代表肿瘤大小,
y
y
y代表是否是恶性肿瘤(是为1,不是为0)
x ( c m ) x(cm) x(cm) | y y y |
---|---|
10 | 0 |
15 | 0 |
20 | 0 |
25 | 0 |
45 | 1 |
50 | 1 |
55 | 1 |
60 | 1 |
150 | 1 |
当数据 x ≤ 150 x\le150 x≤150时,我们可以用线性回归拟合一个模型(蓝线),当该模型的预测结果 y ^ ≥ 0.5 \hat{y}\ge0.5 y^≥0.5时就预测1,否则预测0,模型可以较好区分数据,但如果出现一个 x ≥ 150 x\ge150 x≥150的数据,此时拟合的模型(绿线)通过 y ^ ≥ 0.5 \hat{y}\ge0.5 y^≥0.5时预测为1,否则为0就不能很好区分所有数据。可以看到线性回归模型用于分类时的局限性:
- 对待异常值不稳定性极大
- 预测值 y ^ \hat{y} y^与结果1和0没有明显对应关系(下图中绿线 x x x越大, y y y越大)
模型解释
逻辑回归模型:
f
w
⃗
,
b
(
x
⃗
)
=
1
1
+
e
−
(
w
⃗
⋅
x
⃗
+
b
)
f_{\vec{w},b }(\vec{x})= \frac{1}{1+e^{-(\vec{w}\cdot \vec{x}+b)} }
fw,b(x)=1+e−(w⋅x+b)1
其实就是在原来线性回归模型
z
⃗
=
w
⃗
⋅
x
⃗
+
b
\vec{z}=\vec{w}\cdot\vec{x}+b
z=w⋅x+b上套上一个sigmoid函数
f
(
z
⃗
)
=
1
1
+
e
−
z
⃗
f(\vec{z})= \frac{1}{1+e^{-\vec{z}}}
f(z)=1+e−z1,这样输出的值范围就落在了0-1的范围内(如下图左所示),完美的将二分类问题转为成了概率问题,所以通常逻辑回归也可以写成
f
w
⃗
,
b
(
x
⃗
)
=
P
(
y
=
1
∣
x
⃗
;
w
⃗
,
b
)
f_{\vec{w},b }(\vec{x})=P(y=1|\vec{x};\vec{w},b)
fw,b(x)=P(y=1∣x;w,b)。
决策边界
如下图所示,可以看到当
z
≥
0
z\ge0
z≥0时,
y
^
\hat{y}
y^输出为1(以0.5为阈值),当
z
≤
0
z\le0
z≤0时,
y
^
\hat{y}
y^输出为0。此时我们可以将
z
⃗
=
w
⃗
⋅
x
⃗
+
b
=
0
\vec{z}=\vec{w}\cdot\vec{x}+b=0
z=w⋅x+b=0称为决策边界。对于二分类问题而言决策边界可以推广到任意情况,因为任意二分类模型都可以在回归模型
z
z
z(不一定线性)的外面套上相应的分类函数
g
(
z
)
g(z)
g(z),此时当回归模型
z
=
0
z=0
z=0时就是该分类问题的决策边界(如对圆形数据划分)。
代价函数(Cost Function)
因为逻辑回归模型是非线性的,所以对应的代价函数如果采用最小平方损失(squared error cost)的话得到的函数是非凸的(non-convex),梯度下降无法求解。所以我们需要找到一个使代价函数为凸函数的方法。由此定义逻辑回归的损失函数Loss Function(代价函数是所有数据损失函数的求和):
L
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
,
y
(
i
)
)
=
{
−
l
o
g
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
)
if
y
(
i
)
=
1
−
l
o
g
(
1
−
f
w
⃗
,
b
(
x
⃗
(
i
)
)
)
if
y
(
i
)
=
0
{\color{red}L(f_{\vec{w},b }(\vec{x}^{(i)}),y^{(i)})}= \begin{cases}-log(f_{\vec{w},b }(\vec{x}^{(i)}))& \text{ if } y^{(i)} = 1\\-log(1-f_{\vec{w},b }(\vec{x}^{(i)}))& \text{ if } y^{(i)} = 0\\ \end{cases}
L(fw,b(x(i)),y(i))={−log(fw,b(x(i)))−log(1−fw,b(x(i))) if y(i)=1 if y(i)=0
直观理解:
-
当 y ( i ) = 1 y^{(i)} = 1 y(i)=1时,损失函数如图下粉色部分所示,当预测模型(逻辑回归模型) y ^ = f \hat{y}=f y^=f越接近1时候 L o s s Loss Loss才会更小;
-
当 y ( i ) = 0 y^{(i)} = 0 y(i)=0时,损失函数如图下粉色部分所示,当预测模型(逻辑回归模型) y ^ = f \hat{y}=f y^=f越接近0时候 L o s s Loss Loss才会更小。
进一步我们可以将损失函数简化为(代入 y y y的值与上面就是等价): L ( f w ⃗ , b ( x ⃗ ( i ) ) , y ( i ) ) = − y ( i ) l o g ( f w ⃗ , b ( x ⃗ ( i ) ) ) − ( 1 − y ( i ) ) l o g ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) {\color{red}L(f_{\vec{w},b }(\vec{x}^{(i)}),y^{(i)})}=-y^{(i)}log(f_{\vec{w},b }(\vec{x}^{(i)})) -(1-y^{(i)})log(1-f_{\vec{w},b }(\vec{x}^{(i)})) L(fw,b(x(i)),y(i))=−y(i)log(fw,b(x(i)))−(1−y(i))log(1−fw,b(x(i)))
所以代价函数为:
J
(
w
⃗
,
b
)
=
1
m
∑
i
=
1
m
L
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
,
y
(
i
)
)
J(\vec{w},b)=\frac{1}{m}\sum_{i=1}^{m}{\color{red}L(f_{\vec{w},b }(\vec{x}^{(i)}),y^{(i)})}
J(w,b)=m1i=1∑mL(fw,b(x(i)),y(i))
=
−
1
m
∑
i
=
1
m
[
y
(
i
)
l
o
g
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
f
w
⃗
,
b
(
x
⃗
(
i
)
)
)
]
=-\frac{1}{m}\sum_{i=1}^{m}{\left [ y^{(i)}log(f_{\vec{w},b }(\vec{x}^{(i)})) +(1-y^{(i)})log(1-f_{\vec{w},b }(\vec{x}^{(i)})) \right ] }
=−m1i=1∑m[y(i)log(fw,b(x(i)))+(1−y(i))log(1−fw,b(x(i)))]
这个函数来源于统计学中的最大似然估计(Maximum Likelihood Estimate)。
最大似然估计理解:
原数据对应的预测模型可以用概率形式表示:
p
(
y
=
1
∣
x
⃗
;
w
⃗
,
b
)
=
h
θ
(
x
)
p(y=1|\vec{x};\vec{w},b)=h_{\theta}(x)
p(y=1∣x;w,b)=hθ(x)
p
(
y
=
0
∣
x
⃗
;
w
⃗
,
b
)
=
1
−
h
θ
(
x
)
p(y=0|\vec{x};\vec{w},b)=1-h_{\theta}(x)
p(y=0∣x;w,b)=1−hθ(x)
这里
θ
\theta
θ为参数
w
⃗
,
b
\vec{w},b
w,b,上式可合并为(代入
y
y
y):
p
(
y
∣
x
⃗
;
w
⃗
,
b
)
=
h
θ
(
x
)
y
∗
(
1
−
h
θ
(
x
)
)
1
−
y
p(y|\vec{x};\vec{w},b)=h_{\theta}(x)^{y}*(1-h_{\theta}(x))^{1-y}
p(y∣x;w,b)=hθ(x)y∗(1−hθ(x))1−y最大似然估计就是求使总的概率
P
P
P达到最大值时概率
h
θ
(
x
)
h_{\theta}(x)
hθ(x)的值(可以理解为现有的数据是从一个概率分布中以概率最大的方式生成的。比如一个袋子有黑球和白球,从中抽取10次,抽到6次黑球,4次白球,假设抽到黑球的概率为
p
p
p,那么10次抽球结果的总的概率可以表示为
P
=
p
6
∗
(
1
−
p
)
4
P=p^6*(1-p)^4
P=p6∗(1−p)4,观测到的结果可以认为是以最大概率产生的结果,那么求解
p
p
p的值就可以取
m
a
x
P
max P
maxP时对应的
p
p
p值。这里的
p
p
p对应上面的
h
θ
(
x
)
h_{\theta}(x)
hθ(x),黑球对应为
y
=
1
y=1
y=1,白球则是
y
=
0
y=0
y=0)。
所以观测数据生成的总概率
P
P
P可以表示为:
L
(
θ
)
=
∏
i
=
1
m
h
θ
(
x
i
)
y
i
∗
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
i
L(\theta)=\prod_{i=1}^{m}h_{\theta}(x^{i})^{y^{i}}*(1-h_{\theta}(x^(i)))^{1-y^{i}}
L(θ)=∏i=1mhθ(xi)yi∗(1−hθ(x(i)))1−yi,为了方便求解,两边取对数(不改变最值方向)
l
o
g
L
(
θ
)
=
∑
i
=
1
m
y
i
l
o
g
(
h
θ
(
x
i
)
)
+
(
1
−
y
i
)
l
o
g
(
1
−
h
θ
(
x
i
)
)
logL(\theta)=\sum_{i=1}^{m}y^{i}log(h_{\theta}(x^{i}))+({1-y^{i})log(1-h_{\theta}(x^i))}
logL(θ)=i=1∑myilog(hθ(xi))+(1−yi)log(1−hθ(xi))
最大似然估计求的是最大值,我们可以转变为用梯度下降算法求以下函数最小值
m
i
n
J
min J
minJ,所以这里可以将代价函数
J
J
J定义为(这个转化对求解参数是等价的)
J
(
θ
)
=
−
1
m
l
o
g
L
(
θ
)
=
−
1
m
∑
i
=
1
m
[
y
i
l
o
g
(
h
θ
(
x
i
)
)
+
(
1
−
y
i
)
l
o
g
(
1
−
h
θ
(
x
i
)
)
]
J(\theta)=-\frac{1}{m}logL(\theta)=-\frac{1}{m}\sum_{i=1}^{m}\left [y^{i}log(h_{\theta}(x^{i}))+({1-y^{i})log(1-h_{\theta}(x^i))}\right ]
J(θ)=−m1logL(θ)=−m1i=1∑m[yilog(hθ(xi))+(1−yi)log(1−hθ(xi))]
- 加上负号改变最值方向
- 除以m不改变 h θ ( x i ) h_{\theta}(x^{i}) hθ(xi)结果,方便评估平均损失
通过最大似然估计构造的代价函数和最初构造的代价函数是一样的。
运用梯度下降算法求解逻辑回归参数( w , b w,b w,b)
-
构造代价函数 J ( w ⃗ , b ) = − 1 m ∑ i = 1 m [ y ( i ) l o g ( f w ⃗ , b ( x ⃗ ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) ] J(\vec{w},b)=-\frac{1}{m}\sum_{i=1}^{m}{\left [ y^{(i)}log(f_{\vec{w},b }(\vec{x}^{(i)})) +(1-y^{(i)})log(1-f_{\vec{w},b }(\vec{x}^{(i)})) \right ] } J(w,b)=−m1i=1∑m[y(i)log(fw,b(x(i)))+(1−y(i))log(1−fw,b(x(i)))],其中 f w ⃗ , b ( x ⃗ ) = 1 1 + e − ( w ⃗ ⋅ x ⃗ + b ) f_{\vec{w},b }(\vec{x})= \frac{1}{1+e^{-(\vec{w}\cdot \vec{x}+b)} } fw,b(x)=1+e−(w⋅x+b)1
-
求 w j w_{j} wj和 b b b对应的偏导数(梯度) ∂ J ( w ⃗ , b ) ∂ w j = 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) , ∂ J ( w ⃗ , b ) ∂ b = 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) \frac{\partial J(\vec{w},b)}{\partial w_{j}}=\frac{1}{m}\sum_{i=1}^{m}({\color{red} f_{\vec{w},b}(\vec{x}^{(i)})} -y^{(i)})x_{j}^{(i)},\frac{\partial J(\vec{w},b)}{\partial b}=\frac{1}{m}\sum_{i=1}^{m}({\color{red} f_{\vec{w},b}(\vec{x}^{(i)})} -y^{(i)}) ∂wj∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i))xj(i),∂b∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i))推导:
∂ J ( w ⃗ , b ) ∂ w j = − 1 m ∑ i = 1 m [ y ( i ) f w ⃗ , b ( x ⃗ ( i ) ) − 1 − y ( i ) 1 − f w ⃗ , b ( x ⃗ ( i ) ) ] ∂ f w ⃗ , b ( x ⃗ ( i ) ) ∂ w j \frac{\partial J(\vec{w},b)}{\partial w_{j}}=-\frac{1}{m}\sum_{i=1}^{m}{\left [ \frac{y^{(i)}}{f_{\vec{w},b }(\vec{x}^{(i)})} -\frac{1-y^{(i)}}{1-f_{\vec{w},b }(\vec{x}^{(i)})} \right ]\frac{\partial f_{\vec{w},b }(\vec{x}^{(i)})}{\partial w_j} } ∂wj∂J(w,b)=−m1∑i=1m[fw,b(x(i))y(i)−1−fw,b(x(i))1−y(i)]∂wj∂fw,b(x(i))
= − 1 m ∑ i = 1 m [ y ( i ) f w ⃗ , b ( x ⃗ ( i ) ) − 1 − y ( i ) 1 − f w ⃗ , b ( x ⃗ ( i ) ) ] f w ⃗ , b ( x ⃗ ( i ) ) ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) ∗ x j ( i ) =-\frac{1}{m}\sum_{i=1}^{m}{\left [ \frac{y^{(i)}}{f_{\vec{w},b }(\vec{x}^{(i)})} -\frac{1-y^{(i)}}{1-f_{\vec{w},b }(\vec{x}^{(i)})} \right ]f_{\vec{w},b }(\vec{x}^{(i)})}(1-f_{\vec{w},b }(\vec{x}^{(i)}))*x_j^{(i)} =−m1∑i=1m[fw,b(x(i))y(i)−1−fw,b(x(i))1−y(i)]fw,b(x(i))(1−fw,b(x(i)))∗xj(i)
= − 1 m ∑ i = 1 m [ y ( i ) ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) − ( 1 − y ( i ) ) f w ⃗ , b ( x ⃗ ( i ) ) ] ∗ x j ( i ) =-\frac{1}{m}\sum_{i=1}^{m}{\left [y^{(i)}(1-f_{\vec{w},b }(\vec{x}^{(i)})) - (1-y^{(i)})f_{\vec{w},b }(\vec{x}^{(i)}) \right ]} * x_j^{(i)} =−m1∑i=1m[y(i)(1−fw,b(x(i)))−(1−y(i))fw,b(x(i))]∗xj(i)
= 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) =\frac{1}{m}\sum_{i=1}^{m}({\color{red} f_{\vec{w},b}(\vec{x}^{(i)})} -y^{(i)})x_{j}^{(i)} =m1∑i=1m(fw,b(x(i))−y(i))xj(i)
同理可推导出 b b b的偏导数。
补充:
∂ f w ⃗ , b ( x ⃗ ( i ) ) ∂ w j = ( 1 1 + e − ( w ⃗ ⋅ x ⃗ ( i ) + b ) ) ′ \frac{\partial {\color{red} f_{\vec{w},b}(\vec{x}^{(i)})} }{\partial w_j}=({\frac{1}{1+e^{-(\vec{w}\cdot \vec{x}^{(i)}+b)} }})' ∂wj∂fw,b(x(i))=(1+e−(w⋅x(i)+b)1)′
= − − e − ( w ⃗ ⋅ x ⃗ ( i ) + b ) ∗ x j ( i ) ( 1 + e − ( w ⃗ ⋅ x ⃗ ( i ) + b ) ) 2 =-\frac{-e^{-(\vec{w}\cdot \vec{x}^{(i)}+b)}*x_j^{(i)}}{(1+e^{-(\vec{w}\cdot \vec{x}^{(i)}+b)})^2} =−(1+e−(w⋅x(i)+b))2−e−(w⋅x(i)+b)∗xj(i)
= 1 1 + e − ( w ⃗ ⋅ x ⃗ ( i ) + b ) ∗ ( 1 − 1 1 + e − ( w ⃗ ⋅ x ⃗ ( i ) + b ) ) ∗ x j ( i ) ={\frac{1}{1+e^{-(\vec{w}\cdot \vec{x}^{(i)}+b)} }}*(1-{\frac{1}{1+e^{-(\vec{w}\cdot \vec{x}^{(i)}+b)} }})*x_j^{(i)} =1+e−(w⋅x(i)+b)1∗(1−1+e−(w⋅x(i)+b)1)∗xj(i)
= f w ⃗ , b ( x ⃗ ( i ) ) ( 1 − f w ⃗ , b ( x ⃗ ( i ) ) ) ∗ x j ( i ) =f_{\vec{w},b}(\vec{x}^{(i)})(1-f_{\vec{w},b}(\vec{x}^{(i)}))*x_j^{(i)} =fw,b(x(i))(1−fw,b(x(i)))∗xj(i) -
运用梯度下降算法迭代求解,先随机设置 w j w_{j} wj和 b b b的值,然后更新所有 w j , b w_{j},b wj,b t m p w j = w j − α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) x j ( i ) , j = 1 , 2 , 3 , . . . , n tmpw_{j} = w_{j}-\alpha \frac{1}{m}\sum_{i=1}^{m}({\color{red} f_{\vec{w},b}(\vec{x}^{(i)})} -y^{(i)})x_{j}^{(i)},j=1,2,3,...,n tmpwj=wj−αm1i=1∑m(fw,b(x(i))−y(i))xj(i),j=1,2,3,...,n t m p b = b − α 1 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) tmpb = b-\alpha\frac{1}{m}\sum_{i=1}^{m}({\color{red} f_{\vec{w},b}(\vec{x}^{(i)})} -y^{(i)}) tmpb=b−αm1i=1∑m(fw,b(x(i))−y(i))update w j = t m p w j , b = t m p b {\color{red} w_{j}=tmpw_{j},b=tmpb} wj=tmpwj,b=tmpb
-
每次迭代后观察 J J J是否收敛,如果达到收敛,则此时对应的 w ⃗ \vec{w} w和 b b b的值就是逻辑回归模型的最优参数,随着迭代次数的增加,Cost J J J会逐渐收敛到一个固定值。