使用Scala和Breeze包的Multiomial Distribution

时间:2014-05-27 22:53:11

标签: scala random multinomial scala-breeze scala-nlp

我正在使用Scala 2.10.3的breeze包,我想从多项分布中进行采样。

即。我想对随机变量Y的值进行采样,其中

Y ~ Multinomial(Y1 = 0, Y2 = 1, Y3 = 3; p1 = 0.2, p2 = 0.5, p3 = 0.3)

我无法实例化Multinomial类的实例,因为我无法从文档中辨别出我应该如何提供参数。

我想它就像

import breeze.stats.distributions._

var x = new Multinomial(0.2,0.5,0.3)
x.draw()

但是当我尝试以这种方式提供参数时,我收到以下错误:

scala> var x = new Multinomial(0.2,0.5,0.3)
<console>:10: error: No implicit view available from (Double, Double, Double) => breeze.linalg.QuasiTensor[I,Double].

Multinomial类的documentation表示分发的参数应作为类型T传递给构造函数,但我找不到有关该类型的更多信息。

有人知道如何在微风中实例化多项式吗?

1 个答案:

答案 0 :(得分:4)

您必须将其包装在DenseVector中。

scala> import breeze.linalg._
import breeze.linalg._

scala> val mult = Multinomial(DenseVector(0.2,0.5,0.3))
mult: breeze.stats.distributions.Multinomial[breeze.linalg.DenseVector[Double],Int] = Multinomial{(0,0.2),(1,0.5),(2,0.3)}

scala> mult.sample(100)
res1: IndexedSeq[Int] = Vector(0, 1, 1, 2, 1, 1, 1, 1, 0, 2, 0, 0, 0, 2, 2, 1, 2, 2, 0, 1, 2, 1, 0, 1, 1, 2, 1, 1, 1, 2, 2, 2, 0, 0, 2, 1, 1, 1, 0, 1, 1, 2, 0, 0, 1, 1, 1, 1, 1, 1, 2, 0, 2, 2, 0, 2, 0, 1, 0, 1, 2, 1, 1, 1, 2, 2, 2, 2, 2, 0, 1, 1, 1, 2, 0, 2, 1, 0, 1, 1, 1, 0, 0, 0, 2, 1, 2, 0, 0, 1, 2, 2, 0, 2, 1, 1, 0, 1, 2, 2)

我应该为您尝试使用它的方式添加支持。