Changeset 8982 for trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModel.cs
- Timestamp:
- 12/01/12 19:02:47 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Algorithms.DataAnalysis/3.4/GaussianProcess/GaussianProcessModel.cs
r8623 r8982 81 81 82 82 [Storable] 83 private double[] meanParameter; 84 [Storable] 85 private double[] covarianceParameter; 86 87 [Storable] 83 88 private double[,] l; 84 89 … … 99 104 this.targetVariable = original.targetVariable; 100 105 this.sqrSigmaNoise = original.sqrSigmaNoise; 106 if (original.meanParameter != null) { 107 this.meanParameter = (double[])original.meanParameter.Clone(); 108 } 109 if (original.covarianceParameter != null) { 110 this.covarianceParameter = (double[])original.covarianceParameter.Clone(); 111 } 101 112 102 113 // shallow copies of arrays because they cannot be modified … … 118 129 119 130 int nVariables = this.allowedInputVariables.Length; 120 this.meanFunction.SetParameter(hyp131 meanParameter = hyp 121 132 .Take(this.meanFunction.GetNumberOfParameters(nVariables)) 122 .ToArray()); 123 this.covarianceFunction.SetParameter(hyp.Skip(this.meanFunction.GetNumberOfParameters(nVariables)) 124 .Take(this.covarianceFunction.GetNumberOfParameters(nVariables)) 125 .ToArray()); 133 .ToArray(); 134 135 covarianceParameter = hyp.Skip(this.meanFunction.GetNumberOfParameters(nVariables)) 136 .Take(this.covarianceFunction.GetNumberOfParameters(nVariables)) 137 .ToArray(); 126 138 sqrSigmaNoise = Math.Exp(2.0 * hyp.Last()); 127 139 … … 138 150 139 151 // calculate means and covariances 140 double[] m = meanFunction.GetMean(x); 152 var mean = meanFunction.GetParameterizedMeanFunction(meanParameter, Enumerable.Range(0, x.GetLength(1))); 153 double[] m = Enumerable.Range(0, x.GetLength(0)) 154 .Select(r => mean.Mean(x, r)) 155 .ToArray(); 156 157 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, Enumerable.Range(0, x.GetLength(1))); 141 158 for (int i = 0; i < n; i++) { 142 159 for (int j = i; j < n; j++) { 143 l[j, i] = cov arianceFunction.GetCovariance(x, i, j) / sqrSigmaNoise;160 l[j, i] = cov.Covariance(x, i, j) / sqrSigmaNoise; 144 161 if (j == i) l[j, i] += 1.0; 145 162 } 146 163 } 164 147 165 148 166 // cholesky decomposition … … 181 199 182 200 double[] meanGradients = new double[meanFunction.GetNumberOfParameters(nAllowedVariables)]; 183 for (int i = 0; i < meanGradients.Length; i++) { 184 var meanGrad = meanFunction.GetGradients(i, x); 185 meanGradients[i] = -Util.ScalarProd(meanGrad, alpha); 201 for (int k = 0; k < meanGradients.Length; k++) { 202 var meanGrad = Enumerable.Range(0, alpha.Length) 203 .Select(r => mean.Gradient(x, r, k)); 204 meanGradients[k] = -Util.ScalarProd(meanGrad, alpha); 186 205 } 187 206 … … 190 209 for (int i = 0; i < n; i++) { 191 210 for (int j = 0; j < i; j++) { 192 var g = cov arianceFunction.GetGradient(x, i, j).ToArray();211 var g = cov.CovarianceGradient(x, i, j).ToArray(); 193 212 for (int k = 0; k < covGradients.Length; k++) { 194 213 covGradients[k] += lCopy[i, j] * g[k]; … … 196 215 } 197 216 198 var gDiag = cov arianceFunction.GetGradient(x, i, i).ToArray();217 var gDiag = cov.CovarianceGradient(x, i, i).ToArray(); 199 218 for (int k = 0; k < covGradients.Length; k++) { 200 219 // diag … … 216 235 } 217 236 237 // is called by the solution creator to set all parameter values of the covariance and mean function 238 // to the optimized values (necessary to make the values visible in the GUI) 239 public void FixParameters() { 240 covarianceFunction.SetParameter(covarianceParameter); 241 meanFunction.SetParameter(meanParameter); 242 covarianceParameter = new double[0]; 243 meanParameter = new double[0]; 244 } 245 218 246 #region IRegressionModel Members 219 247 public IEnumerable<double> GetEstimatedValues(Dataset dataset, IEnumerable<int> rows) { … … 234 262 int n = x.GetLength(0); 235 263 var Ks = new double[newN, n]; 236 var ms = meanFunction.GetMean(newX); 264 var mean = meanFunction.GetParameterizedMeanFunction(meanParameter, Enumerable.Range(0, newX.GetLength(1))); 265 var ms = Enumerable.Range(0, newX.GetLength(0)) 266 .Select(r => mean.Mean(newX, r)) 267 .ToArray(); 268 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, Enumerable.Range(0, newX.GetLength(1))); 237 269 for (int i = 0; i < newN; i++) { 238 270 for (int j = 0; j < n; j++) { 239 Ks[i, j] = cov arianceFunction.GetCrossCovariance(x, newX, j, i);271 Ks[i, j] = cov.CrossCovariance(x, newX, j, i); 240 272 } 241 273 } … … 252 284 var kss = new double[newN]; 253 285 double[,] sWKs = new double[n, newN]; 286 var cov = covarianceFunction.GetParameterizedCovarianceFunction(covarianceParameter, Enumerable.Range(0, newX.GetLength(1))); 254 287 255 288 // for stddev 256 289 for (int i = 0; i < newN; i++) 257 kss[i] = cov arianceFunction.GetCovariance(newX, i, i);290 kss[i] = cov.Covariance(newX, i, i); 258 291 259 292 for (int i = 0; i < newN; i++) { 260 293 for (int j = 0; j < n; j++) { 261 sWKs[j, i] = cov arianceFunction.GetCrossCovariance(x, newX, j, i) / Math.Sqrt(sqrSigmaNoise);294 sWKs[j, i] = cov.CrossCovariance(x, newX, j, i) / Math.Sqrt(sqrSigmaNoise); 262 295 } 263 296 }
Note: See TracChangeset
for help on using the changeset viewer.