コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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;
        }
コード例 #6
0
 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);
 }