前言
其实线性判别器,对于分类问题,若表示在平面上,可以表示为用一个线性函数对目标进行分类。假如待分类目标是图1所示情况,则不能用线性判别器进行分类。
这种情况下需要用到分段直线分类或者二次曲线分类。
阅读了一些文献,对非线性判别器进行了总结。常用的非线性判别器有:
- 分段判别函数;
- 二次判别函数;
- 神经网络;
其中神经网络为较为常用的非线性判别器,也分为前馈神经网络和BP神经网络。
1. 分段判别函数
分段判别函数确定的决策面由多段超平面组成,可以用于逼近各种形状,具有较强的适应能力。大致可表现为上图所示样子。
1.1. 待分类目标为单峰
当待分类目标为单峰时,连接2类目标的峰值顶点,表示在平面上如图2所示:
决策面为两类均值连线的垂直评分面
1.2. 待分类目标为多峰
当代分类目标为多峰时,1个目标类别中选取1个峰值顶点不能完整表示类分布情况,如图3所示:
分段判别器可以表示为多段折现的形式。
- 首先将在一个类别的目标中选出几个峰值顶点,将一个大类分为几个子分类(即,将一个集合分为若干个子集,如图中蓝色区域所示);
- 将不同分类的子类之间的峰值顶点相连接;
- 然后去连接线的法向,取分段超平面,即实现多段判别。
如果用数学语言描述的话,就是:
对于
w
i
w_i
wi类的目标,一共有
K
K
K个峰值顶点,
R
i
R_i
Ri表示的是分类目标的样本区域,
R
i
1
,
R
i
2
.
.
.
.
.
R_i^1,R_i^2.....
Ri1,Ri2.....是子分类目标区域
R
i
=
{
R
i
1
,
R
i
2
,
R
i
3
,
.
.
.
,
R
i
K
i
}
R_i=\{R_i^1,R_i^2,R_i^3,...,R_i^{K_i}\}
Ri={Ri1,Ri2,Ri3,...,RiKi}
μ
i
K
\mu_i^K
μiK为各子分类区域中的各个样本的均值向量,也就是该子分类区域的峰值顶点。
那么在
w
i
w_i
wi类上的判别函数为:
g
i
(
x
)
=
min
K
=
1
,
2
,
.
.
.
,
K
i
∥
x
−
μ
i
K
∥
g_i(x)=\min_{K=1,2,...,K_i}\begin{Vmatrix}x-\mu_i^K\end{Vmatrix}
gi(x)=K=1,2,...,Kimin∥∥x−μiK∥∥
决策规则是:
若
g
j
(
x
)
=
min
i
=
1
,
2
,
3
,
.
.
.
,
K
g
i
(
x
)
则
把
x
归
类
到
w
i
类
若
是
加
以
推
广
,
则
g
i
(
x
)
=
max
K
=
1
,
2
,
3
,
.
.
.
,
K
i
g
i
K
(
x
)
若g_j(x)=\min_{i=1,2,3,...,K}g_i(x)则把x归类到w_i类 \\ 若是加以推广,则g_i(x)=\max_{K=1,2,3,...,K_i}g_i^K(x)
若gj(x)=i=1,2,3,...,Kmingi(x)则把x归类到wi类若是加以推广,则gi(x)=K=1,2,3,...,KimaxgiK(x)
如果是第
i
i
i类的第n个子类和第
j
j
j类的第m个子类相邻,则该段的决策方程是:
g
i
n
(
x
)
=
g
j
m
(
x
)
g_i^n(x)=g_j^m(x)
gin(x)=gjm(x)
需要注意的是:被分类目标的维度必须是一致的,如果不是同一维度,则不能使用此种分类方法!
1.3. 分类器设计思路
设计分段判别器/分类器就是设计判别函数中的各类系数,比如利用样本集来确定一组 w i K w_i^K wiK和 w i 0 K w_{i0}^K wi0K。
- 子类及子类划分已知
即,表示为图3黄色的情况,已经有了明确的划分,就可以把子类看作是独立的类,然后利用多类线性判别的方法将各个子类分类,可以借助聚类分析的方法来解决。 - 子类数已知,但子类划分未知
在设计分段判别器的同时,对子类进行划分。首先对给定子类进行权向量初始化,然后利用训练样本进行迭代训练,按照一定规则修改权重向量。一直训练直到收敛或者达到某收敛阈为止,即可实现利用分段判别器进行有效分类。 - 未知子类数目
如果为止子类数目的话,可以使用一种叫“二分数分段判别器”的算法。大概的过程可以表示为图4所示。
2.二次判别函数
当概率密度函数满足高斯分布或正态分布的情况,贝叶斯决策的分类面是一个二次函数,二次判别函数也是一种比较常用的固定函数类型的分类方法,它确定的决策面是一个抄二次曲面,包括超球面、超椭球面、超双曲面等等。
二次判别函数为:
g
(
x
)
=
x
T
W
x
+
w
T
x
+
w
0
=
∑
k
=
1
d
w
k
k
x
k
2
+
2
∑
j
=
1
d
−
1
∑
k
=
j
+
1
d
w
j
k
x
j
x
k
+
∑
j
=
1
d
w
j
w
j
+
w
0
g(x)=x^TWx+w^Tx+w_0=\sum_{k=1}^dw_{kk}x_k^2+2\sum_{j=1}^{d-1}\sum_{k=j+1}^dw_{jk}x_jx_k+\sum_{j=1}^dw_jw_j+w_0
g(x)=xTWx+wTx+w0=k=1∑dwkkxk2+2j=1∑d−1k=j+1∑dwjkxjxk+j=1∑dwjwj+w0
其中
W
W
W是
d
∗
d
d*d
d∗d的实对称矩阵,
w
w
w是
d
d
d维向量。为确定判别函数
g
(
x
)
g(x)
g(x)需要确定一些系数。
系
数
n
=
1
2
d
(
d
+
3
)
+
1
系数n=\frac{1}{2}d(d+3)+1
系数n=21d(d+3)+1
判别函数为:
g
i
(
x
)
=
K
i
2
−
(
x
−
μ
^
i
)
T
∑
i
−
1
(
x
−
μ
^
i
)
T
其
中
∑
i
=
1
N
i
−
1
∑
x
j
∈
w
j
(
x
j
−
μ
^
i
)
(
x
j
−
μ
^
i
)
T
μ
^
i
=
1
N
i
∑
x
j
∈
w
j
x
j
g
(
x
)
=
g
1
(
x
)
−
g
2
(
x
)
g_i(x)=K_i^2-(x-\hat\mu_i)^T\sum_i^{-1}(x-\hat\mu_i)^T \\ 其中\sum_i=\frac{1}{N_i-1}\sum_{x_j\in w_j}(x_j-\hat\mu_i)(x_j-\hat\mu_i)^T \\ \hat\mu_i=\frac{1}{N_i}\sum_{x_j\in w_j}x_j \\ g(x)=g_1(x)-g_2(x)
gi(x)=Ki2−(x−μ^i)Ti∑−1(x−μ^i)T其中i∑=Ni−11xj∈wj∑(xj−μ^i)(xj−μ^i)Tμ^i=Ni1xj∈wj∑xjg(x)=g1(x)−g2(x)
如果一类聚类,另一类分散,则其中一类的判别函数为:
g
(
x
)
=
K
2
−
(
x
−
μ
^
1
)
T
∑
i
−
1
(
x
−
μ
^
1
)
g(x)=K^2-(x-\hat\mu_1)^T\sum_i^{-1}(x-\hat\mu_1)
g(x)=K2−(x−μ^1)Ti∑−1(x−μ^1)
3. 神经网络
3.1. 概述
单层感知器能够完成线性分类,但是他无法解决非线性的分类问题。
两层感知机可以构成最简单的神经网络,对非线性问题进行分类。
多层感知机组合构成的神经网络,除了输入输出层,中间还有很多隐藏层,各层之间由可修正的权重
w
e
i
g
h
t
weight
weight连接,表示“神经元”之间传递信号的“信号强度”。其中每个“神经元”还有一个偏置项
b
i
a
s
bias
bias。“神经元”的作用是将输入它的信号求加权和,然后经过一个激活函数,当超过阈值时输出,否则信号被抑制。其中激活函数可以是线性函数、阈值函数或者sigmoid函数。神经网络的输出层可以用分类器来连接,输出的结果就是分类的结果。如果信号按照输入层–>隐藏层–>输出层的方向单向传递,则称此神经网络为前馈神经网络。
3.2. BP神经网络
BP神经网络的英文名称为Backpropagation Neural Network,叫反向传播网络,是目前使用比较广泛的神经网络之一。该网络可以学习和储存大量输入输出映射关系,而不用关心映射函数本身(黑箱运行),通过不断迭代训练和反向传播的方式来调整网络的权值和阈值,最终使网络的误差平方和最小。
神经元模仿了生物神经元所具备的几个重要功能:加权、求和、转移。图5为单个神经元的示意图:
BP算法由数据流的前向计算(前向传播)和误差信号的反向传播两个过程构成。正向传播时,传播方向为输入层–>隐藏层–>输出层构成,且每层神经元的状态只影响下一层神经元。如果输出层得不到想要的输出,就会反向传递误差信号来调整权重。BP算法调整每层的权重来减小全局误差,使输出结果为预期的结果。
全局误差为:
E
=
1
2
∑
p
=
1
p
∑
j
=
1
m
(
t
j
p
−
y
j
p
)
2
=
∑
p
=
1
p
E
p
E=\frac{1}{2}\sum_{p=1}^p\sum_{j=1}^m(t_j^p-y_j^p)^2=\sum_{p=1}^pE_p
E=21p=1∑pj=1∑m(tjp−yjp)2=p=1∑pEp
第
i
i
i和
j
j
j层权重可以表示为:
Δ
w
i
j
=
−
η
∂
E
∂
w
i
j
=
−
∑
p
=
1
p
(
η
∂
E
p
∂
w
i
j
)
\Delta w_{ij}=-\eta \frac{\partial E}{\partial w_{ij}}=-\sum_{p=1}^p(\eta \frac{\partial E_p}{\partial w_{ij}})
Δwij=−η∂wij∂E=−p=1∑p(η∂wij∂Ep)
η
\eta
η就是学习率
权值调整还可以使用动量法:
Δ
W
(
n
)
=
−
η
∇
E
(
n
)
+
α
Δ
W
(
n
−
1
)
,
α
是
动
量
系
数
(
α
∈
(
0
,
0.9
)
)
,
η
是
学
习
率
(
η
∈
(
0.001
,
10
)
)
\Delta W(n)=-\eta \nabla E(n)+\alpha \Delta W(n-1),\\ \alpha 是动量系数(\alpha \in (0,0.9)),\\ \eta 是学习率(\eta \in (0.001,10))
ΔW(n)=−η∇E(n)+αΔW(n−1),α是动量系数(α∈(0,0.9)),η是学习率(η∈(0.001,10))
将上一次权值调整量的一部分叠加到按本次误差计算所得的权值调整量上作为本次的实际权值调整量。
另外,跑过程序的同学都知道,如果在训练时学习率一直不变,则训练的结果不会是最好的,所以在训练的过程中还应该时不时得调整学习率
η
\eta
η。起初的学习率设置大一点,然后随着训练过程的进行,及时减少
η
\eta
η的值,直到收敛(或者进入一个收敛阈内)。
将动量法和自适应学习率调整相结合,可以在一定程度上缩短BP算法的训练时间,并提升分类准确率。