我正在使用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传递给构造函数,但我找不到有关该类型的更多信息。
有人知道如何在微风中实例化多项式吗?
答案 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)
我应该为您尝试使用它的方式添加支持。