【问题标题】:How to generate random numbers correlated to a given dataset in Python如何在 Python 中生成与给定数据集相关的随机数
【发布时间】:2016-09-04 05:33:17
【问题描述】:

我有一个 20 元素数组 x,由浮点数组成,例如:

x = [ 0.35945087, 0.08999019, 0.51313128, 0.75455967, 0.50654956, 0.12404178, 0.25115332, 0.94167661, 0.95727792, 0.35572299, 0.65264679, 0.09416763, 0.861585, 0.19661212, 0.62882119, 0.1180147, 0.17153433, 0.07275386, 0.01895795, 0.00578392]

这些数据不是正态分布的,而是服从幂律分布。

我需要生成第二个数组y,它与x相关,相关系数为0.70

我如何用 python 做到这一点?

【问题讨论】:

标签: python numpy machine-learning correlation


【解决方案1】:

这是听起来很容易问的事情之一,但当您深入了解细节时就会变得复杂。我只能为你指明正确的方向,而不是给你一个简单的食谱。

理论上,您需要做的是构建一个二元分布,其中边际分布都是幂律(可能是相同的幂律),但具有所需的相关系数。

(X, Y) ~ f(x, y) s.t. X ~ powerlaw(params); Y ~ powerlaw(params); corr(X, Y) = 0.7

这可以通过copula 完成。

对于您拥有的每个样本 x[i],您可以找到单变量条件分布 Y ~ f(x=x[i], y) 并从中采样。

请注意,相关系数在应用于幂律分布时可能不是特别有意义。幂律分布通常没有有限的第一和第二时刻。

【讨论】:

    【解决方案2】:
    y = [number * 0.7 for number in x]
    

    这是你需要的吗?

    【讨论】:

    • 不幸的是,这行不通。根据您的方法,x 和 y 之间的相关性仍然为 1。
    • 相关系数还是1。
    • 感谢您提交给 StackOverflow!一般来说,强烈建议发布您的解决方案并附上一些解释,而不是向原始发布者 (OP) 寻求反馈。
    猜你喜欢
    • 2021-06-29
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2015-09-27
    • 1970-01-01
    • 2018-12-03
    • 2011-09-18
    相关资源
    最近更新 更多