常见的分类问题分为二分类和多分类,而多分类可以拆解为多个二分类问题。在二分类问题中,分类器对一个的样本的判断为非正即负,分类结果一定是二者之一。
理想情况下,二分类中的每类样本数据要求巨大且相等。但是在现实世界却往往是相反的,在二分类问题中,正负类样本可能是严重失衡,这种情况也有解决的办法,那就是不平衡性学习。而考虑到极端情况,某一类样本少到几乎没有,但是又及其重要时应该如何分类?这就出现了 one class classification。仅有一类样本用于训练,而其他类别总称为(outlier)信息缺失。
例子:

有一个数据集包含苹果和梨子的样本,每个样本有2个特征:宽度和重量,数据集中的每个样本都可以表示为2维空间的一个点,红色*表示苹果,蓝色的+表示梨,虚线内的样本表示整个训练集。
对于二分类问题来说,图中的黑线正好可以将数据集中的样本分成苹果或者梨,即使新来一个样本,分类的结果也只能苹果或者梨子;
对于one class classification 来说,整个训练集为一类,把苹果+梨作为一个类别,而虚线则是这个类的范围,如果在虚线内则认为是属于苹果+梨类,反之,如图中黑点,则是不属于苹果+梨类,至于到底是属于什么类不清楚,分类器只知道是或者不是属于该类。
当训练集不是二维的时候,图中的虚线也转变成了一个封闭的超球面,把整个训练集包裹,在球面内的则是属于该类,外面则是其他类。

