Ejemplo n.º 1
0
        public override IRegressionModel Build(IRegressionProblemData pd, IRandom random, CancellationToken cancellationToken, out int numberOfParameters)
        {
            if (pd.Dataset.Rows < MinLeafSize(pd))
            {
                throw new ArgumentException("The number of training instances is too small to create a linear model");
            }
            numberOfParameters = pd.AllowedInputVariables.Count() + 1;

            double x1, x2;
            var    coeffs = ElasticNetLinearRegression.CalculateModelCoefficients(pd, 1, 0.2, out x1, out x2);

            numberOfParameters = coeffs.Length;
            return(ElasticNetLinearRegression.CreateSymbolicSolution(coeffs, pd).Model);
        }
Ejemplo n.º 2
0
        private void CalculateCoefficients(IEnumerable <BasisFunction> basisFunctions, out double[] lambda, out double[,] coeff, out double[] trainNMSE, out double[] testNMSE, out double[] intercept, out IRegressionProblemData elnetData)
        {
            elnetData = PrepareData(Problem.ProblemData, basisFunctions);

            if (Verbose)
            {
                Results.Add(new Result(
                                "Basis Functions",
                                "Dataset which contains the Basis Functions after FFX Step 1.",
                                elnetData
                                ));
            }

            // "real" iteration with all Basis Functions in X_b
            ElasticNetLinearRegression.RunElasticNetLinearRegression(elnetData, Penalty, out lambda, out trainNMSE, out testNMSE, out coeff, out intercept, double.NegativeInfinity, double.PositiveInfinity);
        }
Ejemplo n.º 3
0
        private IEnumerable <BasisFunction> CreateBasisFunctions()
        {
            IEnumerable <BasisFunction> basisFunctions = CreateUnivariateBases(Problem.ProblemData);

            if (Verbose)
            {
                Results.Add(new Result(
                                "Problem.ProblemData",
                                "The problem data the algorithm gets as input.",
                                Problem.ProblemData
                                ));
            }

            // wraps the list of basis functions in a dataset, so that it can be passed on to the ElNet function
            var elnetData = PrepareData(Problem.ProblemData, basisFunctions);

            if (Verbose)
            {
                Results.Add(new Result(
                                "Univariate basis Functions",
                                "A Dataset consisting of the univariate basis functions.",
                                elnetData
                                ));
            }

            if (ConsiderInteractions)
            {
                // for the purpose of efficiency, only the "most important" sqrt(n) basis functions are to be selected for the merge of multivariate bases step (see FFX paper)
                ElasticNetLinearRegression.RunElasticNetLinearRegression(elnetData, Penalty, out var lambda, out var trainNMSE, out var testNMSE, out var coeff, out var intercept);
                basisFunctions = FilterCoeffs(basisFunctions, coeff);
                basisFunctions = CreateMultivariateBases(basisFunctions);
                return(basisFunctions);
            }

            // add denominator bases to the already existing basis functions
            if (ConsiderDenominations)
            {
                basisFunctions = CreateDenominatorBases(Problem.ProblemData, basisFunctions);
            }
            return(basisFunctions);
        }