根据函数值的差异进行抽样

Sampling according to difference in function value

我有 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,因此概率应该小得多。

如何做到这一点?

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

The data point with the lowest value should have the highest probability and the other values should have a probability proportional to the difference in function value to the lowest value.

让我们获取一个包含 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

我希望这就是您要找的东西。如果没有,请发表评论,我会尽快回复您。 :)

[编辑以纳入评论]