public static double MFactorCarbonPlus(List<MFCPData> matrixStateData, MFCPData currentStateData) { const int nFeatures = 4; int nFeaturesCoefficcients; int info = 0; var inVector = new double[matrixStateData.Count, nFeatures + 1]; double[] coefficcients; var lm = new alglib.linearmodel(); var lr = new alglib.lrreport(); int lenghtData = matrixStateData.Count; for (int item = 0; item < lenghtData; item++) { inVector[item, 0] = matrixStateData[item].TimeFromX; // X1 inVector[item, 1] = matrixStateData[item].CarbonOxideIVP; // X2 inVector[item, 2] = matrixStateData[item].CarbonMonoxideVP; // X3 inVector[item, 3] = matrixStateData[item].CarbonOxideVP; // X4 inVector[item, 4] = matrixStateData[item].SteelCarbonPercent; // Y } alglib.lrbuild(inVector, lenghtData, nFeatures, out info, out lm, out lr); if (info != 1) { return info; } alglib.lrunpack(lm, out coefficcients, out nFeaturesCoefficcients); if (nFeaturesCoefficcients != nFeatures) { return -2.011; } double calculatedCarbon = coefficcients[4]; calculatedCarbon += coefficcients[0] * currentStateData.TimeFromX; calculatedCarbon += coefficcients[1] * currentStateData.CarbonOxideIVP; calculatedCarbon += coefficcients[2] * currentStateData.CarbonMonoxideVP; calculatedCarbon += coefficcients[3] * currentStateData.CarbonOxideVP; return calculatedCarbon; }
private static IRegressionEnsembleSolution CreateEnsembleSolution(List<IRegressionModel> models, IRegressionProblemData problemData) { var rows = problemData.TrainingPartition.Size; var features = models.Count; double[,] inputMatrix = new double[rows, features + 1]; //add model estimates for (int m = 0; m < models.Count; m++) { var model = models[m]; var estimates = model.GetEstimatedValues(problemData.Dataset, problemData.TrainingIndices); int estimatesCounter = 0; foreach (var estimate in estimates) { inputMatrix[estimatesCounter, m] = estimate; estimatesCounter++; } } //add target var targets = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, problemData.TrainingIndices); int targetCounter = 0; foreach (var target in targets) { inputMatrix[targetCounter, models.Count] = target; targetCounter++; } alglib.linearmodel lm = new alglib.linearmodel(); alglib.lrreport ar = new alglib.lrreport(); double[] coefficients; int retVal = 1; alglib.lrbuildz(inputMatrix, rows, features, out retVal, out lm, out ar); if (retVal != 1) throw new ArgumentException("Error in calculation of linear regression solution"); alglib.lrunpack(lm, out coefficients, out features); var ensembleModel = new RegressionEnsembleModel(models, coefficients.Take(models.Count)) { AverageModelEstimates = false }; var ensembleSolution = (IRegressionEnsembleSolution)ensembleModel.CreateRegressionSolution(problemData); return ensembleSolution; }