Function gbdt::fitness::almost_equal_thrs
source · pub fn almost_equal_thrs(a: ValueType, b: ValueType, thrs: f64) -> bool
Expand description
Comparing two number with a costomized floating error threshold.
§Example
use gbdt::fitness::almost_equal_thrs;
assert_eq!(true, almost_equal_thrs(1.0, 0.998, 0.01));
Examples found in repository?
examples/test-iris.rs (line 44)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
fn main() {
let mut cfg = Config::new();
cfg.set_feature_size(4);
cfg.set_max_depth(4);
cfg.set_iterations(100);
cfg.set_shrinkage(0.1);
cfg.set_loss("LAD");
cfg.set_debug(true);
cfg.set_training_optimization_level(2);
// load data
let train_file = "dataset/iris/train.txt";
let test_file = "dataset/iris/test.txt";
let mut input_format = InputFormat::csv_format();
input_format.set_feature_size(4);
input_format.set_label_index(4);
let mut train_dv: DataVec =
load(train_file, input_format).expect("failed to load training data");
let test_dv: DataVec = load(test_file, input_format).expect("failed to load test data");
// train and save the model
let mut gbdt = GBDT::new(&cfg);
gbdt.fit(&mut train_dv);
gbdt.save_model("gbdt.model")
.expect("failed to save the model");
// load the model and do inference
let model = GBDT::load_model("gbdt.model").expect("failed to load the model");
let predicted: PredVec = model.predict(&test_dv);
assert_eq!(predicted.len(), test_dv.len());
let mut correct = 0;
let mut wrong = 0;
for i in 0..predicted.len() {
if almost_equal_thrs(test_dv[i].label, predicted[i], 0.0001) {
correct += 1;
} else {
wrong += 1;
};
println!("[{}] {} {}", i, test_dv[i].label, predicted[i]);
}
println!("correct: {}", correct);
println!("wrong: {}", wrong);
assert!(wrong <= 2);
}