假设我有10个数据集,每个数据集30个元素。我们可以将其模拟为:
A = rand(30, 10);
所以每个数据集都在一列中。现在,我想找到一组n
数据集,这些数据集是相关的(或不相关的,无论......)。
对于n=2
,我可以简单地使用R = corr(A)
并发现即第1列和第3列显示彼此之间的最高相关性。但是如果我想在彼此之间找到三个或四个相关(或不相关)的数据集呢?是否有功能或我必须以某种方式循环它?
谢谢!
答案 0 :(得分:2)
作为一个非常简单的起点,您可以将R的列中的总和取下来找到与其他列最相关的列。然后,从该列中选择与其最相关的两列。像这样:
[~, ii] = max(sum(R));
[~, jj] = sort(R(:,ii),'descend');
three_cols = jj(1:3);
或者,您可以在矩阵中找到最高相关值,然后沿其列和行搜索以查找下一个最高值等。
答案 1 :(得分:2)
您可以将此视为随机模拟问题。您选择三(4)个数据集并找到最大的互相关分数,我将其定义为成对相关分数的总和。
max_score = 0;
max_set = [];
max_prev = 0;
counter = 0;
while 1,
idx = randperm(10);
idx = idx(1:3); % or 1:4 for case of four
score = R(idx(1), idx(2)) + R(idx(2), idx(3)) + R(idx(1), idx(3));
if score > max_score,
max_score = score;
max_set = idx;
end
counter = counter + 1;
if mod(counter, 1000) == 0, % every 1000 iteration check convergence
if max_score - max_prev < 0.0001,
break;
end
end
max_prev = max_score;
end
虽然它不是一个确定性的过程,但它并不需要很长时间才能收敛并为您提供全局最优。