public OneDObjectiveFunc(double[] Xobdata, double[] obdatay, double[] para)//matlab test { this.Xobdata = Xobdata; this.obdatay = obdatay; //this.noise = noise; this.para = para; Y = GPwithMeanfunction.GetfVactor(obdatay); }
public OneDObjectiveFunc(double[,] MDXobdata, double[] obdatay, double[] para) { this.MDXobdata = MDXobdata; this.obdatay = obdatay; // this.noise = noise; this.para = para; Y = GPwithMeanfunction.GetfVactor(obdatay); }
private static double[] GetcoveriantArray(KeyValuePair <List <double[]>, List <double[, ]> > initialclusture) { var obdataX = new double[initialclusture.Value.Count, initialclusture.Value[0].GetLength(1) - 1]; var obdataY = new double[initialclusture.Value.Count]; for (int i = 0; i < initialclusture.Value.Count; i++) { obdataY[i] = initialclusture.Value[i][0, initialclusture.Value[0].GetLength(1) - 1]; for (int j = 0; j < initialclusture.Value[0].GetLength(1) - 1; j++) { obdataX[i, j] = initialclusture.Value[i][0, j]; } } var cov = GPwithMeanfunction.GetCovMatrix(obdataX, initialclusture.Key[2], true); return(cov.Reshape()); }
private static void GetCoveriantandInvArray(KeyValuePair <List <double[]>, List <double[, ]> > initialclusture, out double[] covarray, out double[] invarray) { var obdataX = new double[initialclusture.Value.Count, initialclusture.Value[0].GetLength(1) - 1]; var obdataY = new double[initialclusture.Value.Count]; for (int i = 0; i < initialclusture.Value.Count; i++) { obdataY[i] = initialclusture.Value[i][0, initialclusture.Value[0].GetLength(1) - 1]; for (int j = 0; j < initialclusture.Value[0].GetLength(1) - 1; j++) { obdataX[i, j] = initialclusture.Value[i][0, j]; } } var cov = GPwithMeanfunction.GetCovMatrix(obdataX, initialclusture.Key[2], true); invarray = cov.inverse().Reshape(); covarray = cov.Reshape(); }
public static List <double> newMDGetMeanAndVar(KeyValuePair <List <double[]>, List <double[, ]> > trainedcluster, double[] testpoint) { var testpoints = RowtoMatrix(testpoint); double[,] MeanStart, Xobdata; double[] obdatay; GetXfromValues(trainedcluster.Value, out Xobdata, out obdatay); var GPpara = trainedcluster.Key[2]; var Regpara = trainedcluster.Key[1]; var mean = GPwithMeanfunction.GetfVactor(obdatay); // var cov = GPwithMeanfunction.GetCovMatrix(Xobdata, GPpara, true); var cov = trainedcluster.Key[3].Reshape(obdatay.Length, obdatay.Length, MatrixOrder.CRowMajor); var kInv = trainedcluster.Key[4].Reshape(obdatay.Length, obdatay.Length, MatrixOrder.CRowMajor); var MeanAndVar = new List <double>(); var a = testpoints.GetLength(0); double variance; var h = RowtoMatrix(CalculatRegression.gety(Xobdata, Regpara)); var hstarts = RowtoMatrix(CalculatRegression.gety(testpoints, Regpara)); int c = Xobdata.GetLength(0) - 1; for (var i = 0; i <= a - 1; i++) { var XobAndTestData = GPwithMeanfunction.AddnewPoint(Xobdata, testpoints, i); var newcov = GPwithMeanfunction.GetCovMatrix(XobAndTestData, GPpara, true); var kstart = new double[newcov.GetLength(0) - 1, 1]; for (var j = 0; j < newcov.GetLength(0) - 1; j++) { kstart[j, 0] = newcov[j, newcov.GetLength(0) - 1]; } var kstartT = kstart.transpose(); // MeanStart = (kstartT.multiply(kInv)).multiply(mean); if (GPpara.Length - Xobdata.GetLength(1) == 2) { MeanStart = (kstartT.multiply(kInv)).multiply(mean); var VarStart = (((kstartT.multiply(kInv)).multiply(kstart)).multiply(-1)); variance = VarStart[0, 0] + cov[c, c]; } else //with mean fuc { var regy = CalculatRegression.gety(testpoints, Regpara); // var regy = CalculatRegression.gety(testpoints, i, actionname)[0, 0] * GPpara[GPpara.Length - 1]; var regym = new double[1, 1]; regym[0, 0] = regy[0]; var fb = RowtoMatrix(CalculatRegression.gety(Xobdata, Regpara)).transpose().multiply(GPpara[GPpara.Length - 1]); MeanStart = regym.add((kstartT.multiply(kInv)).multiply(mean.subtract(fb))); //var VarStart = (((kstartT.multiply(kInv)).multiply(kstart)).multiply(-1)); //var variancestar = VarStart[0, 0] + cov[c, c]; var hstart = new double[1, 1]; hstart[0, 0] = hstarts[0, i]; var r = hstart.subtract((h.multiply(kInv)).multiply(kstart)); var hkk = ((h.multiply(kInv)).multiply(h.transpose())).inverse(); //variance = variancestar + (r.transpose().multiply(hkk))[0, 0]; variance = cov[c, c] + (r.transpose().multiply(hkk))[0, 0]; } MeanAndVar.Add(MeanStart[0, 0]); // //double sdpow = Math.Pow(sd, 2); double sdabsolute = Math.Sqrt(Math.Abs(variance)); MeanAndVar.Add(sdabsolute); } return(MeanAndVar); }
public double calculate(double[] x)//matlab test { var matlab = true; var md = true; double[,] k; if (matlab && !md) { k = GPwithMeanfunction.SEKernel(Xobdata, x, true); } else if (matlab && md) { k = GPwithMeanfunction.SEKernel(MDXobdata, x, true); } else if (x.GetLength(0) == 2) { k = GPwithMeanfunction.SEKernel(Xobdata, x, noise); } else { k = GPwithMeanfunction.SEKernel(MDXobdata, x, noise, true); } var liknoise = Math.Exp(2 * para[3]); //MD var l = Cholesky(k.divide(liknoise).add(CreatImatrix(MDXobdata.GetLength(0)))); //MD //var liknoise = Math.Exp(2 * para[2]);//1D //var l = Cholesky(k.divide(liknoise).add(CreatImatrix(Xobdata.GetLength(0))));//1D var y = l.inverse(); var l1 = y.multiply(obdatay); l = l.transpose(); l = l.inverse(); var alpha = l.multiply(l1).divide(liknoise); l = Cholesky(k.divide(liknoise).add(CreatImatrix(MDXobdata.GetLength(0))));//MD // l = Cholesky(k.divide(liknoise).add(CreatImatrix(Xobdata.GetLength(0))));//1D var f = alpha.multiply(Y); var firstp = f[0] / 2; var secondp = sumlogl(l); var thrdp = l.GetLength(0) * Math.Log(2 * Math.PI * liknoise) / 2; var total = firstp + secondp + thrdp; //if (x.Any(a => a.CompareTo(0) == -1)//0 is sf, 1 is L if (x[0] < 0 || x[1] < 0 || x[2] < 0 || x[3] > 1 ) { return(10000000); } if (total == 100000) { int xx = 1; } return(total); ///OLD log likelihoold //var firspart = -0.5 * VecToDouble((Y.transpose()).multiply(StarMath.inverse(k)).multiply(Y)); //var kt = StarMath.CholeskyDecomposition(k); //var kkt = k.determinant(); //var secondpart = -0.5 * Math.Log(k.determinant()); //if (x.Any(a => a.CompareTo(0) == -1)//0 is sf, 1 is L // //|| x[0] > 0.5 // // || x[1] < 0.1 // //|| x[2] > 1.1 // //|| x[3] > 1.1 // //|| x[2] < 0.8 // //|| x[3] < 0.8 // ) //{ // return 10000000; //} ////else if (-(firspart + secondpart) < -1000) ////{ //// var a = -(firspart + secondpart); //// return 10000000; ////} //var re = -(firspart + secondpart); // return -(firspart + secondpart); }