根据功能值的差异进行采样

时间:2016-06-18 00:37:36

标签: matlab random random-sample

我有20个值x1,... x20。每个值介于0和1之间,例如0.22,0.23,0.25,......

x = rand(20,1);
x = sort(x);

现在我想选择一个数据点,但随机选择不均匀。具有最低值的数据点应具有最高概率,而其他值应具有与函数值与最低值之差成比例的概率。

例如,如果最低函数值是0.22,则函数值为0.23的数据点与0.23 - 0.22 = 0.01的最佳值之间存在差异,因此应该具有与0.22值类似的概率。但是0.3的值具有0.3-0.22 = 0.08的差异,因此应该具有小得多的概率。

如何做到这一点?

1 个答案:

答案 0 :(得分:3)

我会留下这个评论,但遗憾的是我还没有代表。 这看起来很有趣,我有几个问题要问你。 (我将在稍后编辑这个答案作为答案。)

  

具有最低值的数据点应具有最高概率,而其他值应具有与函数值与最低值之差成比例的概率。

让我们取20个项目的数组,并从整个数组中减去最小的数字。这给我们留下了我们最小的值(你想要最有可能)为0.我们现在需要定义一个函数,它遍历所有点并整合到1。

我做了以下事情:

x = rand(20, 1);
x = sort(x);
xx = x - x(1);

我想在这一点上我们可以反转我们的答案,所以最低点是1。

Px = 1 - xx;        %For probabilities
TotalP = sum(Px);

现在我们拥有了我们需要的一切,我想......让我们看看我们能做些什么。

P = Px/TotalP;        %This will be our probability.
SanityCheck = sum(P); %Make sure that it sums up to 1.

看起来很有效,所以让我们制作累积和数组,然后得到一个元素。

PI = cumsum(P);     %This will be the integral form of the probability function.
test = rand;   %Create a test number so we can place it in the integral function
index = find(PI > test, 1); %This will return the first entry that is greater than our test value...
result = x(index); %And here's our value

我希望这与您所寻找的一致。如果没有,请发表评论,我会回复你。 :)

[编辑以纳入评论]