Использование мультиномиального распределения с пакетом Scala и Breeze

Я использую пакет breeze со Scala 2.10.3 и хочу взять образец из многочлена распределение.

т.е. Я хотел бы попробовать значения случайной величины 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].

В документации для полиномиального класса говорится, что параметры распределения должны быть переданы в конструктор как тип T, но я не могу найти много информации об этом типе.

Кто-нибудь знает, как создать экземпляр многочлена на ветру?


person sinwav    schedule 27.05.2014    source источник


Ответы (1)


Вы должны обернуть его в 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)

Я должен добавить поддержку того, как вы пытаетесь его использовать.

person dlwh    schedule 27.05.2014
comment
Слово. Кстати, этот пакет доставляет удовольствие. - person sinwav; 28.05.2014
comment
Спасибо за добрые слова! - person dlwh; 28.05.2014