randomforests 0.1.1

A simple random forest classifier.
Documentation
![https://crates.io/crates/randomforests](https://img.shields.io/crates/v/randomforests.svg) ![https://docs.rs/randomforests/](https://docs.rs/randomforests/badge.svg) ![](https://gitlab.com/ruivieira/random-forests/badges/master/build.svg
)

# random-forests

A Rust library for [Random Forests](https://en.wikipedia.org/wiki/Random_forest).

Support for generic impurity measures:

[x] Entropy
[x] Gini

## installation

Add to your `Cargo.toml`:

```text
randomforests = "*"
```

## usage

Add the crate and `RandomForests` to your code:

```rust
extern crate randomforests;

use randomforests::RandomForest;
```

Create a `Dataset` as collection of `Item`s:

```rust
let mut dataset = Dataset::new();
let mut item1 = Item::new();
item1.insert("lang".to_string(), Value { data: "rust".to_string() });
item1.insert("typing".to_string(), Value { data: "static".to_string() });
dataset.push(item1);

let mut item2 = Item::new();
item2.insert("lang".to_string(), Value { data: "python".to_string() } );
item2.insert("typing".to_string(), Value { data: "dynamic".to_string() } );
dataset.push(item2);

let mut item3 = Item::new();
item3.insert("lang".to_string(), Value { data: "haskell".to_string() });
item3.insert("typing".to_string(), Value { data: "static".to_string() });
dataset.push(item3);
```

Initialise the classifier and train it classifier by passing the `Dataset`, a `TreeConfig`, the number of trees and the data subsample size: 

```rust
let mut config = TreeConfig::new();
config.decision = "lang".to_string();
let forest = RandomForest::build("lang".to_string(), config, &dataset, 100, 3);
```

Create a question as an `Item`:

```rust
let mut question = Item::new();
question.insert("typing".to_string(), Value { data: "static".to_string() });
```

And get the predictions:

```rust
let answer = RandomForest::predict(forest, question);
// answer = {Value { data: haskell }: 48, Value { data: rust }: 52}
```