相关矩阵中随机变量的最小相关子集


10

我有一个相关矩阵,它是通过Matlab的corrcoef()使用Pearson线性相关系数获得的。尺寸为100x100的相关矩阵,即我针对100个随机变量计算了相关矩阵。A

在这100个随机变量中,我想找到10个随机变量,它们的相关矩阵包含尽可能少的“相关性”(请参阅量化相关矩阵A与相关矩阵B相比要测量的指标多少)相关矩阵中的整体相关性)。我只关心成对相关。

是否有好的方法可以在合理的时间内找到这10个随机变量(例如,我不想尝试(10010)组合)?近似算法是可以的。


1
metrics to measure the overall correlation。您在专门考虑行列式吗?
ttnphns

1
一个非常相似的问题stats.stackexchange.com/q/73125/3277
ttnphns

1
对数的决定因素是子模函数(参见第18页在这里)。不幸的是,它并没有增加,这意味着经典的11/e贪婪近似结果不适用,但是仍然觉得这可能会有所帮助....
Dougal

1
相反,如果要使用相关的平均值,则这将成为最大边缘权重集团问题,这当然是NP难题,但已经在近似算法上有所进展。
Dougal

3
关于聚类分析的简单想法呢?取作为距离(不相似),并通过选定的方法进行聚类(我可能会选择Ward或平均链接层次结构)。选择由10个项目组成的最紧密的集群。|r|
ttnphns 2014年

Answers:


3

让我们考虑绝对成对相关性之和作为我们的选择量度。因此,我们寻求一个向量其中将使最小,其中。v{0,1}Nl1(v)=nvQvQij=|Aij|

假设Q也是A的正定,该问题被简化为解决约束二次优化问题:

v=min vQv s.t. l1(v)=n, vi{0,1}

这表明下面的放松:

v=min vQv s.t. l1(v)=n, vi[0,1]

可以使用现成的求解器轻松解决;然后由最大的分量给出结果。nv

示例Matlab代码:

N=100;
n=10;
% Generate random data
A=rand(N,1000);
C=corrcoef(A');
Q=abs((C+C')/2); % make sure it is symmetric
x = cplexqp(Q,zeros(1,N),[],[], ones(1, N),n, zeros(N,1), ones(N,1));
% If you don't use CPLEX, use matlab's default
% x = quadprog(Q,zeros(1,N),[],[], ones(1, N),n, zeros(N,1), ones(N,1));
assert(abs(sum(x)-n)<1e-10);
% Find the n largest values
I=sort(x); 
v=zeros(size(x)); v(x>I(N-n))=1; 
assert(abs(sum(v)-n)<1e-10);
% Make sure we do better than 10K random trials
for i=1:10000
   vc=zeros(size(x)); vc(randperm(N,n))=1;
   assert(sum(vc)==n, 'Wrong l0 norm');
   assert(vc'*Q*vc>v'*Q*v, 'Improves result');
end
% Show results
J=find(v==1);
fprintf('The optimal solution total off-diagonal correlations are %1.3f\n', v'*Q*v-n);
fprintf('The matrix:\n');
C(J,J)

您是否有这个脚本的Python版本?
卡西米尔,

2

这可能比@ttnphns的分层聚类思想更糟。但是:我碰巧遇到使用作为增加的亚模目标函数的论文:logdet(I+A)

Vanchinathan,Marfurt,Robelin,Kossman和Krause。从海量数据中发现有价值的物品。KDD2015。(doiarXiv

如果您认为这是“最小相关”的合理度量,则可以通过简单地迭代选择最大化该点的点来获得最佳集合的因子。这可以通过块LU分解有效地完成,其中是矩阵中已有条目的相关向量:11/ev

det[I+AvvT2]=det([I0vT(I+A)11][I+A002vT(I+A)1v][I(I+A)1v01])=det[I0vT(I+A)11]det[I+A002vT(I+A)1v]det[I(I+A)1v01]=(2vT(I+A)1v)det(I+A)

当然,您应该计算,其中是的Cholesky因式分解并使用三角求解器这是。因此,假设已经计算了相关矩阵,则整个过程应花费时间从元素中选取个。。vT(I+A)1v=L1v2LI+AO(n2)O(k=1nNk2+k3)=O(Nn3)nN


看来文件的链接已死。你有引用方便吗?
Sycorax说恢复莫妮卡

@Sycorax它可以在Wayback Machine上使用,但是我无法在网络上找到当前副本。看来研讨会论文已变成会议论文,我正在添加答案。
Dougal '18

1

我不确定是否完全理解“我只关心成对相关”的含义,但这可能会有所帮助:使用相关矩阵的倒数。的项等于,其中,是 X矩阵从内置第列和第行已删除的位置。Aii1det(A0i)/det(A)A0i(n1)(n1)Ai

因此,获得最小对角线系数在的索引将告诉您与集合的其余部分相关性最低的点。A1

根据实际操作,可以取倒数对角线上的10个最低值,也可以取第一个最小值,然后计算删除点后的倒数,依此类推。

如果这不是您所需要的,我觉得这个技巧可能仍然有用,但是我不确定如何。


0

查找成对相关性最低的项中的:由于说的相关性解释了两个序列之间的关系的,因此将目标 项目的相关性平方和最小化是更有意义的。这是我的简单解决方案。kn0.60.36k

将您的 个相关矩阵重写为相关的平方矩阵。对每列的平方求和。消除具有最大和的列和相应的行。您现在有了矩阵。重复直到您有一个 ×矩阵。您也可以仅使列和对应的行的最小。比较这些方法,我发现在一个和的矩阵中,只有两个相近和的项被不同地保留和消除。n×n(n1)×(n1)k×kkn=43k=20


2
这可能有用,但是听起来很特别(读起来像个贪婪的算法),并且您还没有提供任何数学上的理由表明它应该起作用。您是否可以保证它能正常工作,或者与最佳解决方案的距离有多远?
ub

我用Gurobi的分支和结合来解决受到相关矩阵的最优值,并且。我得到的最终目标值为8.13。为了进行比较,该贪婪方法达到了42.87,而随机选择的预期目标值为62.07。因此,不是那么伟大,但也不是没有用。而且此方法肯定具有简便性和快速性!x=argminx{0,1}n(xTC x)i=1nxi=k418×418k=20
卡西米尔,

在Gurobi将哪些条目设置为1与这种贪婪方法之间也存在正相关。x
卡西米尔,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.