From 13ede7dc3ad9a07761271d82d9552d3d721168a1 Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Thu, 28 Nov 2013 09:34:05 +0100 Subject: [PATCH] Linear Regression: use more efficient LA routines (via tibel) --- src/Numerics/LinearRegression/MultipleRegression.cs | 6 +++--- src/Numerics/LinearRegression/WeightedRegression.cs | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Numerics/LinearRegression/MultipleRegression.cs b/src/Numerics/LinearRegression/MultipleRegression.cs index c215f28d..f33419d3 100644 --- a/src/Numerics/LinearRegression/MultipleRegression.cs +++ b/src/Numerics/LinearRegression/MultipleRegression.cs @@ -45,7 +45,7 @@ namespace MathNet.Numerics.LinearRegression /// Best fitting vector for model parameters β public static Vector NormalEquations(Matrix x, Vector y) where T : struct, IEquatable, IFormattable { - return x.TransposeThisAndMultiply(x).Cholesky().Solve(x.Transpose()*y); + return x.TransposeThisAndMultiply(x).Cholesky().Solve(x.TransposeThisAndMultiply(y)); } /// @@ -57,7 +57,7 @@ namespace MathNet.Numerics.LinearRegression /// Best fitting vector for model parameters β public static Matrix NormalEquations(Matrix x, Matrix y) where T : struct, IEquatable, IFormattable { - return x.TransposeThisAndMultiply(x).Cholesky().Solve(x.Transpose() * y); + return x.TransposeThisAndMultiply(x).Cholesky().Solve(x.TransposeThisAndMultiply(y)); } /// @@ -76,7 +76,7 @@ namespace MathNet.Numerics.LinearRegression predictor = predictor.InsertColumn(0, Vector.Build.Dense(predictor.RowCount, Vector.One)); } var response = Vector.Build.Dense(y); - return predictor.TransposeThisAndMultiply(predictor).Cholesky().Solve(predictor.Transpose()*response).ToArray(); + return predictor.TransposeThisAndMultiply(predictor).Cholesky().Solve(predictor.TransposeThisAndMultiply(response)).ToArray(); } /// diff --git a/src/Numerics/LinearRegression/WeightedRegression.cs b/src/Numerics/LinearRegression/WeightedRegression.cs index 15409756..3a6b80a9 100644 --- a/src/Numerics/LinearRegression/WeightedRegression.cs +++ b/src/Numerics/LinearRegression/WeightedRegression.cs @@ -42,7 +42,7 @@ namespace MathNet.Numerics.LinearRegression /// public static Vector Weighted(Matrix x, Vector y, Matrix w) where T : struct, IEquatable, IFormattable { - return x.TransposeThisAndMultiply(w*x).Cholesky().Solve(x.Transpose()*(w*y)); + return x.TransposeThisAndMultiply(w*x).Cholesky().Solve(x.TransposeThisAndMultiply(w*y)); } /// @@ -50,7 +50,7 @@ namespace MathNet.Numerics.LinearRegression /// public static Matrix Weighted(Matrix x, Matrix y, Matrix w) where T : struct, IEquatable, IFormattable { - return x.TransposeThisAndMultiply(w*x).Cholesky().Solve(x.Transpose()*(w*y)); + return x.TransposeThisAndMultiply(w*x).Cholesky().Solve(x.TransposeThisAndMultiply(w*y)); } /// @@ -65,8 +65,8 @@ namespace MathNet.Numerics.LinearRegression predictor = predictor.InsertColumn(0, Vector.Build.Dense(predictor.RowCount, Vector.One)); } var response = Vector.Build.Dense(y); - var weights = Matrix.Build.Diagonal(new DiagonalMatrixStorage(predictor.RowCount, predictor.RowCount, w)); - return predictor.TransposeThisAndMultiply(weights*predictor).Cholesky().Solve(predictor.Transpose()*(weights*response)).ToArray(); + var weights = Matrix.Build.DenseOfDiagonalArray(w); + return predictor.TransposeThisAndMultiply(weights*predictor).Cholesky().Solve(predictor.TransposeThisAndMultiply(weights*response)).ToArray(); } ///