diff --git a/src/linear/lasso.rs b/src/linear/lasso.rs index 62d96efa..59c60ddc 100644 --- a/src/linear/lasso.rs +++ b/src/linear/lasso.rs @@ -166,7 +166,7 @@ pub struct LassoSearchParameters { /// The maximum number of iterations pub max_iter: Vec, #[cfg_attr(feature = "serde", serde(default))] - /// The maximum number of iterations + /// If false, force the intercept parameter (beta_0) to be zero. pub fit_intercept: Vec, } diff --git a/src/linear/lasso_optimizer.rs b/src/linear/lasso_optimizer.rs index fe099cd3..b2efe19f 100644 --- a/src/linear/lasso_optimizer.rs +++ b/src/linear/lasso_optimizer.rs @@ -53,6 +53,7 @@ impl> InteriorPointOptimizer { let lambda = lambda.max(T::epsilon()); //parameters + let max_ls_iter = 100; let pcgmaxi = 5000; let min_pcgtol = T::from_f64(0.1).unwrap(); let eta = T::from_f64(1E-3).unwrap(); @@ -68,7 +69,6 @@ impl> InteriorPointOptimizer { y.to_owned() }; - let mut max_ls_iter = 100; let mut pitr = 0; let mut w = Vec::zeros(p); let mut neww = w.clone(); @@ -170,7 +170,7 @@ impl> InteriorPointOptimizer { s = T::one(); let gdx = grad.dot(&dxu); - let lsiter = 0; + let mut lsiter = 0; while lsiter < max_ls_iter { for i in 0..p { neww[i] = w[i] + s * dx[i]; @@ -195,7 +195,7 @@ impl> InteriorPointOptimizer { } } s = beta * s; - max_ls_iter += 1; + lsiter += 1; } if lsiter == max_ls_iter {