Changeset 13721
- Timestamp:
- 03/23/16 16:19:04 (9 years ago)
- Location:
- trunk/sources
- Files:
-
- 32 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GBM/GradientBoostingRegressionAlgorithm.cs
r13707 r13721 317 317 // just produce an ensemble solution for now (TODO: correct scaling or linear regression for ensemble model weights) 318 318 319 var ensembleModel = new RegressionEnsembleModel(models) { AverageModelEstimates = false }; 320 var ensembleSolution = ensembleModel.CreateRegressionSolution((IRegressionProblemData)problemData.Clone()); 319 var ensembleSolution = CreateEnsembleSolution(models, (IRegressionProblemData)problemData.Clone()); 321 320 Results.Add(new Result("EnsembleSolution", ensembleSolution)); 322 321 } … … 326 325 alg.Prepare(true); 327 326 } 327 } 328 329 private static IRegressionEnsembleSolution CreateEnsembleSolution(List<IRegressionModel> models, 330 IRegressionProblemData problemData) { 331 var rows = problemData.TrainingPartition.Size; 332 var features = models.Count; 333 double[,] inputMatrix = new double[rows, features + 1]; 334 335 //add model estimates 336 for (int m = 0; m < models.Count; m++) { 337 var model = models[m]; 338 var estimates = model.GetEstimatedValues(problemData.Dataset, problemData.TrainingIndices); 339 int estimatesCounter = 0; 340 foreach (var estimate in estimates) { 341 inputMatrix[estimatesCounter, m] = estimate; 342 estimatesCounter++; 343 } 344 } 345 346 //add target 347 var targets = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, problemData.TrainingIndices); 348 int targetCounter = 0; 349 foreach (var target in targets) { 350 inputMatrix[targetCounter, models.Count] = target; 351 targetCounter++; 352 } 353 354 alglib.linearmodel lm = new alglib.linearmodel(); 355 alglib.lrreport ar = new alglib.lrreport(); 356 double[] coefficients; 357 int retVal = 1; 358 alglib.lrbuildz(inputMatrix, rows, features, out retVal, out lm, out ar); 359 if (retVal != 1) throw new ArgumentException("Error in calculation of linear regression solution"); 360 361 alglib.lrunpack(lm, out coefficients, out features); 362 363 var ensembleModel = new RegressionEnsembleModel(models, coefficients.Take(models.Count)) { AverageModelEstimates = false }; 364 var ensembleSolution = ensembleModel.CreateRegressionSolution((IRegressionProblemData)problemData.Clone()); 365 return ensembleSolution; 328 366 } 329 367 -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceConst.cs
r12012 r13721 83 83 } 84 84 85 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {85 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 86 86 double scale; 87 87 GetParameterValues(p, out scale); … … 98 98 } 99 99 100 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double scale, IEnumerable<int>columnIndices) {100 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double scale, int[] columnIndices) { 101 101 yield return 2.0 * scale; 102 102 } -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceLinear.cs
r12012 r13721 21 21 22 22 using System; 23 using System.Collections.Generic;24 23 using System.Linq; 25 24 using HeuristicLab.Common; … … 52 51 } 53 52 54 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {53 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 55 54 if (p.Length > 0) throw new ArgumentException("No parameters are allowed for the linear covariance function."); 56 55 // create functions 57 56 var cov = new ParameterizedCovarianceFunction(); 58 cov.Covariance = (x, i, j) => Util.ScalarProd(x, i, j, 1, columnIndices);59 cov.CrossCovariance = (x, xt, i, j) => Util.ScalarProd(x, i, xt, j, 1.0 , columnIndices);57 cov.Covariance = (x, i, j) => Util.ScalarProd(x, i, j, columnIndices, 1.0); 58 cov.CrossCovariance = (x, xt, i, j) => Util.ScalarProd(x, i, xt, j, columnIndices, 1.0); 60 59 cov.CovarianceGradient = (x, i, j) => Enumerable.Empty<double>(); 61 60 return cov; -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceLinearArd.cs
r12012 r13721 81 81 } 82 82 83 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {83 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 84 84 double[] inverseLength; 85 85 GetParameterValues(p, out inverseLength); … … 96 96 } 97 97 98 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double[] inverseLength, IEnumerable<int>columnIndices) {98 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double[] inverseLength, int[] columnIndices) { 99 99 int k = 0; 100 foreach (int columnIndex in columnIndices) { 100 for (int c = 0; c < columnIndices.Length; c++) { 101 var columnIndex = columnIndices[c]; 101 102 yield return -2.0 * x[i, columnIndex] * x[j, columnIndex] * inverseLength[k] * inverseLength[k]; 102 103 k++; -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceMask.cs
r12012 r13721 20 20 #endregion 21 21 22 using System;23 using System.Collections.Generic;24 22 using System.Linq; 25 using System.Linq.Expressions;26 23 using HeuristicLab.Common; 27 24 using HeuristicLab.Core; … … 73 70 } 74 71 75 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {72 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 76 73 var cov = CovarianceFunctionParameter.Value; 77 74 var selectedDimensions = SelectedDimensionsParameter.Value; 78 75 79 return cov.GetParameterizedCovarianceFunction(p, selectedDimensions.Intersect(columnIndices) );76 return cov.GetParameterizedCovarianceFunction(p, selectedDimensions.Intersect(columnIndices).ToArray()); 80 77 } 81 78 } -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceMaternIso.cs
r12012 r13721 111 111 } 112 112 113 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {113 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 114 114 double inverseLength, scale; 115 115 int d = DParameter.Value.Value; … … 122 122 double dist = i == j 123 123 ? 0.0 124 : Math.Sqrt(Util.SqrDist(x, i, j, Math.Sqrt(d) * inverseLength, columnIndices));124 : Math.Sqrt(Util.SqrDist(x, i, j, columnIndices, Math.Sqrt(d) * inverseLength)); 125 125 return scale * m(d, dist); 126 126 }; 127 127 cov.CrossCovariance = (x, xt, i, j) => { 128 double dist = Math.Sqrt(Util.SqrDist(x, i, xt, j, Math.Sqrt(d) * inverseLength, columnIndices));128 double dist = Math.Sqrt(Util.SqrDist(x, i, xt, j, columnIndices, Math.Sqrt(d) * inverseLength)); 129 129 return scale * m(d, dist); 130 130 }; … … 156 156 157 157 158 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, int d, double scale, double inverseLength, IEnumerable<int>columnIndices,158 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, int d, double scale, double inverseLength, int[] columnIndices, 159 159 bool fixedInverseLength, bool fixedScale) { 160 160 double dist = i == j 161 161 ? 0.0 162 : Math.Sqrt(Util.SqrDist(x, i, j, Math.Sqrt(d) * inverseLength, columnIndices));162 : Math.Sqrt(Util.SqrDist(x, i, j, columnIndices, Math.Sqrt(d) * inverseLength)); 163 163 164 164 if (!fixedInverseLength) yield return scale * dm(d, dist); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceNeuralNetwork.cs
r12012 r13721 102 102 } 103 103 104 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {104 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 105 105 double length, scale; 106 106 GetParameterValues(p, out scale, out length); … … 113 113 double s1 = 1.0; 114 114 double s2 = 1.0; 115 foreach (var col in columnIndices) { 115 for (int c = 0; c < columnIndices.Length; c++) { 116 var col = columnIndices[c]; 116 117 sx += x[i, col] * x[j, col]; 117 118 s1 += x[i, col] * x[i, col]; … … 125 126 double s1 = 1.0; 126 127 double s2 = 1.0; 127 foreach (var col in columnIndices) { 128 for (int c = 0; c < columnIndices.Length; c++) { 129 var col = columnIndices[c]; 128 130 sx += x[i, col] * xt[j, col]; 129 131 s1 += x[i, col] * x[i, col]; … … 138 140 139 141 // order of returned gradients must match the order in GetParameterValues! 140 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double length, double scale, IEnumerable<int>columnIndices,142 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double length, double scale, int[] columnIndices, 141 143 bool fixedLength, bool fixedScale) { 142 144 { … … 144 146 double s1 = 1.0; 145 147 double s2 = 1.0; 146 foreach (var col in columnIndices) { 148 for (int c = 0; c < columnIndices.Length; c++) { 149 var col = columnIndices[c]; 147 150 sx += x[i, col] * x[j, col]; 148 151 s1 += x[i, col] * x[i, col]; -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceNoise.cs
r12012 r13721 21 21 22 22 using System; 23 using System.Collections.Generic;24 23 using System.Linq; 25 24 using HeuristicLab.Common; … … 84 83 } 85 84 86 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {85 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 87 86 double scale; 88 87 GetParameterValues(p, out scale); … … 91 90 var cov = new ParameterizedCovarianceFunction(); 92 91 cov.Covariance = (x, i, j) => i == j ? scale : 0.0; 93 cov.CrossCovariance = (x, xt, i, j) => Util.SqrDist(x, i, xt, j, 1.0, columnIndices) < 1e-9 ? scale : 0.0;92 cov.CrossCovariance = (x, xt, i, j) => Util.SqrDist(x, i, xt, j, columnIndices, 1.0) < 1e-9 ? scale : 0.0; 94 93 if (fixedScale) 95 94 cov.CovarianceGradient = (x, i, j) => Enumerable.Empty<double>(); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovariancePeriodic.cs
r12012 r13721 117 117 } 118 118 119 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {119 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[]columnIndices) { 120 120 double inverseLength, period, scale; 121 121 GetParameterValues(p, out scale, out period, out inverseLength); … … 146 146 147 147 148 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, IEnumerable<int>columnIndices, double scale, double period, double inverseLength,148 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, int[] columnIndices, double scale, double period, double inverseLength, 149 149 bool fixedInverseLength, bool fixedPeriod, bool fixedScale) { 150 150 double k = i == j ? 0.0 : Math.PI * GetDistance(x, x, i, j, columnIndices) / period; … … 161 161 } 162 162 163 private static double GetDistance(double[,] x, double[,] xt, int i, int j, IEnumerable<int>columnIndices) {164 return Math.Sqrt(Util.SqrDist(x, i, xt, j, 1, columnIndices));163 private static double GetDistance(double[,] x, double[,] xt, int i, int j, int[] columnIndices) { 164 return Math.Sqrt(Util.SqrDist(x, i, xt, j, columnIndices, 1)); 165 165 } 166 166 } -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovariancePiecewisePolynomial.cs
r12012 r13721 113 113 } 114 114 115 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {115 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 116 116 double length, scale; 117 117 int v = VParameter.Value.Value; … … 148 148 var cov = new ParameterizedCovarianceFunction(); 149 149 cov.Covariance = (x, i, j) => { 150 double k = Math.Sqrt(Util.SqrDist(x, i, x, j, 1.0 / length, columnIndices));150 double k = Math.Sqrt(Util.SqrDist(x, i, x, j, columnIndices, 1.0 / length)); 151 151 return scale * Math.Pow(Math.Max(1 - k, 0), exp + v) * f(k); 152 152 }; 153 153 cov.CrossCovariance = (x, xt, i, j) => { 154 double k = Math.Sqrt(Util.SqrDist(x, i, xt, j, 1.0 / length, columnIndices));154 double k = Math.Sqrt(Util.SqrDist(x, i, xt, j, columnIndices, 1.0 / length)); 155 155 return scale * Math.Pow(Math.Max(1 - k, 0), exp + v) * f(k); 156 156 }; … … 159 159 } 160 160 161 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double length, double scale, int v, double exp, Func<double, double> f, Func<double, double> df, IEnumerable<int>columnIndices,161 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double length, double scale, int v, double exp, Func<double, double> f, Func<double, double> df, int[] columnIndices, 162 162 bool fixedLength, bool fixedScale) { 163 double k = Math.Sqrt(Util.SqrDist(x, i, x, j, 1.0 / length, columnIndices));163 double k = Math.Sqrt(Util.SqrDist(x, i, x, j, columnIndices, 1.0 / length)); 164 164 if (!fixedLength) yield return scale * Math.Pow(Math.Max(1.0 - k, 0), exp + v - 1) * k * ((exp + v) * f(k) - Math.Max(1 - k, 0) * df(k)); 165 165 if (!fixedScale) yield return 2.0 * scale * Math.Pow(Math.Max(1 - k, 0), exp + v) * f(k); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovariancePolynomial.cs
r12012 r13721 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Linq;25 24 using HeuristicLab.Common; 26 25 using HeuristicLab.Core; … … 107 106 } 108 107 109 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {108 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 110 109 double @const, scale; 111 110 int degree = DegreeParameter.Value.Value; … … 116 115 // create functions 117 116 var cov = new ParameterizedCovarianceFunction(); 118 cov.Covariance = (x, i, j) => scale * Math.Pow(@const + Util.ScalarProd(x, i, j, 1.0, columnIndices), degree);119 cov.CrossCovariance = (x, xt, i, j) => scale * Math.Pow(@const + Util.ScalarProd(x, i, xt, j, 1.0, columnIndices), degree);117 cov.Covariance = (x, i, j) => scale * Math.Pow(@const + Util.ScalarProd(x, i, j, columnIndices, 1.0), degree); 118 cov.CrossCovariance = (x, xt, i, j) => scale * Math.Pow(@const + Util.ScalarProd(x, i, xt, j, columnIndices, 1.0), degree); 120 119 cov.CovarianceGradient = (x, i, j) => GetGradient(x, i, j, @const, scale, degree, columnIndices, fixedConst, fixedScale); 121 120 return cov; 122 121 } 123 122 124 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double c, double scale, int degree, IEnumerable<int>columnIndices,123 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double c, double scale, int degree, int[] columnIndices, 125 124 bool fixedConst, bool fixedScale) { 126 double s = Util.ScalarProd(x, i, j, 1.0, columnIndices);125 double s = Util.ScalarProd(x, i, j, columnIndices, 1.0); 127 126 if (!fixedConst) yield return c * degree * scale * Math.Pow(c + s, degree - 1); 128 127 if (!fixedScale) yield return 2 * scale * Math.Pow(c + s, degree); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceProduct.cs
r12012 r13721 76 76 } 77 77 78 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {78 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 79 79 if (factors.Count == 0) throw new ArgumentException("at least one factor is necessary for the product covariance function."); 80 80 var functions = new List<ParameterizedCovarianceFunction>(); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceRationalQuadraticArd.cs
r12012 r13721 121 121 } 122 122 123 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {123 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 124 124 double scale, shape; 125 125 double[] inverseLength; … … 144 144 } 145 145 146 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, IEnumerable<int>columnIndices, double scale, double shape, double[] inverseLength,146 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, int[] columnIndices, double scale, double shape, double[] inverseLength, 147 147 bool fixedInverseLength, bool fixedScale, bool fixedShape) { 148 148 double d = i == j -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceRationalQuadraticIso.cs
r12012 r13721 117 117 } 118 118 119 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {119 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 120 120 double scale, shape, inverseLength; 121 121 GetParameterValues(p, out scale, out shape, out inverseLength); … … 128 128 double d = i == j 129 129 ? 0.0 130 : Util.SqrDist(x, i, j, inverseLength, columnIndices);130 : Util.SqrDist(x, i, j, columnIndices, inverseLength); 131 131 return scale * Math.Pow(1 + 0.5 * d / shape, -shape); 132 132 }; 133 133 cov.CrossCovariance = (x, xt, i, j) => { 134 double d = Util.SqrDist(x, i, xt, j, inverseLength, columnIndices);134 double d = Util.SqrDist(x, i, xt, j, columnIndices, inverseLength); 135 135 return scale * Math.Pow(1 + 0.5 * d / shape, -shape); 136 136 }; … … 139 139 } 140 140 141 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, IEnumerable<int>columnIndices, double scale, double shape, double inverseLength,141 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, int[] columnIndices, double scale, double shape, double inverseLength, 142 142 bool fixedInverseLength, bool fixedScale, bool fixedShape) { 143 143 double d = i == j 144 144 ? 0.0 145 : Util.SqrDist(x, i, j, inverseLength, columnIndices);145 : Util.SqrDist(x, i, j, columnIndices, inverseLength); 146 146 147 147 double b = 1 + 0.5 * d / shape; -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceScale.cs
r12012 r13721 87 87 } 88 88 89 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {89 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 90 90 double scale; 91 91 GetParameterValues(p, out scale); … … 100 100 } 101 101 102 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, IEnumerable<int>columnIndices, double scale, ParameterizedCovarianceFunction cov,102 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, int[] columnIndices, double scale, ParameterizedCovarianceFunction cov, 103 103 bool fixedScale) { 104 104 if (!fixedScale) { -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceSpectralMixture.cs
r12012 r13721 23 23 using System.Collections.Generic; 24 24 using System.Linq; 25 using System.Linq.Expressions;26 25 using HeuristicLab.Common; 27 26 using HeuristicLab.Core; … … 131 130 } 132 131 133 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {132 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 134 133 double[] weight, frequency, lengthScale; 135 134 GetParameterValues(p, out weight, out frequency, out lengthScale); … … 152 151 } 153 152 154 private static double GetCovariance(double[,] x, double[,] xt, int i, int j, int maxQ, double[] weight, double[] frequency, double[] lengthScale, IEnumerable<int>columnIndices) {153 private static double GetCovariance(double[,] x, double[,] xt, int i, int j, int maxQ, double[] weight, double[] frequency, double[] lengthScale, int[] columnIndices) { 155 154 // tau = x - x' (only for selected variables) 156 155 double[] tau = … … 164 163 int idx = 0; // helper index for tau 165 164 // for each selected variable 166 foreach (var c in columnIndices) { 167 kc *= f1(tau[idx], lengthScale[q * numberOfVariables + c]) * f2(tau[idx], frequency[q * numberOfVariables + c]); 165 for (int c = 0; c < columnIndices.Length; c++) { 166 var col = columnIndices[c]; 167 kc *= f1(tau[idx], lengthScale[q * numberOfVariables + col]) * f2(tau[idx], frequency[q * numberOfVariables + col]); 168 168 idx++; 169 169 } … … 181 181 182 182 // order of returned gradients must match the order in GetParameterValues! 183 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, int maxQ, double[] weight, double[] frequency, double[] lengthScale, IEnumerable<int>columnIndices,183 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, int maxQ, double[] weight, double[] frequency, double[] lengthScale, int[] columnIndices, 184 184 bool fixedWeight, bool fixedFrequency, bool fixedLengthScale) { 185 185 double[] tau = Util.GetRow(x, i, columnIndices).Zip(Util.GetRow(x, j, columnIndices), (xi, xj) => xi - xj).ToArray(); … … 193 193 int idx = 0; // helper index for tau 194 194 // for each selected variable 195 foreach (var c in columnIndices) { 196 k *= f1(tau[idx], lengthScale[q * numberOfVariables + c]) * f2(tau[idx], frequency[q * numberOfVariables + c]); 195 for (int c = 0; c < columnIndices.Length; c++) { 196 var col = columnIndices[c]; 197 k *= f1(tau[idx], lengthScale[q * numberOfVariables + col]) * f2(tau[idx], frequency[q * numberOfVariables + col]); 197 198 idx++; 198 199 } -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceSquaredExponentialArd.cs
r12012 r13721 99 99 } 100 100 101 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {101 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 102 102 double scale; 103 103 double[] inverseLength; … … 122 122 123 123 // order of returned gradients must match the order in GetParameterValues! 124 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, IEnumerable<int>columnIndices, double scale, double[] inverseLength,124 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, int[] columnIndices, double scale, double[] inverseLength, 125 125 bool fixedInverseLength, bool fixedScale) { 126 126 double d = i == j … … 130 130 int k = 0; 131 131 if (!fixedInverseLength) { 132 foreach (var columnIndex in columnIndices) { 132 for (int c = 0; c < columnIndices.Length; c++) { 133 var columnIndex = columnIndices[c]; 133 134 double sqrDist = Util.SqrDist(x[i, columnIndex] * inverseLength[k], x[j, columnIndex] * inverseLength[k]); 134 135 yield return scale * Math.Exp(-d / 2.0) * sqrDist; -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceSquaredExponentialIso.cs
r12012 r13721 22 22 using System; 23 23 using System.Collections.Generic; 24 using System.Linq.Expressions;25 24 using HeuristicLab.Common; 26 25 using HeuristicLab.Core; … … 104 103 } 105 104 106 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {105 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 107 106 double inverseLength, scale; 108 107 GetParameterValues(p, out scale, out inverseLength); … … 114 113 double d = i == j 115 114 ? 0.0 116 : Util.SqrDist(x, i, j, inverseLength, columnIndices);115 : Util.SqrDist(x, i, j, columnIndices, inverseLength); 117 116 return scale * Math.Exp(-d / 2.0); 118 117 }; 119 118 cov.CrossCovariance = (x, xt, i, j) => { 120 double d = Util.SqrDist(x, i, xt, j, inverseLength, columnIndices);119 double d = Util.SqrDist(x, i, xt, j, columnIndices, inverseLength); 121 120 return scale * Math.Exp(-d / 2.0); 122 121 }; … … 127 126 128 127 // order of returned gradients must match the order in GetParameterValues! 129 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double sf2, double inverseLength, IEnumerable<int> columnIndices,128 private static IEnumerable<double> GetGradient(double[,] x, int i, int j, double sf2, double inverseLength, int[] columnIndices, 130 129 bool fixedInverseLength, bool fixedScale) { 131 130 double d = i == j 132 131 ? 0.0 133 : Util.SqrDist(x, i, j, inverseLength, columnIndices);132 : Util.SqrDist(x, i, j, columnIndices, inverseLength); 134 133 double g = Math.Exp(-d / 2.0); 135 134 if (!fixedInverseLength) yield return sf2 * g * d; -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceSum.cs
r12012 r13721 23 23 using System.Collections.Generic; 24 24 using System.Linq; 25 using System.Linq.Expressions;26 25 using HeuristicLab.Common; 27 26 using HeuristicLab.Core; … … 76 75 } 77 76 78 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices) {77 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices) { 79 78 if (terms.Count == 0) throw new ArgumentException("at least one term is necessary for the product covariance function."); 80 79 var functions = new List<ParameterizedCovarianceFunction>(); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModel.cs
r13160 r13721 167 167 try { 168 168 CalculateModel(ds, rows, scaleInputs); 169 } catch (alglib.alglibexception ae) { 169 } 170 catch (alglib.alglibexception ae) { 170 171 // wrap exception so that calling code doesn't have to know about alglib implementation 171 172 throw new ArgumentException("There was a problem in the calculation of the Gaussian process model", ae); … … 185 186 int n = x.GetLength(0); 186 187 188 var columns = Enumerable.Range(0, x.GetLength(1)).ToArray(); 187 189 // calculate cholesky decomposed (lower triangular) covariance matrix 188 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, Enumerable.Range(0, x.GetLength(1)));190 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, columns); 189 191 this.l = CalculateL(x, cov, sqrSigmaNoise); 190 192 191 193 // calculate mean 192 var mean = meanFunction.GetParameterizedMeanFunction(meanParameter, Enumerable.Range(0, x.GetLength(1)));194 var mean = meanFunction.GetParameterizedMeanFunction(meanParameter, columns); 193 195 double[] m = Enumerable.Range(0, x.GetLength(0)) 194 196 .Select(r => mean.Mean(x, r)) … … 227 229 double[] meanGradients = new double[meanFunction.GetNumberOfParameters(nAllowedVariables)]; 228 230 for (int k = 0; k < meanGradients.Length; k++) { 229 var meanGrad = Enumerable.Range(0, alpha.Length) 230 .Select(r => mean.Gradient(x, r, k)); 231 var meanGrad = new double[alpha.Length]; 232 for (int g = 0; g < meanGrad.Length; g++) 233 meanGrad[g] = mean.Gradient(x, g, k); 231 234 meanGradients[k] = -Util.ScalarProd(meanGrad, alpha); 232 235 } … … 320 323 int newN = newX.GetLength(0); 321 324 322 var Ks = new double[newN, n]; 323 var mean = meanFunction.GetParameterizedMeanFunction(meanParameter, Enumerable.Range(0, newX.GetLength(1))); 325 var Ks = new double[newN][]; 326 var columns = Enumerable.Range(0, newX.GetLength(1)).ToArray(); 327 var mean = meanFunction.GetParameterizedMeanFunction(meanParameter, columns); 324 328 var ms = Enumerable.Range(0, newX.GetLength(0)) 325 329 .Select(r => mean.Mean(newX, r)) 326 330 .ToArray(); 327 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, Enumerable.Range(0, newX.GetLength(1)));331 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, columns); 328 332 for (int i = 0; i < newN; i++) { 333 Ks[i] = new double[n]; 329 334 for (int j = 0; j < n; j++) { 330 Ks[i ,j] = cov.CrossCovariance(x, newX, j, i);335 Ks[i][j] = cov.CrossCovariance(x, newX, j, i); 331 336 } 332 337 } 333 338 334 339 return Enumerable.Range(0, newN) 335 .Select(i => ms[i] + Util.ScalarProd(Util.GetRow(Ks, i), alpha)); 336 } catch (alglib.alglibexception ae) { 340 .Select(i => ms[i] + Util.ScalarProd(Ks[i], alpha)); 341 } 342 catch (alglib.alglibexception ae) { 337 343 // wrap exception so that calling code doesn't have to know about alglib implementation 338 344 throw new ArgumentException("There was a problem in the calculation of the Gaussian process model", ae); … … 352 358 var kss = new double[newN]; 353 359 double[,] sWKs = new double[n, newN]; 354 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, Enumerable.Range(0, x.GetLength(1))); 360 var columns = Enumerable.Range(0, newX.GetLength(1)).ToArray(); 361 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, columns); 355 362 356 363 if (l == null) { … … 372 379 373 380 for (int i = 0; i < newN; i++) { 374 var sumV = Util.ScalarProd(Util.GetCol(sWKs, i), Util.GetCol(sWKs, i)); 381 var col = Util.GetCol(sWKs, i).ToArray(); 382 var sumV = Util.ScalarProd(col, col); 375 383 kss[i] += sqrSigmaNoise; // kss is V(f), add noise variance of predictive distibution to get V(y) 376 384 kss[i] -= sumV; … … 378 386 } 379 387 return kss; 380 } catch (alglib.alglibexception ae) { 388 } 389 catch (alglib.alglibexception ae) { 381 390 // wrap exception so that calling code doesn't have to know about alglib implementation 382 391 throw new ArgumentException("There was a problem in the calculation of the Gaussian process model", ae); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/ICovarianceFunction.cs
r12012 r13721 20 20 #endregion 21 21 22 using System;23 22 using System.Collections.Generic; 24 using System.Linq.Expressions;25 23 using HeuristicLab.Core; 26 24 … … 40 38 int GetNumberOfParameters(int numberOfVariables); 41 39 void SetParameter(double[] p); 42 ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int>columnIndices);40 ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, int[] columnIndices); 43 41 } 44 42 } -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/IMeanFunction.cs
r12012 r13721 20 20 #endregion 21 21 22 using System;23 using System.Collections.Generic;24 22 using HeuristicLab.Core; 25 23 … … 36 34 int GetNumberOfParameters(int numberOfVariables); 37 35 void SetParameter(double[] p); 38 ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, IEnumerable<int>columnIndices);36 ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, int[] columnIndices); 39 37 } 40 38 } -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanFunctions/MeanConst.cs
r12012 r13721 76 76 } 77 77 78 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, IEnumerable<int>columnIndices) {78 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, int[] columnIndices) { 79 79 double c; 80 80 GetParameters(p, out c); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanFunctions/MeanLinear.cs
r12012 r13721 21 21 22 22 using System; 23 using System.Collections.Generic;24 23 using System.Linq; 25 24 using HeuristicLab.Common; … … 70 69 } 71 70 72 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, IEnumerable<int>columnIndices) {71 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, int[] columnIndices) { 73 72 double[] weights; 74 int[] columns = columnIndices .ToArray();73 int[] columns = columnIndices; 75 74 GetParameter(p, out weights); 76 75 var mf = new ParameterizedMeanFunction(); … … 78 77 // sanity check 79 78 if (weights.Length != columns.Length) throw new ArgumentException("The number of rparameters must match the number of variables for the linear mean function."); 80 return Util.ScalarProd(weights, Util.GetRow(x, i, columns) );79 return Util.ScalarProd(weights, Util.GetRow(x, i, columns).ToArray()); 81 80 }; 82 81 mf.Gradient = (x, i, k) => { -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanFunctions/MeanModel.cs
r13136 r13721 73 73 } 74 74 75 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, IEnumerable<int>columnIndices) {75 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, int[] columnIndices) { 76 76 if (p.Length > 0) throw new ArgumentException("No parameters allowed for model-based mean function.", "p"); 77 77 var solution = RegressionSolution; 78 78 var variableNames = solution.ProblemData.AllowedInputVariables.ToArray(); 79 if (variableNames.Length != columnIndices. Count())79 if (variableNames.Length != columnIndices.Length) 80 80 throw new ArgumentException("The number of input variables does not match in MeanModel"); 81 81 var variableValues = variableNames.Select(_ => new List<double>() { 0.0 }).ToArray(); // or of zeros -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanFunctions/MeanProduct.cs
r12012 r13721 73 73 74 74 75 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, IEnumerable<int>columnIndices) {75 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, int[] columnIndices) { 76 76 var factorMf = new List<ParameterizedMeanFunction>(); 77 77 int totalNumberOfParameters = GetNumberOfParameters(numberOfVariables); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanFunctions/MeanSum.cs
r12012 r13721 68 68 } 69 69 70 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, IEnumerable<int>columnIndices) {70 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, int[] columnIndices) { 71 71 var termMf = new List<ParameterizedMeanFunction>(); 72 72 int totalNumberOfParameters = GetNumberOfParameters(numberOfVariables); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/MeanFunctions/MeanZero.cs
r12012 r13721 20 20 #endregion 21 21 using System; 22 using System.Collections.Generic;23 using System.Linq;24 22 using HeuristicLab.Common; 25 23 using HeuristicLab.Core; … … 50 48 } 51 49 52 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, IEnumerable<int>columnIndices) {50 public ParameterizedMeanFunction GetParameterizedMeanFunction(double[] p, int[] columnIndices) { 53 51 if (p.Length > 0) throw new ArgumentException("No parameters allowed for zero mean function.", "p"); 54 52 var mf = new ParameterizedMeanFunction(); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/StudentTProcessModel.cs
r13438 r13721 171 171 try { 172 172 CalculateModel(ds, rows, scaleInputs); 173 } catch (alglib.alglibexception ae) { 173 } 174 catch (alglib.alglibexception ae) { 174 175 // wrap exception so that calling code doesn't have to know about alglib implementation 175 176 throw new ArgumentException("There was a problem in the calculation of the Gaussian process model", ae); … … 188 189 189 190 int n = x.GetLength(0); 191 var columns = Enumerable.Range(0, x.GetLength(1)).ToArray(); 190 192 191 193 // calculate cholesky decomposed (lower triangular) covariance matrix 192 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, Enumerable.Range(0, x.GetLength(1)));194 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, columns); 193 195 this.l = CalculateL(x, cov); 194 196 195 197 // calculate mean 196 var mean = meanFunction.GetParameterizedMeanFunction(meanParameter, Enumerable.Range(0, x.GetLength(1)));198 var mean = meanFunction.GetParameterizedMeanFunction(meanParameter, columns); 197 199 double[] m = Enumerable.Range(0, x.GetLength(0)) 198 200 .Select(r => mean.Mean(x, r)) … … 240 242 double[] meanGradients = new double[meanFunction.GetNumberOfParameters(nAllowedVariables)]; 241 243 for (int k = 0; k < meanGradients.Length; k++) { 242 var meanGrad = Enumerable.Range(0, alpha.Length) 243 .Select(r => mean.Gradient(x, r, k)); 244 meanGradients[k] = -Util.ScalarProd(meanGrad, alpha); //TODO not working yet, try to fix with gradient check 244 var meanGrad = new double[alpha.Length]; 245 for (int g = 0; g < meanGrad.Length; g++) 246 meanGrad[g] = mean.Gradient(x, g, k); 247 meanGradients[k] = -Util.ScalarProd(meanGrad, alpha);//TODO not working yet, try to fix with gradient check 245 248 } 246 249 … … 336 339 double[,] newX = GetData(dataset, allowedInputVariables, rows, inputScaling); 337 340 int newN = newX.GetLength(0); 338 339 var Ks = new double[newN, n]; 340 var mean = meanFunction.GetParameterizedMeanFunction(meanParameter, Enumerable.Range(0, newX.GetLength(1))); 341 var columns = Enumerable.Range(0, newX.GetLength(1)).ToArray(); 342 343 var Ks = new double[newN][]; 344 var mean = meanFunction.GetParameterizedMeanFunction(meanParameter, columns); 341 345 var ms = Enumerable.Range(0, newX.GetLength(0)) 342 346 .Select(r => mean.Mean(newX, r)) 343 347 .ToArray(); 344 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, Enumerable.Range(0, newX.GetLength(1)));348 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, columns); 345 349 for (int i = 0; i < newN; i++) { 350 Ks[i] = new double[n]; 346 351 for (int j = 0; j < n; j++) { 347 Ks[i ,j] = cov.CrossCovariance(x, newX, j, i);352 Ks[i][j] = cov.CrossCovariance(x, newX, j, i); 348 353 } 349 354 } 350 355 351 356 return Enumerable.Range(0, newN) 352 .Select(i => ms[i] + Util.ScalarProd(Util.GetRow(Ks, i), alpha)); 353 } catch (alglib.alglibexception ae) { 357 .Select(i => ms[i] + Util.ScalarProd(Ks[i], alpha)); 358 } 359 catch (alglib.alglibexception ae) { 354 360 // wrap exception so that calling code doesn't have to know about alglib implementation 355 361 throw new ArgumentException("There was a problem in the calculation of the Gaussian process model", ae); … … 369 375 var kss = new double[newN]; 370 376 double[,] sWKs = new double[n, newN]; 371 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, Enumerable.Range(0, x.GetLength(1)) );372 377 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, Enumerable.Range(0, x.GetLength(1)).ToArray()); 378 373 379 if (l == null) { 374 380 l = CalculateL(x, cov); 375 381 } 376 382 377 383 // for stddev 378 384 for (int i = 0; i < newN; i++) 379 385 kss[i] = cov.Covariance(newX, i, i); 380 386 381 387 for (int i = 0; i < newN; i++) { 382 388 for (int j = 0; j < n; j++) { 383 sWKs[j, i] = cov.CrossCovariance(x, newX, j, i) 389 sWKs[j, i] = cov.CrossCovariance(x, newX, j, i); 384 390 } 385 391 } 386 392 387 393 // for stddev 388 394 alglib.ablas.rmatrixlefttrsm(n, newN, l, 0, 0, false, false, 0, ref sWKs, 0, 0); 389 395 390 396 for (int i = 0; i < newN; i++) { 391 var sumV = Util.ScalarProd(Util.GetCol(sWKs, i), Util.GetCol(sWKs, i)); 397 var col = Util.GetCol(sWKs, i).ToArray(); 398 var sumV = Util.ScalarProd(col, col); 392 399 kss[i] -= sumV; 393 kss[i] *= (nu + beta - 2) / (nu + n - 2);400 kss[i] *= (nu + beta - 2) / (nu + n - 2); 394 401 if (kss[i] < 0) kss[i] = 0; 395 402 } 396 403 return kss; 397 } catch (alglib.alglibexception ae) { 404 } 405 catch (alglib.alglibexception ae) { 398 406 // wrap exception so that calling code doesn't have to know about alglib implementation 399 407 throw new ArgumentException("There was a problem in the calculation of the Gaussian process model", ae); -
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/Util.cs
r12012 r13721 23 23 using System.Collections.Generic; 24 24 using System.Linq; 25 using HeuristicLab.Core;26 using HeuristicLab.Data;27 25 28 26 namespace HeuristicLab.Algorithms.DataAnalysis { 29 27 internal static class Util { 30 public static double ScalarProd(IEnumerable<double> v, IEnumerable<double> u) { 31 return v.Zip(u, (vi, ui) => vi * ui).Sum(); 28 public static double ScalarProd(double[] v, double[] u) { 29 if (v.Length != u.Length) throw new InvalidOperationException(); 30 double prod = 0.0; 31 for (int i = 0; i < v.Length; i++) 32 prod += v[i] * u[i]; 33 return prod; 32 34 } 33 35 … … 41 43 } 42 44 43 public static double SqrDist(double[,] x, int i, int j, double scale = 1.0, IEnumerable<int> columnIndices = null) {44 return SqrDist(x, i, x, j, scale, columnIndices);45 public static double SqrDist(double[,] x, int i, int j, int[] columnIndices, double scale = 1.0) { 46 return SqrDist(x, i, x, j, columnIndices, scale); 45 47 } 46 48 47 public static double SqrDist(double[,] x, int i, double[,] xt, int j, double scale = 1.0, IEnumerable<int> columnIndices = null) {49 public static double SqrDist(double[,] x, int i, double[,] xt, int j, int[] columnIndices, double scale = 1.0) { 48 50 double ss = 0.0; 49 if (columnIndices == null) columnIndices = Enumerable.Range(0, x.GetLength(1)); 50 foreach (int columnIndex in columnIndices) { 51 if (columnIndices == null) columnIndices = Enumerable.Range(0, x.GetLength(1)).ToArray(); 52 for (int c = 0; c < columnIndices.Length; c++) { 53 var columnIndex = columnIndices[c]; 51 54 double d = x[i, columnIndex] - xt[j, columnIndex]; 52 55 ss += d * d; … … 55 58 } 56 59 57 public static double SqrDist(double[,] x, int i, int j, double[] scale, IEnumerable<int> columnIndices = null) {60 public static double SqrDist(double[,] x, int i, int j, double[] scale, int[] columnIndices) { 58 61 return SqrDist(x, i, x, j, scale, columnIndices); 59 62 } 60 63 61 public static double SqrDist(double[,] x, int i, double[,] xt, int j, double[] scale, IEnumerable<int> columnIndices = null) {64 public static double SqrDist(double[,] x, int i, double[,] xt, int j, double[] scale, int[] columnIndices) { 62 65 double ss = 0.0; 63 if (columnIndices == null) columnIndices = Enumerable.Range(0, x.GetLength(1));64 66 int scaleIndex = 0; 65 foreach (int columnIndex in columnIndices) { 67 for (int c = 0; c < columnIndices.Length; c++) { 68 var columnIndex = columnIndices[c]; 66 69 double d = x[i, columnIndex] - xt[j, columnIndex]; 67 70 ss += d * d * scale[scaleIndex] * scale[scaleIndex]; … … 73 76 return ss; 74 77 } 75 public static double ScalarProd(double[,] x, int i, int j, double scale = 1.0, IEnumerable<int> columnIndices = null) {76 return ScalarProd(x, i, x, j, scale, columnIndices);78 public static double ScalarProd(double[,] x, int i, int j, int[] columnIndices, double scale = 1.0) { 79 return ScalarProd(x, i, x, j, columnIndices, scale); 77 80 } 78 81 79 public static double ScalarProd(double[,] x, int i, double[,] xt, int j, double scale = 1.0, IEnumerable<int> columnIndices = null) {82 public static double ScalarProd(double[,] x, int i, double[,] xt, int j, int[] columnIndices, double scale = 1.0) { 80 83 double sum = 0.0; 81 if (columnIndices == null) columnIndices = Enumerable.Range(0, x.GetLength(1));82 foreach (int columnIndex in columnIndices) {84 for (int c = 0; c < columnIndices.Length; c++) { 85 var columnIndex = columnIndices[c]; 83 86 sum += x[i, columnIndex] * xt[j, columnIndex]; 84 87 } 85 88 return scale * scale * sum; 86 89 } 87 public static double ScalarProd(double[,] x, int i, int j, double[] scale, IEnumerable<int> columnIndices = null) {90 public static double ScalarProd(double[,] x, int i, int j, double[] scale, int[] columnIndices) { 88 91 return ScalarProd(x, i, x, j, scale, columnIndices); 89 92 } 90 93 91 public static double ScalarProd(double[,] x, int i, double[,] xt, int j, double[] scale, IEnumerable<int> columnIndices = null) {94 public static double ScalarProd(double[,] x, int i, double[,] xt, int j, double[] scale, int[] columnIndices) { 92 95 double sum = 0.0; 93 if (columnIndices == null) columnIndices = Enumerable.Range(0, x.GetLength(1));94 96 int scaleIndex = 0; 95 foreach (int columnIndex in columnIndices) { 97 for (int c = 0; c < columnIndices.Length; c++, scaleIndex++) { 98 var columnIndex = columnIndices[c]; 96 99 sum += x[i, columnIndex] * scale[scaleIndex] * xt[j, columnIndex] * scale[scaleIndex]; 97 scaleIndex++;98 100 } 99 101 // must be at the end of scale after iterating over columnIndices -
trunk/sources/HeuristicLab.Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/GaussianProcessFunctionsTest.cs
r12012 r13721 1747 1747 int rows1 = xt.GetLength(0); 1748 1748 var actualCov = new double[rows0, rows1]; 1749 var covFunction = cf.GetParameterizedCovarianceFunction(hyp, Enumerable.Range(0, x.GetLength(1)) );1749 var covFunction = cf.GetParameterizedCovarianceFunction(hyp, Enumerable.Range(0, x.GetLength(1)).ToArray()); 1750 1750 for (int i = 0; i < rows0; i++) 1751 1751 for (int j = 0; j < rows1; j++) … … 1769 1769 int nHyp = mf.GetNumberOfParameters(x.GetLength(1)); 1770 1770 var hyp = Enumerable.Repeat(hypValue, nHyp).ToArray(); 1771 var meanFunction = mf.GetParameterizedMeanFunction(hyp, Enumerable.Range(0, x.GetLength(1)) );1771 var meanFunction = mf.GetParameterizedMeanFunction(hyp, Enumerable.Range(0, x.GetLength(1)).ToArray()); 1772 1772 1773 1773 var m = Enumerable.Range(0, xt.GetLength(0)).Select(i => meanFunction.Mean(xt, i)).ToArray(); -
trunk/sources/HeuristicLab.Tests/HeuristicLab.Algorithms.DataAnalysis-3.4/GaussianProcessRegressionTest.cs
r12012 r13721 50 50 var alg = new GaussianProcessRegression(); 51 51 alg.Engine = new HeuristicLab.SequentialEngine.SequentialEngine(); 52 alg.SetSeedRandomly = false; 52 53 53 54 alg.Problem = new RegressionProblem();
Note: See TracChangeset
for help on using the changeset viewer.