pub fn ridge_fit(
x: &Matrix,
y: &[f64],
options: &RidgeFitOptions,
) -> Result<RidgeFit>Expand description
Fits ridge regression for a single lambda value.
§Arguments
x- Design matrix (n × p). Should include intercept column ifintercept=true.y- Response vector (n elements)options- Ridge fitting options
§Returns
A RidgeFit containing the fit results.
§Errors
Returns an error if:
lambda < 0- Dimensions don’t match
- Matrix is numerically singular
§Algorithm
Uses the augmented QR approach:
- Standardize X and center y (if requested)
- Build augmented system:
X_aug = [X_std; sqrt(lambda) * I_p] y_aug = [y_centered; 0_p] - Solve using QR decomposition
- Unstandardize coefficients
§Example
use linreg_core::linalg::Matrix;
use linreg_core::regularized::ridge::{ridge_fit, RidgeFitOptions};
let x = Matrix::new(3, 2, vec![
1.0, 2.0,
1.0, 3.0,
1.0, 4.0,
]);
let y = vec![3.0, 5.0, 7.0];
let options = RidgeFitOptions {
lambda: 1.0,
intercept: true,
standardize: true,
};
let fit = ridge_fit(&x, &y, &options).unwrap();
println!("Intercept: {}", fit.intercept);
println!("Coefficients: {:?}", fit.coefficients);