Changeset 14310 for branches/HeuristicLab.Problems.GeneticProgramming.BloodGlucosePrediction/Problem.cs
- Timestamp:
- 09/27/16 16:30:54 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.GeneticProgramming.BloodGlucosePrediction/Problem.cs
r13865 r14310 21 21 22 22 using System; 23 using System.Collections; 23 24 using System.Collections.Generic; 24 25 using System.Linq; 26 using HeuristicLab.Analysis; 25 27 using HeuristicLab.Common; 26 28 using HeuristicLab.Core; … … 62 64 63 65 public override bool Maximization { 64 get { return false; }66 get { return true; } 65 67 } 66 68 … … 98 100 var rows = problemData.TrainingIndices.ToArray(); 99 101 var target = problemData.Dataset.GetDoubleValues(problemData.TargetVariable, rows); 100 var predicted = Interpreter.Apply(tree.Root.GetSubtree(0).GetSubtree(0), problemData.Dataset, rows); 101 102 var predicted0 = Interpreter.Apply(tree.Root.GetSubtree(0).GetSubtree(0).GetSubtree(0), problemData.Dataset, rows); 103 var predicted1 = Interpreter.Apply(tree.Root.GetSubtree(0).GetSubtree(0).GetSubtree(1), problemData.Dataset, rows); 104 var predicted2 = Interpreter.Apply(tree.Root.GetSubtree(0).GetSubtree(0).GetSubtree(2), problemData.Dataset, rows); 105 106 var pred0_rsq = Rsq(predicted0, target); 107 var pred1_rsq = Rsq(predicted1, target); 108 var pred2_rsq = Rsq(predicted2, target); 109 return pred0_rsq + pred1_rsq + pred2_rsq; 110 } 111 112 private double Rsq(IEnumerable<double> predicted, IEnumerable<double> target) { 102 113 // only take predictions for which the target is not NaN 103 114 var selectedTuples = target.Zip(predicted, Tuple.Create).Where(t => !double.IsNaN(t.Item1)).ToArray(); … … 106 117 107 118 OnlineCalculatorError errorState; 108 var mse = OnlineMeanSquaredErrorCalculator.Calculate(target, predicted, out errorState); 109 if (errorState != OnlineCalculatorError.None) mse = 1E6; 110 return mse; 111 } 112 113 public override void Analyze(ISymbolicExpressionTree[] trees, double[] qualities, ResultCollection results, IRandom random) { 119 var r = OnlinePearsonsRCalculator.Calculate(target, predicted, out errorState); 120 if (errorState != OnlineCalculatorError.None) r = 0; 121 return r * r; 122 } 123 124 public override void Analyze(ISymbolicExpressionTree[] trees, double[] qualities, ResultCollection results, 125 IRandom random) { 114 126 base.Analyze(trees, qualities, results, random); 115 127 116 128 if (!results.ContainsKey("Solution")) { 117 129 results.Add(new Result("Solution", typeof(IRegressionSolution))); 130 } 131 if (!results.ContainsKey("Terms")) { 132 results.Add(new Result("Terms", typeof(DataTable))); 118 133 } 119 134 … … 121 136 var bestQuality = qualities.First(); 122 137 for (int i = 1; i < trees.Length; i++) { 123 if (qualities[i] <bestQuality) {138 if (qualities[i] > bestQuality) { 124 139 bestQuality = qualities[i]; 125 140 bestTree = trees[i]; … … 127 142 } 128 143 144 129 145 var clonedProblemData = (IRegressionProblemData)ProblemData.Clone(); 130 var model = new Model(clonedProblemData, (ISymbolicExpressionTree)bestTree.Clone()); 131 results["Solution"].Value = model.CreateRegressionSolution(clonedProblemData); 146 var rows = clonedProblemData.TrainingIndices.ToArray(); 147 var target = clonedProblemData.Dataset.GetDoubleValues(clonedProblemData.TargetVariable, rows).ToArray(); 148 var predicted0 = 149 Interpreter.Apply(bestTree.Root.GetSubtree(0).GetSubtree(0).GetSubtree(0), clonedProblemData.Dataset, rows) 150 .ToArray(); 151 var predicted1 = 152 Interpreter.Apply(bestTree.Root.GetSubtree(0).GetSubtree(0).GetSubtree(1), clonedProblemData.Dataset, rows) 153 .ToArray(); 154 var predicted2 = 155 Interpreter.Apply(bestTree.Root.GetSubtree(0).GetSubtree(0).GetSubtree(2), clonedProblemData.Dataset, rows) 156 .ToArray(); 157 158 var termsTable = new HeuristicLab.Analysis.DataTable("Terms"); 159 var r0 = new DataRow("GlucTerm", "GlucTerm", predicted0); 160 var r1 = new DataRow("InsTerm", "InsTerm", predicted1); 161 r1.VisualProperties.SecondYAxis = true; 162 var r2 = new DataRow("ChTerm", "ChTerm", predicted2); 163 r2.VisualProperties.SecondYAxis = true; 164 var r3 = new DataRow("Target", "Target", target); 165 termsTable.Rows.Add(r0); 166 termsTable.Rows.Add(r1); 167 termsTable.Rows.Add(r2); 168 termsTable.Rows.Add(r3); 169 results["Terms"].Value = termsTable; 170 171 172 var filteredPredicted0 = rows.Where(r => !double.IsNaN(target[r])).Select(r => predicted0[r]).ToArray(); 173 var filteredPredicted1 = rows.Where(r => !double.IsNaN(target[r])).Select(r => predicted1[r]).ToArray(); 174 var filteredPredicted2 = rows.Where(r => !double.IsNaN(target[r])).Select(r => predicted2[r]).ToArray(); 175 var filteredTarget = target.Where(t => !double.IsNaN(t)).ToArray(); 176 177 178 var ds = new ModifiableDataset(new string[] { "pred0", "pred1", "pred2", "target" }, 179 new List<IList> 180 { 181 filteredPredicted0.ToList(), 182 filteredPredicted1.ToList(), 183 filteredPredicted2.ToList(), 184 filteredTarget.ToList() 185 }); 186 var lrProbData = new RegressionProblemData(ds, new string[] { "pred0", "pred1", "pred2" }, "target"); 187 lrProbData.TrainingPartition.Start = clonedProblemData.TrainingPartition.Start; 188 lrProbData.TrainingPartition.End = clonedProblemData.TrainingPartition.End; 189 lrProbData.TestPartition.Start = clonedProblemData.TestPartition.Start; 190 lrProbData.TestPartition.End = clonedProblemData.TestPartition.End; 191 192 try { 193 double rmsError, cvRmsError; 194 var lrSolution = HeuristicLab.Algorithms.DataAnalysis.LinearRegression.CreateLinearRegressionSolution( 195 lrProbData, out rmsError, out cvRmsError); 196 results["Solution"].Value = lrSolution; 197 } catch (Exception) { 198 // ignore 199 } 132 200 } 133 201
Note: See TracChangeset
for help on using the changeset viewer.