5 unstable releases
0.3.1 | Mar 11, 2021 |
---|---|
0.3.0 | Mar 4, 2021 |
0.2.1 | Feb 28, 2021 |
0.2.0 | Feb 26, 2021 |
0.1.0 | Feb 25, 2021 |
#1785 in Algorithms
34 downloads per month
42KB
744 lines
Uncertain<T>
Fast and correct computations with uncertain values.
When working with values which are not exactly determined, such as sensor data, it can be difficult to handle uncertainties correctly.
The Uncertain
trait makes such computations as natural as regular computations:
use uncertain::{Uncertain, Distribution};
use rand_distr::Normal;
// Some inputs about which we are not sure
let x = Distribution::from(Normal::new(5.0, 2.0).unwrap());
let y = Distribution::from(Normal::new(7.0, 3.0).unwrap());
// Do some computations
let distance = x.sub(y).map(|diff: f64| diff.abs());
// Ask a question about the result
let is_it_far = distance.map(|dist| dist > 2.0);
// Check how certain the answer is
assert_eq!(is_it_far.pr(0.9), false);
assert_eq!(is_it_far.pr(0.5), true);
This works by sampling a Bayesian network which is implicitly created by describing the computation
on the uncertain type. The Uncertain
trait only permits tests for simple boolean hypotheses. This
is by design: using Wald's sequential probability ratio test, evaluation typically
takes less than 100
samples.
Stability
While this crate is released as version 0.x
, breaking API changes should be expected.
References
The Uncertain
trait exported from the library is an implementation of
the paper Uncertain<T>
.
Dependencies
~360–485KB