0

我有一个矩阵,我想从 Octave 中的新矩阵中随机选择t个随机列,但我希望我的随机选择根据矩阵的奇异值分解按比例加权。所以基本上我想选择t个随机列,其概率在选择之前确定。有没有办法在 Octave/Matlab 中做到这一点?

谢谢!

4

1 回答 1

0

假设您有一些权重的行向量W, (或者在您的情况下可能是矩阵特征值的某些函数),您应该首先创建一个表示权重的归一化累积和的向量,如下所示:

cumNormW = cumsum(W)./sum(W);

的值cumNormW现在应该是单调递增的,并且范围应该从W(1)1

接下来,您将要从均匀分布中抽取[0,1]

randVal = rand(1);

您将使用此随机值来查找您刚刚随机选择的相应列。最后,您想找到累积归一化权重向量的第一个索引。

randCol = find(cumNormW <= randVal, 1, 'last')

这为您提供了最终的随机列选择。

现在,如果您想确保选择t 不同的列,则需要跟踪之前的值randCol并简单地重复上述步骤randValrandCol直到生成一个尚未选择的列。


例子

假设您有一个包含 4 列的矩阵,并且您已经计算了该矩阵的特征值并将它们存储在 W 中。我们假设列对应于特征向量,并且您希望选择与该列的特征值成正比的概率的列。特征值之和。

W = [4 3 2 1];

归一化后,你得到cumNormW = [0.40 0.70 0.90 1];

如您所见,您绘制一个导致选择第一列('randVal <= 0.4')的概率明显高于最后一列('0.9 < randVal <= 1')

您通过 绘制一个随机数rand(1),对于这个例子,让我们说randVal = 0.82。使用最后randCol一步,对于此迭代,您将获得randCol = 3.

于 2013-05-02T01:25:41.227 回答