首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分位数估计的可重复性

分位数估计的可重复性
EN

Stack Overflow用户
提问于 2012-09-18 23:40:52
回答 1查看 341关注 0票数 2

我需要找到大量数据流的任意分位数(不适合内存),并且结果需要是可重复的,即对于相同的数据流,结果应该是相同的。我一直在使用colt,结果是不可重复的。

有没有其他库可以满足这些要求?

我必须做什么才能使分位数入库的结果在colt (我使用的是1.2.0)中可重复执行?我在我的随机数中使用了随机种子,但它看起来像是colt引入了它自己的随机性。我搞不懂。

对于两次不同的运行,我得到了以下结果。如果它们是可重复的,结果将是相同的:

代码语言:javascript
复制
[0.0990242124295947, 0.20014652659912247, 0.2996443961549412]
[0.09994965676310263, 0.20079195488768953, 0.29986981667267676]

下面是生成它的代码:

代码语言:javascript
复制
public class QuantileTest {

    public static void main(String[] args) throws IOException, Exception {
        QuantileBin1D qBins = new QuantileBin1D(false, Long.MAX_VALUE, 0.001, 0.0001, 64, null);
        Random rand = new Random(0);
        for (int i = 0; i < 1500000; i++) {
            double num = rand.nextDouble();;
            qBins.add(num);
        }

        DoubleArrayList qMarks = new DoubleArrayList(new double[] {0.1, 0.2, 0.3});
        double[] xMarks = qBins.quantiles(qMarks).elements();
        System.out.println(Arrays.toString(xMarks));
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-23 18:14:10

由于您没有向QuantileBin1D提供RandomEngine,因此仍然存在一些随机性。在某些类中(我发现的第一个类是RandomSampler),会创建一个默认的RandomEngine,这似乎是不可重复的。

代码语言:javascript
复制
if (randomGenerator==null) randomGenerator = cern.jet.random.AbstractDistribution.makeDefaultGenerator();
    this.my_RandomGenerator=randomGenerator;

您应该将构造函数更改为新的QuantileBin1D(false,Long.MAX_VALUE,0.001,0.0001,64,new DRand());

对于cern.jet.random.engine.DRand,默认构造函数的文档记录为

构造并返回一个带有默认种子的随机数生成器,该种子是一个常量

这应该会导致非随机结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12480394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档