逻辑回归需要用到sigmoid函数将结果缩放到0-1之间,越接近+1越是正例,越接近0越是负例,根据中间0.5分为二类,所以逻辑回归是一个做二分类的算法,但它也可以做多分类,其方式就是把多分类拆分成多个二分类的形式来做。sigmoid函数的公式为:
1
1
+
e
−
z
\frac{1}{1+e^{-z}}
1+e−z1代入逻辑回归后的公式为:
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
e
−
θ
T
x
h_θ(x)=g(θ^Tx)=\frac{1}{e^{-θ^Tx}}
hθ(x)=g(θTx)=e−θTx1
2.逻辑回归损失函数的推导:
依旧用到最大似然估计思想,依旧假设样本相互独立,依旧对似然函数取对数log,因此:
每
条
样
本
预
测
正
确
的
概
率
:
P
(
正
确
)
=
(
g
(
w
,
x
i
)
)
y
i
∗
(
1
−
g
(
w
,
x
i
)
)
1
−
y
i
每条样本预测正确的概率:P(正确)=(g(w,x_i))^{y_i}*(1-g(w,x_i))^{1-y_i}
每条样本预测正确的概率:P(正确)=(g(w,xi))yi∗(1−g(w,xi))1−yi
用
h
θ
(
x
i
)
代
替
g
(
w
,
x
i
)
,
似
然
函
数
表
达
式
:
L
(
θ
)
=
∏
i
=
1
m
(
h
θ
(
x
i
)
)
y
i
(
1
−
h
θ
(
x
i
)
)
1
−
y
i
用h_θ(x_i)代替g(w,x_i),似然函数表达式:L(θ)=\prod^{m}_{i=1}(h_θ(x_i))^{y_i}(1-h_θ(x_i))^{1-y_i}
用hθ(xi)代替g(w,xi),似然函数表达式:L(θ)=i=1∏m(hθ(xi))yi(1−hθ(xi))1−yi
用
对
数
似
然
将
连
乘
变
成
连
加
,
并
且
为
了
对
该
损
失
求
最
小
,
给
该
公
式
加
上
负
号
,
得
到
:
用对数似然将连乘变成连加,并且为了对该损失求最小,给该公式加上负号,得到:
用对数似然将连乘变成连加,并且为了对该损失求最小,给该公式加上负号,得到:
J
(
θ
)
=
−
[
∑
i
=
1
m
(
y
i
l
o
g
h
θ
(
x
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
h
θ
(
x
i
)
)
]
J(θ)=-[\sum^m_{i=1}(y_ilogh_θ(x_i)+(1-y_i)log(1-h_θ(x_i))]
J(θ)=−[i=1∑m(yiloghθ(xi)+(1−yi)log(1−hθ(xi))]
简单代码实现一下损失函数:
# 导入numpy
import numpy as np
# 定义sigmoid函数,已知W1 和W2 的情况下,传进来数据的X,返回数据的y_predict
def p_theta_function(features, w1, w2):
z = w1*features[0] + w2*features[1]
return 1 / (1 + np.exp(-z))
# 定义损失函数,需传入一份已知数据的X,y,如果已知W1 和W2 的情况下,计算对应这份数据的Loss损失
def loss_function(X, y, w1, w2):
result = 0
# 遍历数据集中的每一条样本,并且计算每条样本的损失,加到result 身上得到整体的数据集损失
for features, label in zip(X, y):
# 这是计算一条样本的y_predict
p_result = p_theta_function(features, w1, w2)
loss_result = -1*label*np.log(p_result)-(1-label)*np.log(1-p_result)
result += loss_result
return result
对逻辑回归函数求导:
首
先
s
i
g
m
o
i
d
函
数
的
公
式
为
:
g
(
z
)
=
1
1
+
e
−
z
首先sigmoid函数的公式为:g(z)=\frac{1}{1+e^{-z}}
首先sigmoid函数的公式为:g(z)=1+e−z1
可
以
对
s
i
g
m
o
i
d
函
数
求
导
得
到
:
g
‘
(
z
)
=
g
(
z
)
(
1
−
g
(
z
)
)
可以对sigmoid函数求导得到: g^`(z)=g(z)(1-g(z))
可以对sigmoid函数求导得到:g‘(z)=g(z)(1−g(z))
然
后
对
逻
辑
回
归
求
导
并
跳
过
推
导
过
程
得
到
:
δ
δ
θ
j
=
1
m
∑
i
=
1
m
(
h
θ
(
x
i
)
−
y
i
)
x
i
j
然后对逻辑回归求导并跳过推导过程得到:\frac{δ}{δ_{θ_j}}=\frac{1}{m}\sum^{m}_{i=1}(h_θ(x_i)-y_i)x_i^j
然后对逻辑回归求导并跳过推导过程得到:δθjδ=m1i=1∑m(hθ(xi)−yi)xij
softmax回归的公式为:
h
θ
(
x
i
)
=
[
p
(
y
i
)
=
1
∣
x
i
;
θ
)
p
(
y
i
)
=
2
∣
x
i
;
θ
)
.
.
.
p
(
y
i
)
=
k
∣
x
i
;
θ
)
]
=
1
∑
j
=
1
k
e
θ
j
T
x
i
[
e
θ
1
T
x
i
e
θ
2
T
x
i
.
.
.
e
θ
k
T
x
i
]
h_θ(x_i)=\begin{bmatrix} p(y_i)=1|x_i;θ) \\ p(y_i)=2|x_i;θ) \\ ...\\ p(y_i)=k|x_i;θ) \end{bmatrix} = \frac{1}{\sum^k_{j=1}e^{θ^T_jx_i}}\begin{bmatrix} e^{θ^T_1x_i} \\ e^{θ^T_2x_i} \\ ...\\ e^{θ^T_kx_i}\end{bmatrix}
hθ(xi)=⎣⎢⎢⎡p(yi)=1∣xi;θ)p(yi)=2∣xi;θ)...p(yi)=k∣xi;θ)⎦⎥⎥⎤=∑j=1keθjTxi1⎣⎢⎢⎡eθ1Txieθ2Txi...eθkTxi⎦⎥⎥⎤
由此可以看出,softmax回归有多少个类别就有多少组θ参数。
4.逻辑回归与softmax回归的关系
softmax回归依旧是取最大似然估计,然后再取对数似然,最后得到它的损失函数:交叉熵损失函数(CrossEntropy),公式如下:
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
∑
j
=
1
k
1
{
y
i
=
j
}
l
o
g
e
θ
j
T
x
i
∑
l
=
1
k
e
θ
l
T
x
i
J(θ)=-\frac{1}{m}[\sum^m_{i=1}\sum^k_{j=1}1\{y_i=j\}log\frac{e^{θ^T_jx_i}}{\sum^k_{l=1}e^{θ^T_lx_i}}
J(θ)=−m1[i=1∑mj=1∑k1{yi=j}log∑l=1keθlTxieθjTxi