• 输入:一个高维SPD矩阵的集合 X = X 1 , X 2 , … , X N \mathcal{X} = {X_1, X_2, \dots, X_N} X=X1,X2,…,XN,每个矩阵 X i ∈ S d + X_i \in \mathbb{S}_{d}^{+} Xi∈Sd+,以及它们对应的类别标签 Y = y 1 , y 2 , … , y N \mathcal{Y} = {y_1, y_2, \dots, y_N} Y=y1,y2,…,yN,每个标签 y i ∈ 1 , 2 , … , C y_i \in {1, 2, \dots, C} yi∈1,2,…,C,其中 C C C是类别的总数。
• 输出:一个正交投影矩阵 P ∈ R d × k P \in \mathbb{R}^{d \times k} P∈Rd×k,它将高维SPD矩阵映射到低维SPD矩阵,即 Z i = P T X i P ∈ S k + Z_i = P^T X_i P \in \mathbb{S}_{k}^{+} Zi=PTXiP∈Sk+,其中 k < d k < d k<d是目标维度。
• 目标:找到一个最优的投影矩阵 P ⋆ P^{\star} P⋆,使得低维SPD矩阵之间的类内距离最小,而类间距离最大,即
P
⋆
=
arg
max
P
J
(
P
)
=
arg
max
P
tr
(
P
T
S
B
P
)
tr
(
P
T
S
W
P
)
P^{\star} = \arg\max_{P} J(P) = \arg\max_{P} \frac{\text{tr}(P^T S_B P)}{\text{tr}(P^T S_W P)}
P⋆=argPmaxJ(P)=argPmaxtr(PTSWP)tr(PTSBP)
其中
S
B
S_B
SB和
S
W
S_W
SW分别是高维SPD流形上的类间散度矩阵和类内散度矩阵,它们的定义为
S
B
=
1
C
∑
c
=
1
C
N
c
(
μ
c
−
μ
)
(
μ
c
−
μ
)
T
S_B = \frac{1}{C}\sum_{c=1}^{C} N_c (\mu_c - \mu)(\mu_c - \mu)^T
SB=C1c=1∑CNc(μc−μ)(μc−μ)T
S
W
=
1
N
∑
i
=
1
N
(
X
i
−
μ
y
i
)
(
X
i
−
μ
y
i
)
T
S_W = \frac{1}{N}\sum_{i=1}^{N} (X_i - \mu_{y_i})(X_i - \mu_{y_i})^T
SW=N1i=1∑N(Xi−μyi)(Xi−μyi)T
其中
N
c
N_c
Nc是第
c
c
c类的样本数,
μ
c
\mu_c
μc是第
c
c
c类样本的均值点,
μ
\mu
μ是所有样本的均值点,它们都是高维SPD矩阵,并且用黎曼平均来计算。
• 算法:
• 初始化投影矩阵 P 0 P_0 P0为一个随机正交矩阵,并计算初始目标函数值 J ( P 0 ) J(P_0) J(P0)。
• 迭代以下步骤,直到收敛或达到最大迭代次数:
• 计算梯度矩阵 G t = S W P t − P t S B G_t = S_W P_t - P_t S_B Gt=SWPt−PtSB
• 计算梯度方向矩阵 Q t = P t G t T − G t P t T Q_t = P_t G_t^T - G_t P_t^T Qt=PtGtT−GtPtT
• 计算步长 α t = tr ( Q t T G t ) tr ( Q t T S W Q t ) \alpha_t = \frac{\text{tr}(Q_t^T G_t)}{\text{tr}(Q_t^T S_W Q_t)} αt=tr(QtTSWQt)tr(QtTGt)
• 更新投影矩阵 P t + 1 = e − α t Q t P t P_{t+1} = e^{-\alpha_t Q_t} P_t Pt+1=e−αtQtPt
• 计算目标函数值 J ( P t + 1 ) J(P_{t+1}) J(Pt+1)
• 如果 J ( P t + 1 ) > J ( P t ) J(P_{t+1}) > J(P_t) J(Pt+1)>J(Pt),则接受更新,否则拒绝更新并减小步长
• 返回最终的投影矩阵 P T P_T PT