コード例 #1
0
        public double CheckNewBasisFast(Basis basis, Basis basisReflected, double newKnotVal, Func <double[][], double[], double[]> solver, ref double [][] transformedData)
        {
            if (transformedData == null)
            {
                List <Basis> tempNewBasises = new List <Basis>(this.Basises);
                tempNewBasises.Add(basis);
                tempNewBasises.Add(basisReflected);
                transformedData = Recalc(tempNewBasises, Regressors);
            }
            else
            {
                int ncol = transformedData[0].Length - 2;
                int nrow = transformedData.Length;

                bool b1Warning = true;
                bool b2Warning = true;

                double b1Temp = 0.0;
                double b2Temp = 0.0;

                for (int i = 0; i < nrow; i++)
                {
                    transformedData[i][ncol]     += basis.CalcFastDependedOnPrevious(Regressors[i], newKnotVal, basis.Hinges[basis.Hinges.Count - 1].Value, i);
                    transformedData[i][ncol + 1] += basisReflected.CalcFastDependedOnPrevious(Regressors[i], newKnotVal, basis.Hinges[basis.Hinges.Count - 1].Value, i);

                    if (b1Warning)
                    {
                        b1Warning = b1Temp == transformedData[i][ncol];
                        b1Temp    = transformedData[i][ncol];
                    }

                    if (b2Warning)
                    {
                        b2Warning = b2Temp == transformedData[i][ncol];
                        b2Temp    = transformedData[i][ncol];
                    }
                }

                if (b1Warning || b2Warning)
                {
                    return(double.MaxValue);
                }
                //Console.WriteLine("Warn {0} {1} !" + ++_warns, b1Temp, b2Temp);
            }

            //var tempNewRegressionCoefficients = RegressionToolkit.CalculateLeastSquares(transformedData, Y);
            var tempNewRegressionCoefficients = solver(transformedData, Y);
            var tempNewpredicted = RegressionToolkit.Predict(tempNewRegressionCoefficients.ToArray(), transformedData);
            var tempNewRSS       = RegressionToolkit.CalcRSS(tempNewpredicted.ToArray(), Y);

            return(tempNewRSS);
        }
コード例 #2
0
        //public double[] YTransformed { get; set; }

        public double CheckNewBasis(Basis basis, Basis basisReflected)
        {
            List <Basis> tempNewBasises = new List <Basis>(this.Basises);

            tempNewBasises.Add(basis);
            tempNewBasises.Add(basisReflected);

            var transformedData = Recalc(tempNewBasises, Regressors);
            var tempNewRegressionCoefficients = RegressionToolkit.CalculateLeastSquares(transformedData, Y);
            var tempNewpredicted = RegressionToolkit.Predict(tempNewRegressionCoefficients.ToArray(), transformedData);
            var tempNewRSS       = RegressionToolkit.CalcRSS(tempNewpredicted.ToArray(), Y);

            return(tempNewRSS);
        }
コード例 #3
0
        public void Recalc()
        {
            RegressorsTransformed = Recalc(this.Basises, Regressors);
            //_regressionCoefficients = RegressionToolkit.CalculateLeastSquares(RegressorsTransformed, Y);
            //regressionCoefficients = PrepareAndCalcCholesskyFull(RegressorsTransformed, Y).ToList();

            //Задать V нужный размер
            _v = ResizeV(this._v, RegressorsTransformed[0].Length);
            //А C можно пересчитать прямо тут
            _c = __calcC(RegressorsTransformed);

            _regressionCoefficients = PrepareAndCalcCholesskyNewColumns(RegressorsTransformed, Y).ToList();
            var predicted = RegressionToolkit.Predict(_regressionCoefficients.ToArray(), RegressorsTransformed);

            _RSS = RegressionToolkit.CalcRSS(predicted.ToArray(), Y);
            _RSq = RegressionToolkit.CalcRSq(predicted.ToArray(), Y);
        }