0

假设我有 10 个数据集,每个数据集 30 个元素。我们可以模拟为:

A = rand(30, 10);

所以每个数据集都在一列中。现在,我想找到一组相关的n(或不相关的,无论如何......)的数据集。

因为n=2我可以简单地使用R = corr(A)并发现即第 1 列和第 3 列显示彼此之间的最高相关性。但是,如果我想在彼此之间找到一组三个或四个相关(或不相关)的数据集怎么办?有没有这样的功能,还是我必须以某种方式循环它?

谢谢!

4

2 回答 2

2

作为一个非常简单的起点,您可以对 R 的列进行求和,以找到与其他列最相关的列。然后,从该列中选择与它最密切相关的两列。像这样的东西:

[~, ii] = max(sum(R));
[~, jj] = sort(R(:,ii),'descend');
three_cols = jj(1:3);

或者,您可以找到矩阵中的最高相关值,然后沿着其列和行搜索以找到下一个最高值,等等。

于 2013-12-10T05:12:23.033 回答
2

您可以将其视为随机模拟问题。您选择三(四)个数据集并找到最大的互相关分数,我将其定义为成对相关分数的总和。

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

尽管这不是一个确定性的过程,但它很快就会收敛并为您提供全局最优值。

于 2013-12-10T06:37:54.817 回答