More tests
This commit is contained in:
126
src/history.rs
126
src/history.rs
@@ -930,6 +930,80 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_log_evidence() {
|
||||
let composition = vec![vec![vec!["a"], vec!["b"]], vec![vec!["b"], vec!["a"]]];
|
||||
|
||||
let mut h = History::new(
|
||||
composition.clone(),
|
||||
vec![],
|
||||
vec![],
|
||||
vec![],
|
||||
HashMap::new(),
|
||||
MU,
|
||||
SIGMA,
|
||||
BETA,
|
||||
GAMMA,
|
||||
P_DRAW,
|
||||
false,
|
||||
);
|
||||
|
||||
let p_d_m_2 = h.log_evidence(false, &vec![]).exp() * 2.0;
|
||||
|
||||
assert_ulps_eq!(p_d_m_2, 0.17650911, epsilon = 0.000001);
|
||||
assert_ulps_eq!(
|
||||
p_d_m_2,
|
||||
h.log_evidence(true, &vec![]).exp() * 2.0,
|
||||
epsilon = 0.000001
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p_d_m_2,
|
||||
h.log_evidence(true, &vec!["a"]).exp() * 2.0,
|
||||
epsilon = 0.000001
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p_d_m_2,
|
||||
h.log_evidence(false, &vec!["a"]).exp() * 2.0,
|
||||
epsilon = 0.000001
|
||||
);
|
||||
|
||||
h.convergence(11, EPSILON, false);
|
||||
|
||||
let loocv_approx_2 = h.log_evidence(false, &vec![]).exp().sqrt();
|
||||
|
||||
assert_ulps_eq!(loocv_approx_2, 0.001976774, epsilon = 0.000001);
|
||||
|
||||
let p_d_m_approx_2 = h.log_evidence(true, &vec![]).exp() * 2.0;
|
||||
|
||||
assert!(loocv_approx_2 - p_d_m_approx_2 < 1e-4);
|
||||
|
||||
assert_ulps_eq!(
|
||||
loocv_approx_2,
|
||||
h.log_evidence(true, &vec!["b"]).exp() * 2.0,
|
||||
epsilon = 0.00001
|
||||
);
|
||||
|
||||
let mut h = History::new(
|
||||
composition,
|
||||
vec![],
|
||||
vec![],
|
||||
vec![],
|
||||
HashMap::new(),
|
||||
MU,
|
||||
SIGMA,
|
||||
BETA,
|
||||
GAMMA,
|
||||
P_DRAW,
|
||||
true,
|
||||
);
|
||||
|
||||
assert_ulps_eq!(
|
||||
((0.5f64 * 0.1765).ln() / 2.0).exp(),
|
||||
(h.log_evidence(false, &vec![]) / 2.0).exp(),
|
||||
epsilon = 1e-4
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_add_events_with_time() {
|
||||
let composition = vec![
|
||||
@@ -1123,4 +1197,56 @@ mod tests {
|
||||
epsilon = 0.000001
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_1vs1_weighted() {
|
||||
let composition = vec![vec![vec!["a"], vec!["b"]], vec![vec!["b"], vec!["a"]]];
|
||||
let weights = vec![vec![vec![5.0], vec![4.0]], vec![vec![5.0], vec![4.0]]];
|
||||
|
||||
let mut h = History::new(
|
||||
composition.clone(),
|
||||
vec![],
|
||||
vec![],
|
||||
weights,
|
||||
HashMap::new(),
|
||||
2.0,
|
||||
6.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
false,
|
||||
);
|
||||
|
||||
let lc = h.learning_curves();
|
||||
|
||||
assert_ulps_eq!(
|
||||
lc["a"][0].1,
|
||||
Gaussian::new(5.53765944, 4.758722),
|
||||
epsilon = 0.000001
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
lc["b"][0].1,
|
||||
Gaussian::new(-0.83012755, 5.2395689),
|
||||
epsilon = 0.000001
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
lc["a"][1].1,
|
||||
Gaussian::new(1.7922776, 4.099566689),
|
||||
epsilon = 0.000001
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
lc["b"][1].1,
|
||||
Gaussian::new(4.8455331752, 3.7476161),
|
||||
epsilon = 0.000001
|
||||
);
|
||||
|
||||
h.convergence(ITERATIONS, EPSILON, false);
|
||||
|
||||
let lc = h.learning_curves();
|
||||
|
||||
assert_ulps_eq!(lc["a"][0].1, lc["a"][0].1, epsilon = 0.000001);
|
||||
assert_ulps_eq!(lc["b"][0].1, lc["a"][0].1, epsilon = 0.000001);
|
||||
assert_ulps_eq!(lc["a"][1].1, lc["a"][0].1, epsilon = 0.000001);
|
||||
assert_ulps_eq!(lc["b"][1].1, lc["a"][0].1, epsilon = 0.000001);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user