Ejemplo n.º 1
0
        private LinearRegressionModel(LinearRegressionModel original, Cloner cloner)
            : base(original, cloner)
        {
            this.W          = original.W;
            this.C          = original.C;
            this.NoiseSigma = original.NoiseSigma;

            doubleVariables      = (string[])original.doubleVariables.Clone();
            this.factorVariables = original.factorVariables.Select(kvp => new KeyValuePair <string, IEnumerable <string> >(kvp.Key, new List <string>(kvp.Value))).ToList();
        }
Ejemplo n.º 2
0
        public static IRegressionSolution CreateSolution(IRegressionProblemData problemData, out double rmsError, out double cvRmsError)
        {
            IEnumerable <string> doubleVariables;
            IEnumerable <KeyValuePair <string, IEnumerable <string> > > factorVariables;

            double[,] inputMatrix;
            PrepareData(problemData, out inputMatrix, out doubleVariables, out factorVariables);

            alglib.linearmodel lm = new alglib.linearmodel();
            alglib.lrreport    ar = new alglib.lrreport();
            int nRows             = inputMatrix.GetLength(0);
            int nFeatures         = inputMatrix.GetLength(1) - 1;

            int retVal = 1;

            alglib.lrbuild(inputMatrix, nRows, nFeatures, out retVal, out lm, out ar);
            if (retVal != 1)
            {
                throw new ArgumentException("Error in calculation of linear regression solution");
            }
            rmsError   = ar.rmserror;
            cvRmsError = ar.cvrmserror;

            // get parameters of the model
            double[] w;
            int      nVars;

            alglib.lrunpack(lm, out w, out nVars);

            // ar.c is the covariation matrix,  array[0..NVars,0..NVars].
            // C[i, j] = Cov(A[i], A[j])

            var solution = new LinearRegressionModel(w, ar.c, cvRmsError, problemData.TargetVariable, doubleVariables, factorVariables)
                           .CreateRegressionSolution((IRegressionProblemData)problemData.Clone());

            solution.Name = "Linear Regression Solution";
            return(solution);
        }