【发布时间】:2015-07-12 07:04:40
【问题描述】:
大家好,我有这个问题:
- 我有 n 个向量的数据集,每个向量都有 D 维。
- 我还有一个大小为 D*D 的协方差矩阵,设为 C。
我执行以下操作:
- 我从数据集中选择了K个向量,也随机选择了E个维度。令 M 为所选数据在所选维度上的样本协方差。因此 M 为 E*E 矩阵。
- 设P为对应于C的维度E的部分协方差矩阵,即。 matlab中的C(E,E)
下面的矩阵是半正定的吗?:
X = (1-a)P + aM
其中 a 是一个常数,例如 0.2。
使用 mvnrnd(mean,X) 时有时会出现以下错误: SIGMA 必须是一个对称的半正定矩阵
我的代码是:
%%%Dims are randomly choosen dimensions
%%%Inds are randomly choosen Indexes form {1, 2, ...,n}
%%% PP are n D dimensional vectors, composing my data set PP is n*D
%%% Sigmaa is a D*D covariance matrix
co = cov(PP(Inds,Dims));
me = mean(PP(Inds,Dims));
Bettaa = 0.2;
sigmaaDims = sigmaa(Dims,Dims);
sigmaaDims = (1-Bettaa)*sigmaaDims + (co)*Bettaa;
Tem = mvnrnd(me,sigmaaDims);
【问题讨论】:
-
半正定矩阵的凸(和圆锥)组合是半正定矩阵(只需在
v'Xv中扩展X的定义)。所以你的问题归结为(对称)矩阵 P 和 M 是否都是半正定的。 -
谢谢 Ben,但正如我所说,M 是样本协方差,所以它应该是半正定的。 P 是从投影维度 E 形成的半正定矩阵得到的部分矩阵。所以问题是:P 是否总是正半定义,第二个问题是如果是这样,为什么 matlab 会不断出错以及如何防止这种情况发生?
-
只是为了确认一下,你的常数 a 总是在 0 和 1 之间,对吧?
-
是的,实际上总是 0.2
-
我没有很好地理解你的最后一个问题,“你需要所有的特征值都是非负的,而不仅仅是一个?”但是,我的数学并不多,而且我总是遇到特征值问题;)但我添加了我的代码以获取更多详细信息
标签: matlab matrix covariance