mirror of
https://github.com/Magnus167/rustframe.git
synced 2025-08-20 04:00:01 +00:00
Add logistic regression examples
This commit is contained in:
parent
45f147e651
commit
6b580ec5eb
73
examples/logistic_regression.rs
Normal file
73
examples/logistic_regression.rs
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
use rustframe::compute::models::logreg::LogReg;
|
||||||
|
use rustframe::matrix::Matrix;
|
||||||
|
|
||||||
|
/// Two binary classification demos using logistic regression.
|
||||||
|
///
|
||||||
|
/// Example 1 predicts exam success from hours studied.
|
||||||
|
/// Example 2 predicts whether an online shopper will make a purchase.
|
||||||
|
fn main() {
|
||||||
|
student_passing_example();
|
||||||
|
println!("\n-----\n");
|
||||||
|
purchase_prediction_example();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn student_passing_example() {
|
||||||
|
println!("Example 1: exam pass prediction");
|
||||||
|
|
||||||
|
// Hours studied for each student
|
||||||
|
let hours = vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0];
|
||||||
|
// 0 = fail, 1 = pass
|
||||||
|
let passed = vec![0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0];
|
||||||
|
|
||||||
|
let x = Matrix::from_vec(hours.clone(), hours.len(), 1);
|
||||||
|
let y = Matrix::from_vec(passed.clone(), passed.len(), 1);
|
||||||
|
|
||||||
|
let mut model = LogReg::new(1);
|
||||||
|
model.fit(&x, &y, 0.1, 10000);
|
||||||
|
|
||||||
|
let preds = model.predict(&x);
|
||||||
|
println!("Hours -> pred | actual");
|
||||||
|
for i in 0..x.rows() {
|
||||||
|
println!(
|
||||||
|
"{:>2} -> {} | {}",
|
||||||
|
hours[i] as i32,
|
||||||
|
preds[(i, 0)] as i32,
|
||||||
|
passed[i] as i32
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Probability estimate for a new student
|
||||||
|
let new_student = Matrix::from_vec(vec![5.5], 1, 1);
|
||||||
|
let p = model.predict_proba(&new_student);
|
||||||
|
println!("Probability of passing with 5.5h study: {:.2}", p[(0, 0)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn purchase_prediction_example() {
|
||||||
|
println!("Example 2: purchase likelihood");
|
||||||
|
|
||||||
|
// minutes on site, pages viewed -> made a purchase?
|
||||||
|
let raw_x = vec![1.0, 2.0, 3.0, 1.0, 2.0, 4.0, 5.0, 5.0, 3.5, 2.0, 6.0, 6.0];
|
||||||
|
let bought = vec![0.0, 0.0, 0.0, 1.0, 0.0, 1.0];
|
||||||
|
|
||||||
|
let x = Matrix::from_rows_vec(raw_x, 6, 2);
|
||||||
|
let y = Matrix::from_vec(bought.clone(), bought.len(), 1);
|
||||||
|
|
||||||
|
let mut model = LogReg::new(2);
|
||||||
|
model.fit(&x, &y, 0.05, 20000);
|
||||||
|
|
||||||
|
let preds = model.predict(&x);
|
||||||
|
println!("time, pages -> pred | actual");
|
||||||
|
for i in 0..x.rows() {
|
||||||
|
println!(
|
||||||
|
"{:>4}m, {:>2} -> {} | {}",
|
||||||
|
x[(i, 0)],
|
||||||
|
x[(i, 1)] as i32,
|
||||||
|
preds[(i, 0)] as i32,
|
||||||
|
bought[i] as i32
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
let new_visit = Matrix::from_rows_vec(vec![4.0, 4.0], 1, 2);
|
||||||
|
let p = model.predict_proba(&new_visit);
|
||||||
|
println!("Prob of purchase for 4min/4pages: {:.2}", p[(0, 0)]);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user