前言
上文《利用朴素贝叶斯进行分类》
上文的最后部分,通过对朴素贝叶斯公式:
P
(
C
1
∣
x
)
=
P
(
x
∣
C
1
)
P
(
C
1
)
∑
i
=
1
n
P
(
x
∣
C
i
)
⋅
P
(
C
i
)
P\left(\mathrm{C}_{1} | \mathrm{x}\right)=\frac{P\left(\mathrm{x} | \mathrm{C}_{1}\right) P\left(\mathrm{C}_{1}\right)}{\sum_{i=1}^{n} P\left(\mathrm{x} | C_{i}\right) \cdot P\left(C_{i}\right)}
P(C1∣x)=∑i=1nP(x∣Ci)⋅P(Ci)P(x∣C1)P(C1)上下同除分子(考虑这样做的目的大概是为了后续带入高斯分布化简提供便利),将高斯分布带入到贝叶斯公式并进行化简,最终得到如下式子:
这也就是说,可以通过对贝叶斯公式的变形,并根据上面化简后的式子求出
w
w
w 与
b
b
b,进行求出样本
x
x
x 属于某一类别的概率。
同时,这也代表还有另外一种计算
P
(
C
1
∣
x
)
P(C_1|x)
P(C1∣x)的方法——类似于线性回归中使用梯度下降直接求出
w
w
w与
b
b
b,分类问题是否同样可以不去考虑
N
1
,
N
2
,
μ
1
,
μ
2
,
Σ
N_1,N_2,\mu_1,\mu_2,\Sigma
N1,N2,μ1,μ2,Σ,而是对
w
w
w 与
b
b
b 进行直接求解呢?
答案是肯定的。
这种方法就叫做逻辑斯蒂回归(Logistic Regression).
逻辑回归
既然要直接计算
w
w
w 与
b
b
b,因此可以不用考虑两种类别服从不同的分布,而是考虑整体样本,统一使用
f
w
,
b
(
x
)
f_{w, b}(x)
fw,b(x)来表示整体样本服从的分布函数。假设有训练集如下图所示,那么所有样本均服从该分布的概率(极大似然估计的定义)也就是红色圈起来的部分:
我们的目标自然是:
w
∗
,
b
∗
=
arg
max
w
,
b
L
(
w
,
b
)
w^{*}, b^{*}=\arg \max _{w, b} L(w, b)
w∗,b∗=argmaxw,bL(w,b)
这等价于:
w
∗
,
b
∗
=
arg
min
w
,
b
−
ln
L
(
w
,
b
)
w^{*}, b^{*}=\arg \min _{w, b}-\ln L(w, b)
w∗,b∗=argminw,b−lnL(w,b)
为什么使用自然对数函数
log
e
(
L
)
\log_e(L)
loge(L)?我的理解是,这可以将乘法形式化为加法形式,便于推导。
如果将一个类别的输出值表示为
y
^
1
=
1
\hat y_1=1
y^1=1,则另一个类别:
y
^
2
=
0
\hat y_2=0
y^2=0
那么两种不同类别便可以得到统一的表示形式(交叉熵,Cross Entropy):
C
(
f
(
x
n
)
,
y
^
n
)
=
−
[
y
^
n
ln
f
(
x
n
)
+
(
1
−
y
^
n
)
ln
(
1
−
f
(
x
n
)
)
]
C\left(f\left(x^{n}\right), \hat{y}^{n}\right)=-\left[\hat{y}^{n} \ln f\left(x^{n}\right)+\left(1-\hat{y}^{n}\right) \ln \left(1-f\left(x^{n}\right)\right)\right]
C(f(xn),y^n)=−[y^nlnf(xn)+(1−y^n)ln(1−f(xn))]上面的式子其实可以理解为加权数。
因此
对于逻辑斯蒂回归的目标函数同样可以使用梯度下降求最佳的参数
因此关键在于求目标函数对两个参数
w
w
w 和
b
b
b 的偏导
求导的重点在于利用链式法则,举个例子
∂
ln
f
w
,
b
(
x
)
∂
w
i
=
∂
ln
f
w
,
b
(
x
)
∂
z
∂
z
∂
w
i
\frac{\partial \ln f_{w, b}(x)}{\partial w_{i}}=\frac{\partial \ln f_{w, b}(x)}{\partial z} \frac{\partial z}{\partial w_{i}}
∂wi∂lnfw,b(x)=∂z∂lnfw,b(x)∂wi∂z
求偏微分后惊奇的发现,逻辑斯蒂回归中的
w
w
w 和
b
b
b 竟然与线性回归中的完全一样!
amazing!
这也就意味着,我们可以使用相同的代码完成线性回归和逻辑斯蒂回归两种操作,需要改变的仅仅是模型
f
w
,
b
(
x
)
f_{w,b}(x)
fw,b(x)的函数——由简单的
(
w
x
+
b
)
(wx+b)
(wx+b)套上个simoid函数,变为下式即可:
1
1
+
e
−
(
w
x
+
b
)
\frac{1}{1+e^{-{(wx+b)}}}
1+e−(wx+b)1
对于多分类问题,只需将sigmoid函数变为softmax函数,其模型如下:
生成模型和判别模型
生成模型利用数学计算得出概率的表达式,从而可以求出样本属于某类的概率;
判别模型是将所有类别统一用一个概率函数表示,利用梯度下降的方法使损失函数(负的极大似然估计)值最小化,从而得出最佳的
w
w
w 与
b
b
b.
很多情况下,判别模型的效果都比生成模型好,这是因为生成模型是基于朴素贝叶斯的,它为了方便计算,默认不同特征之间条件独立,也就是说,
P
(
x
∣
C
1
)
=
P
(
x
1
∣
C
1
)
⋅
P
(
x
2
∣
C
1
)
P(x|C_1)=P(x_1|C_1)·P(x_2|C_1)
P(x∣C1)=P(x1∣C1)⋅P(x2∣C1),而事实上条件很可能是不独立的。
逻辑回归的不足
简单的逻辑回归不能解决线性不可分的分类,下面是一个“异或”的例子
左图中,“异或”被表示在坐标系中,红色和蓝色分别代表不同的两个类别,可以看到,无论如何,都无法用一条直线将红色与蓝色完全隔离成两部分。
右图是对左图的线性变换,是点
x
x
x乘上一个矩阵的结果。此时,横纵坐标相同的点(类别零)均被映射到了
[
1
1
]
T
\left[1\ 1\right]^T
[1 1]T的点,这时的类别一与类别零显然可以被一条直线分隔。
将线性不可分的数据,通过多层的逻辑回归(隐藏层)做特征转换,在最后即可输出为正确的分类。
神经网络,深度学习!