这里的问题很复杂,但我会试着清楚地解释一下这句话;
我有一个代码,其中(协方差)矩阵A通过添加(生成/给定)矩阵B进行转换,然后将其除以某个值:
A_new = (A_old + B) / constant
此转换包括扩展& 轮播,没有翻译。 这是一种转换矩阵的不同方式,而不是我习惯的(which is like this)
我想以这样的方式分解/重新组合矩阵B,即它对矩阵A执行旋转,但不 缩放矩阵A(特征向量相同长度)
在常规仿射变换中,它将涉及something like this,但由于变换矩阵的替代方法(如上所述),这不适用。
我能做的一件事是:
A_new = A_old*R
但是,有没有更简单的方法?通过调整A_new = (A_old + B) / constant
中的矩阵B,可以帮助我解决的任何建议(或关键字)只能 旋转?
提前致谢!
编辑: 添加了代码:
for k=1:m0.nbStates
%Update the centers
Mu(:,k) = (Mu0(:,k).*Ek0(k) + NewData*Pix(:,k)) / (Ek0(k)+Ek(k));
%Update the covariance matrices
S1 = zeros(m0.nbVar,m0.nbVar);
for j=1:nbData
dx = NewData(:,j)-Mu(:,k);
S1 = S1 + (dx)*(dx)'.*Pix(j,k);
end
dx0 = Mu0(:,k)-Mu(:,k);
S2 = (Sigma0(:,:,k)+(dx0)*(dx0)').*Ek0(k);
Sigma(:,:,k) = (S1 + S2) / (Ek0(k)+Ek(k));
end
上述方法是高斯混合模型直接更新方法。当新数据可用时,它会更新高斯分布。对于我的研究,我想调整高斯人的(2D)方向而不是他们的大小。
改变高斯混合模型的第二种方法如下:
% Implementation of incremental learning algorithm, as described by
% Rafael Pinto and Paulo Engel in their paper:
% "Scalable and Incremental Learning of Gaussian Mixture Models" (2017)
v1 = v0+1; %Eq 4.
sp1 = sp0+P_jx; %Eq 5.
e_j = X - Mu0; %Eq 6.
w_j = P_jx / (sp1+realmin); %Eq 7.
dMu = w_j*e_j; %Eq 8.
Mu1 = Mu0 + dMu; %Eq 9.
e_j = X - Mu1; %Eq10.
Sigma1 = (1-w_j)*Sigma0+w_j*(e_j*e_j')-dMu*dMu';
此方法还通过添加第二项来将协方差矩阵“Sigma0”调整为“Sigma1”。