如何使用scala breeze将数据拟合到正态分布

时间:2016-06-22 14:06:20

标签: scala statistics breeze scala-breeze

我正在尝试使用scala breeze将数据拟合到正态分布,python scipy替代方法是:

from scipy.stats import norm

mu,std = norm.fit(time1)

我正在寻找使用breeze

在scala中执行相同操作的替代方法

1 个答案:

答案 0 :(得分:1)

查看norm.fit的{​​{3}},看起来如果你只使用传入数据的函数(即没有其他参数),那么这个函数只返回均值和标准差: 。我们可以在Breeze中完成同样的事情:

scala> val data = DenseVector(1d,2d,3d,4d)
data: breeze.linalg.DenseVector[Double] = DenseVector(1.0, 2.0, 3.0, 4.0)

scala> val mu = mean(data)
mu: Double = 2.5

scala> val samp_var = variance(data)
samp_var: Double = 1.6666666666666667

scala> val n = data.length.toDouble
n: Double = 4.0

scala> val pop_var = samp_var * (n-1)/(n)
pop_var: Double = 1.25

scala> val pop_std = math.sqrt(pop_var)
pop_std: Double = 1.118033988749895

我们需要修改样本方差以获得总体方差。这与scipy结果相同:

In [1]: from scipy.stats import norm

In [2]: mu, std = norm.fit([1,2,3,4])

In [3]: mu
Out[3]: 2.5

In [4]: std
Out[4]: 1.1180339887498949