public void TestRidge() { var rng = new Random(0); const double alpha = 1.0; foreach (var solver in new[] { RidgeSolver.Svd, RidgeSolver.DenseCholesky, RidgeSolver.Lsqr }) { // With more samples than features int nSamples = 6; int nFeatures = 5; var normal = new Normal { RandomSource = rng }; Vector y = DenseVector.CreateRandom(nSamples, normal); Matrix x = DenseMatrix.CreateRandom(nSamples, nFeatures, normal); var ridge = new RidgeRegression(alpha: alpha, solver: solver); ridge.Fit(x, y); Assert.AreEqual(ridge.Coef.Row(0).Count, x.ColumnCount); Assert.IsTrue(ridge.Score(x, y) > 0.47); ridge.Fit(x, y, sampleWeight: DenseVector.Create(nSamples, i => 1.0)); Assert.IsTrue(ridge.Score(x, y) > 0.47); // With more features than samples nSamples = 5; nFeatures = 10; y = DenseVector.CreateRandom(nSamples, normal); x = DenseMatrix.CreateRandom(nSamples, nFeatures, normal); ridge = new RidgeRegression(alpha: alpha, solver: solver); ridge.Fit(x, y); Assert.IsTrue(ridge.Score(x, y) > 0.9); ridge.Fit(x, y, sampleWeight: DenseVector.Create(nSamples, i => 1.0)); Assert.IsTrue(ridge.Score(x, y) > 0.9); } }
private double?TestRidgeDiabetes(Func <Matrix <double>, Matrix <double> > filter) { var ridge = new RidgeRegression(fitIntercept: false); ridge.Fit(filter(xDiabetes), yDiabetes); return(Math.Round(ridge.Score(filter(xDiabetes), yDiabetes), 5)); }
private double?TestTolerance(Func <Matrix <double>, Matrix <double> > filter) { var ridge = new RidgeRegression(tol: 1e-5); ridge.Fit(filter(xDiabetes), yDiabetes); double score = ridge.Score(filter(xDiabetes), yDiabetes); var ridge2 = new RidgeRegression(tol: 1e-3); ridge2.Fit(filter(xDiabetes), yDiabetes); double score2 = ridge2.Score(filter(xDiabetes), yDiabetes); Assert.IsTrue(score >= score2); return(null); }
private double? TestTolerance(Func<Matrix<double>, Matrix<double>> filter) { var ridge = new RidgeRegression(tol: 1e-5); ridge.Fit(filter(xDiabetes), yDiabetes); double score = ridge.Score(filter(xDiabetes), yDiabetes); var ridge2 = new RidgeRegression(tol: 1e-3); ridge2.Fit(filter(xDiabetes), yDiabetes); double score2 = ridge2.Score(filter(xDiabetes), yDiabetes); Assert.IsTrue(score >= score2); return null; }
private double? TestRidgeDiabetes(Func<Matrix<double>, Matrix<double>> filter) { var ridge = new RidgeRegression(fitIntercept: false); ridge.Fit(filter(xDiabetes), yDiabetes); return Math.Round(ridge.Score(filter(xDiabetes), yDiabetes), 5); }