Crates.io | extended-isolation-forest |
lib.rs | extended-isolation-forest |
version | 0.2.3 |
source | src |
created_at | 2021-05-12 06:43:07.470716 |
updated_at | 2022-11-30 19:41:43.829617 |
description | rust port of the anomaly detection algorithm |
homepage | https://github.com/nmandery/extended-isolation-forest |
repository | https://github.com/nmandery/extended-isolation-forest |
max_upload_size | |
id | 396422 |
size | 514,256 |
This is a rust port of the anomaly detection algorithm described in Extended Isolation Forest and implemented in https://github.com/sahandha/eif. For a detailed description see the paper or the github repository.
This crate requires rust >= 1.51 as it makes use of min_const_generics
.
Includes optional serde support with the serde
feature.
use rand::distributions::Uniform;
use rand::Rng;
use extended_isolation_forest::{Forest, ForestOptions};
fn make_f64_forest() -> Forest<f64, 3> {
let rng = &mut rand::thread_rng();
let distribution = Uniform::new(-4., 4.);
let distribution2 = Uniform::new(10., 50.);
let values: Vec<_> = (0..3000)
.map(|_| [rng.sample(distribution), rng.sample(distribution), rng.sample(distribution2)])
.collect();
let options = ForestOptions {
n_trees: 150,
sample_size: 200,
max_tree_depth: None,
extension_level: 1,
};
Forest::from_slice(values.as_slice(), &options).unwrap()
}
fn main() {
let forest = make_f64_forest();
// no anomaly
assert!(forest.score(&[1.0, 3.0, 25.0]) < 0.5);
assert!(forest.score(&[-1.0, 3.0, 25.0]) < 0.5);
// anomalies
assert!(forest.score(&[-12.0, 6.0, 25.0]) > 0.5);
assert!(forest.score(&[-1.0, 2.0, 60.0]) > 0.5);
assert!(forest.score(&[-1.0, 2.0, 0.0]) > 0.5);
}
This example uses acceleration data recorded using a smartphone while walking up and down stairs. The anomaly was
caused by a small jump. The code is in examples/walking_stairs.rs
, the data itself
is in data/acceleration
. All data for this example was collected with the phyphox smartphone app.
The example can be executed using
cargo run --example walking_stairs
Expected result: