Exemplo n.º 1
0
 protected virtual double CalculateWeightUpdate(
     Matrix <double> matrixX,
     ILinearRegressionParams regressionParams,
     double diffSums,
     double currentWeightValue)
 {
     return(currentWeightValue - (((regressionParams.LearningRate * 1) / matrixX.RowCount) * diffSums));
 }
 public ILinearRegressionModel BuildModel(Matrix<double> matrixX, Vector<double> vectorY, ILinearRegressionParams linearRegressionParams)
 {
     var normalizationMatrix = Matrix<double>.Build.DenseIdentity(matrixX.ColumnCount, matrixX.ColumnCount) * regularizationConst;
     var xT = matrixX.Transpose();
     var xTx = xT.Multiply(matrixX) + normalizationMatrix;
     var inversedXTX = xTx.Inverse();
     var xTy = xT.Multiply(vectorY);
     return new LinearRegressionModel(inversedXTX.Multiply(xTy));
 }
 protected override double CalculateWeightUpdate(
     Matrix<double> matrixX, 
     ILinearRegressionParams regressionParams, 
     double diffSums,
     double currentWeightValue)
 {
     var update = base.CalculateWeightUpdate(matrixX, regressionParams, diffSums, currentWeightValue);
     var regularizationTerm = (regularizationConst / matrixX.RowCount) * currentWeightValue;
     return update - regularizationTerm;
 }
        protected override double CalculateWeightUpdate(
            Matrix <double> matrixX,
            ILinearRegressionParams regressionParams,
            double diffSums,
            double currentWeightValue)
        {
            var update             = base.CalculateWeightUpdate(matrixX, regressionParams, diffSums, currentWeightValue);
            var regularizationTerm = (regularizationConst / matrixX.RowCount) * currentWeightValue;

            return(update - regularizationTerm);
        }
        public ILinearRegressionModel BuildModel(Matrix<double> matrixX, Vector<double> vectorY, ILinearRegressionParams regressionParams)
        {
            var weightsVector = Vector<double>.Build.DenseOfArray(
                Enumerable.Range(0, matrixX.ColumnCount)
                .Select(fIdx => randomizer.NextDoubleInRange(weightsMin, weightsMax))
                .ToArray());
            double previousIterError = double.PositiveInfinity;
            for (int iterNo = 0; iterNo < iterations; iterNo++)
            {
                var vectorYHat = matrixX.Multiply(weightsVector);
                var diffVector = vectorYHat.Subtract(vectorY);
                var currentIterError = diffVector.Select(Math.Abs).Sum();
                if ((currentIterError <= stopLerningError) ||
                    currentIterError.AlmostEqual(previousIterError, 5))
                {
                    break;
                }
                for (int weightIdx = 0; weightIdx < weightsVector.Count; weightIdx++)
                {
                    var diffSums = 0.0;
                    for (int rowIdx = 0; rowIdx < matrixX.RowCount; rowIdx++)
                    {
                        diffSums += diffVector[rowIdx] * matrixX.Row(rowIdx)[weightIdx];
                    }
                    var newWeightValue = CalculateWeightUpdate(
                        matrixX,
                        regressionParams,
                        diffSums,
                        weightsVector[weightIdx]);
                    weightsVector[weightIdx] = newWeightValue;
                }
                previousIterError = currentIterError;
            }

            return new LinearRegressionModel(weightsVector);
        }
 public RegressionAndModelDecisionTreeLeafBuilder(ILinearRegressionModelBuilder modelBuilder, double learningRate = 0.05)
 {
     regressionModelBuilder = modelBuilder;
     regressionParams       = new LinearRegressionParams(learningRate);
 }
Exemplo n.º 7
0
        public ILinearRegressionModel BuildModel(Matrix <double> matrixX, Vector <double> vectorY, ILinearRegressionParams regressionParams)
        {
            var weightsVector = Vector <double> .Build.DenseOfArray(
                Enumerable.Range(0, matrixX.ColumnCount)
                .Select(fIdx => randomizer.NextDoubleInRange(weightsMin, weightsMax))
                .ToArray());

            double previousIterError = double.PositiveInfinity;

            for (int iterNo = 0; iterNo < iterations; iterNo++)
            {
                var vectorYHat       = matrixX.Multiply(weightsVector);
                var diffVector       = vectorYHat.Subtract(vectorY);
                var currentIterError = diffVector.Select(Math.Abs).Sum();
                if ((currentIterError <= stopLerningError) ||
                    currentIterError.AlmostEqual(previousIterError, 5))
                {
                    break;
                }
                for (int weightIdx = 0; weightIdx < weightsVector.Count; weightIdx++)
                {
                    var diffSums = 0.0;
                    for (int rowIdx = 0; rowIdx < matrixX.RowCount; rowIdx++)
                    {
                        diffSums += diffVector[rowIdx] * matrixX.Row(rowIdx)[weightIdx];
                    }
                    var newWeightValue = CalculateWeightUpdate(
                        matrixX,
                        regressionParams,
                        diffSums,
                        weightsVector[weightIdx]);
                    weightsVector[weightIdx] = newWeightValue;
                }
                previousIterError = currentIterError;
            }

            return(new LinearRegressionModel(weightsVector));
        }
 public RegressionAndModelDecisionTreeLeafBuilder(ILinearRegressionModelBuilder modelBuilder, double learningRate = 0.05)
 {
     regressionModelBuilder = modelBuilder;
     regressionParams = new LinearRegressionParams(learningRate);
 }
 protected virtual double CalculateWeightUpdate(
     Matrix<double> matrixX, 
     ILinearRegressionParams regressionParams, 
     double diffSums,
     double currentWeightValue)
 {
     return currentWeightValue - (((regressionParams.LearningRate * 1) / matrixX.RowCount) * diffSums);
 }
Exemplo n.º 10
0
        public ILinearRegressionModel BuildModel(Matrix <double> matrixX, Vector <double> vectorY, ILinearRegressionParams linearRegressionParams)
        {
            var normalizationMatrix = Matrix <double> .Build.DenseIdentity(matrixX.ColumnCount, matrixX.ColumnCount) * regularizationConst;

            var xT          = matrixX.Transpose();
            var xTx         = xT.Multiply(matrixX) + normalizationMatrix;
            var inversedXTX = xTx.Inverse();
            var xTy         = xT.Multiply(vectorY);

            return(new LinearRegressionModel(inversedXTX.Multiply(xTy)));
        }