peroxide/ml/
reg.rs

1use crate::structure::polynomial::Polynomial;
2
3/// Simple Least Square 2D
4///
5/// # Type
6///
7/// `(Vec<f64>, Vec<f64>) -> Polynomial`
8///
9/// # Examples
10/// ```
11/// #[macro_use]
12/// extern crate peroxide;
13/// use peroxide::fuga::*;
14///
15/// fn main() {
16///     let a = c!(1,2,3,4,5);
17///     let b = c!(1.2, 1.8, 3.2, 3.8, 5.0);
18///     let ls = least_square(a, b);
19///     ls.print(); // 0.96x + 0.1200
20/// }
21/// ```
22pub fn least_square(node_x: Vec<f64>, node_y: Vec<f64>) -> Polynomial {
23    let l = node_x.len();
24    assert_eq!(l, node_y.len());
25
26    let mut x_bar = 0f64;
27    let mut t_bar = 0f64;
28    let mut xt_bar = 0f64;
29    let mut x_sq_bar = 0f64;
30    for i in 0..l {
31        let x = node_x[i];
32        let t = node_y[i];
33
34        x_bar += x;
35        t_bar += t;
36        xt_bar += x * t;
37        x_sq_bar += x * x;
38    }
39    x_bar /= l as f64;
40    t_bar /= l as f64;
41    xt_bar /= l as f64;
42    x_sq_bar /= l as f64;
43
44    let x_bar_sq = x_bar.clone() * x_bar.clone();
45    let x_bar_t_bar = x_bar.clone() * t_bar.clone();
46
47    let w1 = (xt_bar - x_bar_t_bar) / (x_sq_bar - x_bar_sq);
48    let w0 = t_bar - w1 * x_bar;
49
50    Polynomial::new(vec![w1, w0])
51}
52
53// Polynomial Regression
54//pub fn poly_reg(node_x: Vec<f64>, node_y: Vec<f64>) -> Polynomial {
55//    let n = node_x.len();
56//    assert_eq!(n, node_y.len());
57//    let a = matrix(vec![1f64; n], n, 1, Col);
58//
59//}