数据集:
{
(
x
i
,
y
i
)
}
i
=
1
m
\{(x_i, y_i)\}_{i=1}^m
{(xi,yi)}i=1m(
m
m
m 个样本)
x
i
x_i
xi 可能是多维(假设有
d
d
d 维)
y
i
y_i
yi 是类别
{
0
,
1
,
2
,
.
.
.
,
k
}
\{0,1,2,...,k\}
{0,1,2,...,k}(分为
k
+
1
k+1
k+1 类)的
O
n
e
H
o
t
OneHot
OneHot 编码
y
i
=
j
y_i=j
yi=j(属于第
j
j
j 类)简称
y
i
j
y_i^j
yij,且
y
i
j
=
[
0
,
0
,
.
.
.
,
1
,
.
.
.
,
0
]
y_i^j=[0,0,...,1,...,0]
yij=[0,0,...,1,...,0](下标
j
j
j 的位置为
1
1
1)
本质
使用归一化
S
o
f
t
M
a
x
SoftMax
SoftMax 函数:
p
=
e
−
(
ω
T
x
+
b
)
∑
j
=
0
k
e
−
(
ω
j
T
x
+
b
j
)
=
e
−
y
∑
j
=
0
k
e
−
y
j
p=\frac{e^{-(\omega^Tx+b)}}{\sum_{j=0}^k e^{-(\omega_j^Tx+b_j)}}=\frac{e^{-y}}{\sum_{j=0}^ke^{-y^j}}
p=∑j=0ke−(ωjTx+bj)e−(ωTx+b)=∑j=0ke−yje−y,将线性回归
y
=
ω
T
x
+
b
y=\omega^Tx+b
y=ωTx+b 与多分类任务
{
0
,
1
,
2
,
.
.
.
,
k
}
\{0,1,2,...,k\}
{0,1,2,...,k} 联系起来,得到了
p
=
e
−
y
∑
j
=
0
k
e
−
y
j
p=\frac{e^{-y}}{\sum_{j=0}^ke^{-y^j}}
p=∑j=0ke−yje−y
通过梯度下降法得到参数
ω
\omega
ω 和
b
b
b(每一类对应一组参数,总共
k
+
1
k+1
k+1 组
ω
\omega
ω 和
b
b
b),代入要分类的样本
x
x
x,计算出对应的
y
y
y 值(相当于该样本的类后验概率
p
(
y
∣
x
)
p(y|x)
p(y∣x),简称属于第
j
j
j 类的后验概率
p
(
y
=
j
∣
x
)
p(y=j|x)
p(y=j∣x) 为
p
j
p^j
pj),并与多个阈值比较,完成分类
与 Logistic 回归的关系(重点)
关系
Logistic 回归是 SoftMax 回归的特殊形式
若
y
∈
{
0
,
1
}
y\in\{0,1\}
y∈{0,1},则
S
o
f
t
M
a
x
SoftMax
SoftMax 函数计算类后验概率
p
(
y
=
0
∣
x
)
=
e
−
y
0
e
−
y
0
+
e
−
y
1
=
1
1
+
e
−
y
1
p(y=0|x)=\frac{e^{-y^0}}{e^{-y^0}+e^{-y^1}}=\frac{1}{1+e^{-y^1}}
p(y=0∣x)=e−y0+e−y1e−y0=1+e−y11,即 Logistic 回归的形式
求导的关系(重点)
便于推导,令
θ
=
(
b
,
ω
)
\theta=(b,\omega)
θ=(b,ω)(
d
+
1
d+1
d+1 维),对应的
x
=
(
1
,
x
)
x=(1,x)
x=(1,x),(也就是增广)
在 Logistic 回归中,我们实际是对
p
0
=
1
1
+
e
−
y
1
=
e
−
y
0
e
−
y
0
+
e
−
y
1
p^0=\frac{1}{1+e^{-y^1}}=\frac{e^{-y^0}}{e^{-y^0}+e^{-y^1}}
p0=1+e−y11=e−y0+e−y1e−y0 中的
θ
=
(
θ
0
,
θ
1
)
\theta=(\theta_0,\theta_1)
θ=(θ0,θ1) 求导,即对每个类对应的一组
θ
\theta
θ 求导,结果再求和,如下
∂
p
0
∂
θ
=
∂
p
0
∂
θ
0
+
∂
p
0
∂
θ
1
=
p
0
(
1
−
p
0
)
+
0
=
p
0
(
1
−
p
0
)
\frac{\partial p^0}{\partial\theta}=\frac{\partial p^0}{\partial\theta_0}+\frac{\partial p^0}{\partial\theta_1}=p^0(1-p^0)+0=p^0(1-p^0)
∂θ∂p0=∂θ0∂p0+∂θ1∂p0=p0(1−p0)+0=p0(1−p0)
于是求导的情况就分为两类:
要计算类后验概率
p
a
p^a
pa,对类
a
a
a 对应的参数
θ
a
\theta_a
θa 求导(如上面的
∂
p
0
∂
θ
0
\frac{\partial p^0}{\partial\theta_0}
∂θ0∂p0)
要计算类后验概率
p
a
p^a
pa,却对类
b
b
b 对应的参数
θ
b
\theta_b
θb 求导(如上面的
∂
p
0
∂
θ
1
\frac{\partial p^0}{\partial\theta_1}
∂θ1∂p0)
损失函数
由于预测结果是多类概率,这里
p
=
[
p
0
,
p
1
,
.
.
.
,
p
k
]
p=[p^0,p^1,...,p^k]
p=[p0,p1,...,pk]
交叉熵损失函数:
J
(
θ
)
=
−
1
m
∑
i
=
1
m
∑
j
=
0
k
[
y
i
j
l
n
p
i
]
J(\theta)=-\frac{1}{m}\sum_{i=1}^m\sum_{j=0}^k[y_i^jlnp_i]
J(θ)=−m1∑i=1m∑j=0k[yijlnpi]
梯度下降法求参数
ω
\omega
ω,
b
b
b
S
o
f
t
M
a
x
SoftMax
SoftMax 函数求导性质:对于
p
a
=
e
−
y
a
∑
j
=
0
k
e
−
y
j
p^a=\frac{e^{-y^a}}{\sum_{j=0}^ke^{-y^j}}
pa=∑j=0ke−yje−ya,有
∂
p
a
∂
y
=
{
p
a
(
1
−
p
a
)
,
y
=
y
a
−
p
a
p
b
,
y
=
y
b
\frac{\partial p^a}{\partial y}=\left\{ \begin{aligned} p^a(1-p^a), && y=y^a\\ -p^ap^b, && y=y^b \end{aligned} \right.
∂y∂pa={pa(1−pa),−papb,y=yay=yb(对应上面求导的两类情况)
求偏导:
∂
J
(
θ
)
∂
θ
=
−
1
m
∑
i
=
1
m
[
y
i
p
i
a
(
1
−
p
i
a
)
x
i
p
i
a
+
∑
j
=
0
,
j
≠
a
k
y
i
j
(
−
p
i
a
p
i
j
)
x
i
p
i
j
]
\frac{\partial J(\theta)}{\partial\theta}=-\frac{1}{m}\sum_{i=1}^m[\frac{y_ip_i^a(1-p_i^a)x_i}{p_i^a}+\sum_{j=0,j\not=a}^k\frac{y_i^j(-p_i^ap_i^j)x_i}{p_i^j}]
∂θ∂J(θ)=−m1∑i=1m[piayipia(1−pia)xi+∑j=0,j=akpijyij(−piapij)xi]
继续:
=
−
1
m
∑
i
=
1
m
[
y
i
a
(
1
−
p
i
a
)
+
∑
j
=
0
,
j
≠
a
k
y
i
j
(
−
p
i
a
)
]
x
i
=-\frac{1}{m}\sum_{i=1}^m[y_i^a(1-p_i^a)+\sum_{j=0,j\not=a}^ky_i^j(-p_i^a)]x_i
=−m1∑i=1m[yia(1−pia)+∑j=0,j=akyij(−pia)]xi
继续:
=
−
1
m
∑
i
=
1
m
[
y
i
a
∑
j
=
0
,
j
≠
a
k
p
i
j
−
p
i
a
∑
j
=
0
,
j
≠
a
k
y
i
j
]
x
i
=-\frac{1}{m}\sum_{i=1}^m[y_i^a\sum_{j=0,j\not=a}^kp_i^j-p_i^a\sum_{j=0,j\not=a}^ky_i^j]x_i
=−m1∑i=1m[yia∑j=0,j=akpij−pia∑j=0,j=akyij]xi ,(注意
1
−
p
i
a
=
∑
j
=
0
,
j
≠
a
k
p
i
j
1-p_i^a=\sum_{j=0,j\not=a}^kp_i^j
1−pia=∑j=0,j=akpij)
得到:
=
1
m
∑
i
=
1
m
[
p
i
−
y
i
j
]
x
i
=\frac{1}{m}\sum_{i=1}^m[p_i-y_i^j]x_i
=m1∑i=1m[pi−yij]xi(与 Logistic 完全一样)
实现
在 jupyter notebook 中代码均可运行
读取鸢尾花数据集
from sklearn import datasets
import numpy as np
iris = datasets.load_iris()#加载鸢尾花数据集
X = iris["data"][:,(2,3)]#花瓣的长,宽
y = iris["target"]
X_with_bias = np.c_[np.ones([len(X),1]), X]#增广矩阵