算法思想
初始SVDD
目标函数:
min
R
2
+
C
∑
i
=
1
l
ξ
i
s
.
t
.
∣
∣
x
i
−
a
∣
∣
≤
R
2
+
ξ
i
,
ξ
i
≥
0
∀
i
\min R^2 + C\sum_{i = 1}^l\xi_{i} \\ \\ s.t.\ \ || \boldsymbol{x}_{i} - \boldsymbol{a}|| \leq R^2 + \xi_{i}, \xi_{i} \geq 0 \ \ \forall_{i}
minR2+Ci=1∑lξis.t. ∣∣xi−a∣∣≤R2+ξi,ξi≥0 ∀i
结合拉格朗日乘子法,原问题的对偶变成:
max
∑
i
=
1
l
α
i
(
x
i
,
x
i
)
−
∑
i
=
1
l
∑
j
=
1
l
α
i
α
j
(
x
i
,
x
j
)
s
.
t
.
0
≤
α
i
≤
C
i
=
1
,
2
,
…
,
l
∑
i
=
1
l
α
i
=
1
\max \sum_{i = 1}^l \alpha_{i}(x_{i}, x_{i}) -\sum_{i = 1}^l\sum_{j = 1}^l \alpha_{i}\alpha_{j}(x_{i}, x_{j})\\ s.t. \ \ 0 \leq \alpha_{i} \leq C \ \ \ i = 1, 2, \dots, l \\ \sum_{i = 1}^l \alpha_{i} = 1
maxi=1∑lαi(xi,xi)−i=1∑lj=1∑lαiαj(xi,xj)s.t. 0≤αi≤C i=1,2,…,li=1∑lαi=1
通过二次规划求解
α
i
\alpha_{i}
αi , 详细参考这篇文章,找出
α
i
≥
0
\alpha_{i} \geq 0
αi≥0 , 即可得到支持向量,再根据支持向量就可以算出半径
R
R
R 和 中心
a
a
a ,这样就可以找到超球边界。
DW-SVDD
算法的思想是不仅为每个样本点设置松弛因子
ξ
i
\xi_{i}
ξi ,而且还设置密度加权
ρ
i
\rho_{i}
ρi 。其认为密度越大的地方,样本越重要,在拟合超球边界的时候,应该“贡献”更大。
密度权重:
ρ
(
x
i
)
=
1
−
d
(
x
i
,
x
i
k
)
max
j
∈
t
r
a
i
n
s
e
t
d
(
x
j
,
x
j
k
)
\rho(x_{i}) = 1 - \frac{d(x_{i}, x_{i}^k)}{\max_{j \in train\ set}d(x_{j}, x_{j}^k) }
ρ(xi)=1−maxj∈train setd(xj,xjk)d(xi,xik)
这里用到了 k-nearest neighbor (k-NN) distance,
d
(
x
i
,
x
i
k
)
d(x_{i}, x_{i}^k)
d(xi,xik) 表示
x
i
x_{i}
xi 和第
k
k
k近的样本点
x
i
k
x_{i}^k
xik的距离,
max
j
∈
t
r
a
i
n
s
e
t
d
(
x
j
,
x
j
k
)
\max_{j \in train\ set}d(x_{j}, x_{j}^k)
maxj∈train setd(xj,xjk) 表示在训练集中最大的k-NN距离。在密度较大的样本点
ρ
(
x
i
)
\rho(x_{i})
ρ(xi) 就越大,反之越小。
DW-SVDD的目标函数就变成:
min
R
2
+
C
∑
i
=
1
l
ρ
(
x
i
)
ξ
i
s
.
t
.
∣
∣
x
i
−
a
∣
∣
≤
R
2
+
ξ
i
,
ξ
i
≥
0
∀
i
\min R^2 + C\sum_{i = 1}^l \rho(x_{i})\xi_{i} \\ \\ s.t.\ \ || \boldsymbol{x}_{i} - \boldsymbol{a}|| \leq R^2 + \xi_{i}, \xi_{i} \geq 0 \ \ \forall_{i}
minR2+Ci=1∑lρ(xi)ξis.t. ∣∣xi−a∣∣≤R2+ξi,ξi≥0 ∀i
结合拉格朗日乘子法,原问题的对偶问题变为:
max
∑
i
=
1
l
α
i
(
x
i
,
x
i
)
−
∑
i
=
1
l
∑
j
=
1
l
α
i
α
j
(
x
i
,
x
j
)
s
.
t
.
0
≤
α
i
≤
ρ
(
x
i
)
C
i
=
1
,
2
,
…
,
l
∑
i
=
1
l
α
i
=
1
\max \sum_{i = 1}^l \alpha_{i}(x_{i}, x_{i}) -\sum_{i = 1}^l\sum_{j = 1}^l \alpha_{i}\alpha_{j}(x_{i}, x_{j})\\ s.t. \ \ 0 \leq \alpha_{i} \leq \rho(x_{i}) C \ \ \ i = 1, 2, \dots, l \\ \sum_{i = 1}^l \alpha_{i} = 1
maxi=1∑lαi(xi,xi)−i=1∑lj=1∑lαiαj(xi,xj)s.t. 0≤αi≤ρ(xi)C i=1,2,…,li=1∑lαi=1
不同点就是在二次规划求解 α i \alpha_{i} αi 时, G G G 有变化,之前时 C C C,现在是 ρ ( x i ) \rho(x_{i}) ρ(xi) 。
疑问:在这个地方,我个人有问题,SVDD本身是要调节 C C C 的,所以 ρ ( x i ) C \rho(x_{i})C ρ(xi)C 两个一起作用的时候, ρ ( x i ) \rho(x_{i}) ρ(xi) 肯定是一定的,那么我们还是可以调节 C C C, 让 C 1 = ρ C 2 C_{1} = \rho C_{2} C1=ρC2,使最后的效果是一样的,只是说法不同。
已解答: C 1 C_{1} C1 和 ρ C 2 \boldsymbol{\rho} C_{2} ρC2 实际上肯定是不一样的,不然论文也不得发出来了😂。因为 ρ \boldsymbol{\rho} ρ 是一个向量,对应每个 x x x 都有一个 ρ \rho ρ,在某个取值时,可能 C 1 = ρ ( x i ) C 2 C_{1} = \rho(x_{i})C_{2} C1=ρ(xi)C2,也只会等于其中的某个或者某几个值,也不会全部相等,这体现出了考虑每个样本重要性的作用。
代码实现
1、计算每个样本点得权重