樊畿k-范数
把矩阵的奇异值从大到小排列,前k个奇异值的和就是Ky Fan k-norm。Ky Fan是樊畿的英文名。用公式定义如下:
∥
A
∥
(
k
)
=
∑
i
=
1
k
σ
i
↓
\parallel A \parallel_{(k)}=\sum_{i=1}^k\sigma_i^{\downarrow}
∥A∥(k)=i=1∑kσi↓
当
k
=
1
k=1
k=1时就是矩阵的2-范数,当
k
=
n
k=n
k=n时等于沙滕1-范数。因为定义简单,所以python代码也简单:
# 樊畿范数
def ky_fan_norm(self, k):
values = self.sigular_values()
values = sorted(values)
result = 0
n = len(values)
for i in range(n - 1, n - k - 1, -1):
result += values[i]
return result
沙滕p-范数
沙滕p-范数Schatten p-norm,又叫沙滕范数。它是基于奇异值定义的范数。其定义如下:
∥
A
∥
S
p
=
(
∑
i
=
1
n
σ
i
p
)
1
p
\parallel A \parallel_{Sp}=(\sum_{i=1}^n\sigma_i^p)^{\frac1{p}}
∥A∥Sp=(i=1∑nσip)p1
注意:沙滕-p范数不是矩阵的p-范数。举个例子,矩阵的2-范数是最大奇异值,但是沙滕2-范数却是矩阵的Frobenius范数。根据定义,计算沙滕p-范数的代码如下:
# 沙滕范数
def schatten_norm(self, p):
values = self.sigular_values()
result = 0
for value in values:
result += value ** p
return result ** (1 / p)
核范数
核范数nuclear norm又叫迹范数* trace norm*,就是沙滕1-范数,也是樊畿-n范数。