Changeset 8982 for trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceProduct.cs
- Timestamp:
- 12/01/12 19:02:47 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/CovarianceFunctions/CovarianceProduct.cs
r8929 r8982 23 23 using System.Collections.Generic; 24 24 using System.Linq; 25 using System.Linq.Expressions; 25 26 using HeuristicLab.Common; 26 27 using HeuristicLab.Core; … … 66 67 } 67 68 68 public void SetParameter(double[] hyp) { 69 if (factors.Count == 0) throw new ArgumentException("at least one factor is necessary for the product covariance function."); 69 public void SetParameter(double[] p) { 70 70 int offset = 0; 71 foreach (var tin factors) {72 var numberOfParameters = t.GetNumberOfParameters(numberOfVariables);73 t.SetParameter(hyp.Skip(offset).Take(numberOfParameters).ToArray());71 foreach (var f in factors) { 72 var numberOfParameters = f.GetNumberOfParameters(numberOfVariables); 73 f.SetParameter(p.Skip(offset).Take(numberOfParameters).ToArray()); 74 74 offset += numberOfParameters; 75 75 } 76 76 } 77 77 78 public double GetCovariance(double[,] x, int i, int j, IEnumerable<int> columnIndices) { 79 return factors.Select(f => f.GetCovariance(x, i, j, columnIndices)).Aggregate((a, b) => a * b); 78 public ParameterizedCovarianceFunction GetParameterizedCovarianceFunction(double[] p, IEnumerable<int> columnIndices) { 79 if (factors.Count == 0) throw new ArgumentException("at least one factor is necessary for the product covariance function."); 80 var functions = new List<ParameterizedCovarianceFunction>(); 81 foreach (var f in factors) { 82 int numberOfParameters = f.GetNumberOfParameters(numberOfVariables); 83 functions.Add(f.GetParameterizedCovarianceFunction(p.Take(numberOfParameters).ToArray(), columnIndices)); 84 p = p.Skip(numberOfParameters).ToArray(); 85 } 86 87 88 var product = new ParameterizedCovarianceFunction(); 89 product.Covariance = (x, i, j) => functions.Select(e => e.Covariance(x, i, j)).Aggregate((a, b) => a * b); 90 product.CrossCovariance = (x, xt, i, j) => functions.Select(e => e.CrossCovariance(x, xt, i, j)).Aggregate((a, b) => a * b); 91 product.CovarianceGradient = (x, i, j) => GetGradient(x, i, j, functions); 92 return product; 80 93 } 81 94 82 public IEnumerable<double> GetGradient(double[,] x, int i, int j, IEnumerable<int> columnIndices) {83 var covariances = factor s.Select(f => f.GetCovariance(x, i, j, columnIndices)).ToArray();84 for (int ii = 0; ii < factor s.Count; ii++) {85 foreach (var g in factor s[ii].GetGradient(x, i, j, columnIndices)) {95 public static IEnumerable<double> GetGradient(double[,] x, int i, int j, List<ParameterizedCovarianceFunction> factorFunctions) { 96 var covariances = factorFunctions.Select(f => f.Covariance(x, i, j)).ToArray(); 97 for (int ii = 0; ii < factorFunctions.Count; ii++) { 98 foreach (var g in factorFunctions[ii].CovarianceGradient(x, i, j)) { 86 99 double res = g; 87 100 for (int jj = 0; jj < covariances.Length; jj++) … … 91 104 } 92 105 } 93 94 public double GetCrossCovariance(double[,] x, double[,] xt, int i, int j, IEnumerable<int> columnIndices) {95 return factors.Select(f => f.GetCrossCovariance(x, xt, i, j, columnIndices)).Aggregate((a, b) => a * b);96 }97 106 } 98 107 }
Note: See TracChangeset
for help on using the changeset viewer.