以下は NaN を与えますが、1.0 を与えなければならないのはなぜですか?
breeze.stats.distributions.Binomial(10, 1.0).probabilityOf(10)
同様にBinomial(1, 0.0).probabilityOf(0)
以下は NaN を与えますが、1.0 を与えなければならないのはなぜですか?
breeze.stats.distributions.Binomial(10, 1.0).probabilityOf(10)
同様にBinomial(1, 0.0).probabilityOf(0)
そよ風の源から。
case class Binomial(n: Int, p: Double)(implicit rand: RandBasis=Rand) extends DiscreteDistr[Int] with Moments[Double, Double] {
require(n > 0, "n must be positive!");
require(p >= 0.0, "p must be non-negative!");
def probabilityOf(k: Int) = exp(logProbabilityOf(k));
override def toString() = "Binomial(" + n + ", " + p + ")";
override def logProbabilityOf(k: Int) = {
require(n >= k);
require(k >= 0);
lgamma(n+1) - lgamma(k+1) - lgamma(n-k+1) + k * log(p) + (n-k) * log(1-p)
}
0 のログは未定義です。最初の例では、 p が 1 であるため、最後のlog(1-p) = log(0) = undefined
例であり、2 番目の例では、log(p) = log(0) = undefined
これらの確率は両方とも 1 であるべきだったので、これはブリーズのソース コードのバグだと思います