有一个找这个超球面的算法叫做:
支持向量数据描述 support vector data description(SVDD) 是一种单值分类算法,能够实现目标样本和非目标样本的区分,通常应用于异常检测和故障检测等领域。
其原理如下:
对于一组正类训练数据
x
∈
R
n
×
d
\mathbf{x}\in R^{n\times d}
x∈Rn×d ,其中
n
n
n 是样本个数,
d
d
d 是特征维度。首先通过非线性变换函数
Φ
:
x
→
F
\Phi:\mathbf{x}\rightarrow\mathbf{F}
Φ:x→F 将数据从原始空间映射到特征空间,然后在特征空间中寻找一个体积最小的超球体,为了构造这样最小的超球体,SVDD需要解决以下优化问题:
min
ε
(
a
,
R
,
ξ
)
=
R
2
+
C
∑
i
=
1
n
ξ
i
s
.
t
.
{
∥
x
i
−
a
∥
2
≤
R
2
+
ξ
i
ξ
i
≥
0
∀
i
=
1
,
2
,
…
,
n
\min\varepsilon(\mathbf{a},R,\xi)=R^2+C\sum_{i=1}^{n}\xi_i \\ s.t.
其中,
R
R
R 是为超球体半径,
a
\mathbf{a}
a 为球心,
ξ
\xi
ξ 为松弛因子,
C
C
C 为权衡超球体和误分率的惩罚参数。
该优化问题求解:
1、首先根据拉格朗日乘子法构造拉格朗日函数:
L
(
R
,
a
,
ξ
,
α
,
γ
)
=
R
2
+
C
∑
i
=
1
n
ξ
i
−
∑
i
=
1
n
α
i
{
R
2
+
ξ
i
−
(
x
i
⋅
x
i
−
2
a
⋅
x
i
+
a
⋅
a
)
}
−
∑
i
=
1
n
γ
i
ξ
i
L(R,\mathbf{a},\xi,\alpha,\gamma)=R^2+C\sum_{i=1}^n\xi_i-\sum_{i=1}^n\alpha_i\{R^2+\xi_i-(\mathbf{x}_i\cdot\mathbf{x}_i-2\mathbf{a}\cdot\mathbf{x}_i+\mathbf{a}\cdot\mathbf{a})\}-\sum_{i=1}^n\gamma_i\xi_i
L(R,a,ξ,α,γ)=R2+Ci=1∑nξi−i=1∑nαi{R2+ξi−(xi⋅xi−2a⋅xi+a⋅a)}−i=1∑nγiξi
对于
R
、
a
R、\mathbf{a}
R、a来说
L
L
L必须最小化,而对于
α
、
γ
\alpha、\gamma
α、γ来说,
L
L
L 必须最大化。
分别对每个变量求偏导为0:
∂
L
∂
R
=
2
R
−
2
R
∑
i
=
1
n
α
i
=
0
,
即:
∑
i
=
1
n
α
i
=
1
\frac{\partial L}{\partial R}=2R-2R\sum_{i=1}^n\alpha_i=0,即:\sum_{i=1}^n\alpha_i=1
∂R∂L=2R−2Ri=1∑nαi=0,即:i=1∑nαi=1
∂
L
∂
a
=
2
∑
i
=
1
n
α
i
x
i
−
2
a
=
0
,即
a
=
∑
i
=
1
n
α
i
x
i
\frac{\partial L}{\partial \mathbf{a}}=2\sum_{i=1}^n\alpha_i\mathbf{x}_i-2\mathbf{a}=0,即 \mathbf{a}=\sum_{i=1}^n\alpha_i\mathbf{x}_i
∂a∂L=2i=1∑nαixi−2a=0,即a=i=1∑nαixi
∂
L
∂
ξ
=
C
−
α
i
−
γ
i
=
0
,即
0
≤
α
i
≤
C
\frac{\partial L}{\partial \xi}=C-\alpha_i-\gamma_i=0,即 0 \leq\alpha_i\leq C
∂ξ∂L=C−αi−γi=0,即0≤αi≤C
把结果带入到
L
L
L 中得到:
L
=
x
i
⋅
x
i
−
2
∑
i
=
1
n
α
i
(
x
j
⋅
x
i
)
−
∑
i
=
1
,
j
=
1
n
α
i
α
j
(
x
i
,
x
j
)
s
.
t
.
0
≤
α
i
≤
C
,
∑
i
=
1
n
α
i
=
1
L=\mathbf{x}_i\cdot\mathbf{x}_i-2\sum_{i=1}^n\alpha_i(\mathbf{x}_j\cdot\mathbf{x}_i)-\sum_{i=1,j=1}^n\alpha_i\alpha_j(\mathbf{x}_i,\mathbf{x}_j)\\ s.t.0 \leq\alpha_i\leq C,\sum_{i=1}^n\alpha_i=1
L=xi⋅xi−2i=1∑nαi(xj⋅xi)−i=1,j=1∑nαiαj(xi,xj)s.t.0≤αi≤C,i=1∑nαi=1
对于在球内的对象
z
\mathbf{z}
z 到球心的距离有:
∥
z
−
a
∥
2
=
(
z
⋅
z
)
−
2
∑
i
α
i
(
z
⋅
x
i
)
+
∑
i
,
j
α
i
α
j
(
x
i
⋅
z
)
≤
R
2
\|\mathbf{z}-\mathbf{a}\|^2=(\mathbf{z}\cdot\mathbf{z})-2\sum_{i}\alpha_i(\mathbf{z}\cdot\mathbf{x}_i)+\sum_{i,j}\alpha_i\alpha_j(\mathbf{x}_i\cdot\mathbf{z})\leq R^2
∥z−a∥2=(z⋅z)−2i∑αi(z⋅xi)+i,j∑αiαj(xi⋅z)≤R2
若
z
\mathbf{z}
z 为超球面边界上的点时:
R
2
=
(
x
k
⋅
x
k
)
−
2
∑
i
α
i
(
x
k
⋅
x
i
)
+
∑
i
,
j
α
i
α
j
(
x
i
⋅
x
k
)
R^2=(\mathbf{x}_k\cdot\mathbf{x}_k)-2\sum_{i}\alpha_i(\mathbf{x}_k\cdot\mathbf{x}_i)+\sum_{i,j}\alpha_i\alpha_j(\mathbf{x}_i\cdot\mathbf{x}_k)
R2=(xk⋅xk)−2i∑αi(xk⋅xi)+i,j∑αiαj(xi⋅xk)
因此,对于满足
x
k
∈
S
V
b
n
d
\mathbf{x}_k \in SV^{bnd}
xk∈SVbnd,即处于超平面内,即
0
≤
x
k
≤
C
0\leq\mathbf{x}_k\leq C
0≤xk≤C的支持向量集,我们称这种单分类器为支持向量数据描述(SVDD),记为:
f
S
V
D
D
(
z
;
α
,
R
)
=
I
(
∥
z
−
a
∥
2
≤
R
2
)
=
I
(
(
z
⋅
z
−
2
∑
i
α
i
(
z
⋅
x
i
)
+
∑
i
,
j
α
i
α
j
(
x
i
⋅
x
j
)
≤
R
2
)
可以得到超球体的球心和半径的计算公式为:
a
=
∑
i
=
1
n
α
i
(
x
i
)
\mathbf{a}=\sum_{i=1}^n\alpha_i(\mathbf{x}_i)
a=i=1∑nαi(xi)
R
=
(
z
⋅
x
i
)
−
2
∑
i
=
1
n
α
i
(
z
⋅
x
i
)
+
∑
i
,
j
=
1
n
α
i
α
j
(
x
i
x
j
)
R=\sqrt{(\mathbf{z}\cdot\mathbf{x}_i)-2\sum_{i=1}^n\alpha_i(\mathbf{z}\cdot\mathbf{x}_i)+\sum_{i,j=1}^n\alpha_i\alpha_j(\mathbf{x}_i\mathbf{x}_j)}
R=(z⋅xi)−2i=1∑nαi(z⋅xi)+i,j=1∑nαiαj(xixj)