Changeset 12632 for branches/GBT-trunkintegration/Tests/Test.cs
- Timestamp:
- 07/07/15 11:57:37 (9 years ago)
- Location:
- branches/GBT-trunkintegration/Tests
- Files:
-
- 1 added
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/GBT-trunkintegration/Tests/Test.cs
r12622 r12632 4 4 using System.Linq; 5 5 using System.Runtime.CompilerServices; 6 using System.Threading; 7 using HeuristicLab.Data; 8 using HeuristicLab.Optimization; 6 9 using HeuristicLab.Problems.DataAnalysis; 7 10 using HeuristicLab.Random; … … 25 28 var allVariables = new string[] { "y", "x1", "x2" }; 26 29 27 // x1 <= 15 -> 128 // x1 > 15 -> 230 // x1 <= 15 -> 2 31 // x1 > 15 -> 1 29 32 BuildTree(xy, allVariables, 10); 30 33 } … … 42 45 43 46 // ignore irrelevant variables 44 // x1 <= 15 -> 145 // x1 > 15 -> 247 // x1 <= 15 -> 2 48 // x1 > 15 -> 1 46 49 BuildTree(xy, allVariables, 10); 47 50 } … … 61 64 // x1 <= 15 AND x2 <= 0 -> 3 62 65 // x1 <= 15 AND x2 > 0 -> 4 63 // x1 > 15 AND x2 <= 0 -> 164 // x1 > 15 AND x2 > 0 -> 266 // x1 > 15 AND x2 <= 0 -> 2 67 // x1 > 15 AND x2 > 0 -> 1 65 68 BuildTree(xy, allVariables, 10); 66 69 } … … 84 87 // x1 <= 15 AND x2 <= 0 -> 3 85 88 // x1 <= 15 AND x2 > 0 -> 4 86 // x1 > 15 AND x2 <= 0 -> 187 // x1 > 15 AND x2 > 0 -> 289 // x1 > 15 AND x2 <= 0 -> 2 90 // x1 > 15 AND x2 > 0 -> 1 88 91 BuildTree(xy, allVariables, 10); 89 92 } … … 103 106 104 107 // split cannot be found 108 // -> 5.50 105 109 BuildTree(xy, allVariables, 3); 106 110 } … … 116 120 117 121 var allVariables = new string[] { "y", "x1", "x2" }; 122 // (two possible solutions) 123 // x2 <= 1.5 -> 5.50 124 // x2 > 1.5 -> 5.55 125 BuildTree(xy, allVariables, 3); 126 118 127 // x1 <= 1.5 AND x2 <= 1.5 -> 10 119 128 // x1 <= 1.5 AND x2 > 1.5 -> 1 120 129 // x1 > 1.5 AND x2 <= 1.5 -> 1 121 130 // x1 > 1.5 AND x2 > 1.5 -> 10.1 122 BuildTree(xy, allVariables, 3);131 BuildTree(xy, allVariables, 7); 123 132 } 124 133 { … … 136 145 // x1 > 1.5 AND x2 <= 1.5 -> 0.9 137 146 // x1 > 1.5 AND x2 > 1.5 -> 1.1 138 BuildTree(xy, allVariables, 3); 139 } 140 141 } 142 147 BuildTree(xy, allVariables, 10); 148 } 149 150 { 151 // unbalanced split 152 var xy = new double[,] 153 { 154 {-1, 1, 1}, 155 {-1, 1, 2}, 156 {-1, 2, 1}, 157 { 1, 2, 2}, 158 }; 159 160 var allVariables = new string[] { "y", "x1", "x2" }; 161 // (two possible solutions) 162 // x2 <= 1.5 -> -1.0 163 // x2 > 1.5 AND x1 <= 1.5 -> -1.0 164 // x2 > 1.5 AND x1 > 1.5 -> 1.0 165 BuildTree(xy, allVariables, 10); 166 } 167 } 168 169 [TestMethod] 170 [TestCategory("Algorithms.DataAnalysis")] 171 [TestProperty("Time", "long")] 172 public void GradientBoostingTestTowerSquaredError() { 173 var gbt = new GradientBoostedTreesAlgorithm(); 174 var provider = new HeuristicLab.Problems.Instances.DataAnalysis.RegressionRealWorldInstanceProvider(); 175 var instance = provider.GetDataDescriptors().Single(x => x.Name.Contains("Tower")); 176 var regProblem = new RegressionProblem(); 177 regProblem.Load(provider.LoadData(instance)); 178 179 #region Algorithm Configuration 180 gbt.Problem = regProblem; 181 gbt.Seed = 0; 182 gbt.SetSeedRandomly = false; 183 gbt.Iterations = 5000; 184 gbt.MaxSize = 20; 185 #endregion 186 187 RunAlgorithm(gbt); 188 189 Assert.AreEqual(267.68704241153921, ((DoubleValue)gbt.Results["Loss (train)"].Value).Value, 1E-6); 190 Assert.AreEqual(393.84704062205469, ((DoubleValue)gbt.Results["Loss (test)"].Value).Value, 1E-6); 191 } 192 193 [TestMethod] 194 [TestCategory("Algorithms.DataAnalysis")] 195 [TestProperty("Time", "long")] 196 public void GradientBoostingTestTowerAbsoluteError() { 197 var gbt = new GradientBoostedTreesAlgorithm(); 198 var provider = new HeuristicLab.Problems.Instances.DataAnalysis.RegressionRealWorldInstanceProvider(); 199 var instance = provider.GetDataDescriptors().Single(x => x.Name.Contains("Tower")); 200 var regProblem = new RegressionProblem(); 201 regProblem.Load(provider.LoadData(instance)); 202 203 #region Algorithm Configuration 204 gbt.Problem = regProblem; 205 gbt.Seed = 0; 206 gbt.SetSeedRandomly = false; 207 gbt.Iterations = 1000; 208 gbt.MaxSize = 20; 209 gbt.Nu = 0.02; 210 gbt.LossFunctionParameter.Value = gbt.LossFunctionParameter.ValidValues.First(l => l.ToString().Contains("Absolute")); 211 #endregion 212 213 RunAlgorithm(gbt); 214 215 Assert.AreEqual(10.551385044666661, ((DoubleValue)gbt.Results["Loss (train)"].Value).Value, 1E-6); 216 Assert.AreEqual(12.918001745581172, ((DoubleValue)gbt.Results["Loss (test)"].Value).Value, 1E-6); 217 } 218 219 [TestMethod] 220 [TestCategory("Algorithms.DataAnalysis")] 221 [TestProperty("Time", "long")] 222 public void GradientBoostingTestTowerRelativeError() { 223 var gbt = new GradientBoostedTreesAlgorithm(); 224 var provider = new HeuristicLab.Problems.Instances.DataAnalysis.RegressionRealWorldInstanceProvider(); 225 var instance = provider.GetDataDescriptors().Single(x => x.Name.Contains("Tower")); 226 var regProblem = new RegressionProblem(); 227 regProblem.Load(provider.LoadData(instance)); 228 229 #region Algorithm Configuration 230 gbt.Problem = regProblem; 231 gbt.Seed = 0; 232 gbt.SetSeedRandomly = false; 233 gbt.Iterations = 3000; 234 gbt.MaxSize = 20; 235 gbt.Nu = 0.005; 236 gbt.LossFunctionParameter.Value = gbt.LossFunctionParameter.ValidValues.First(l => l.ToString().Contains("Relative")); 237 #endregion 238 239 RunAlgorithm(gbt); 240 241 Assert.AreEqual(0.061954221604374943, ((DoubleValue)gbt.Results["Loss (train)"].Value).Value, 1E-6); 242 Assert.AreEqual(0.06316303473499961, ((DoubleValue)gbt.Results["Loss (test)"].Value).Value, 1E-6); 243 } 244 245 // same as in SamplesUtil 246 private void RunAlgorithm(IAlgorithm a) { 247 var trigger = new EventWaitHandle(false, EventResetMode.ManualReset); 248 Exception ex = null; 249 a.Stopped += (src, e) => { trigger.Set(); }; 250 a.ExceptionOccurred += (src, e) => { ex = e.Value; trigger.Set(); }; 251 a.Prepare(); 252 a.Start(); 253 trigger.WaitOne(); 254 255 Assert.AreEqual(ex, null); 256 } 257 258 #region helper 143 259 private void BuildTree(double[,] xy, string[] allVariables, int maxDepth) { 144 260 int nRows = xy.GetLength(0); … … 161 277 private void WriteTree(RegressionTreeModel.TreeNode[] tree, int idx, string partialRule, double offset) { 162 278 var n = tree[idx]; 163 if (n. varName == RegressionTreeModel.TreeNode.NO_VARIABLE) {164 Console.WriteLine("{0} -> {1:F}", partialRule, n. val + offset);279 if (n.VarName == RegressionTreeModel.TreeNode.NO_VARIABLE) { 280 Console.WriteLine("{0} -> {1:F}", partialRule, n.Val + offset); 165 281 } else { 166 WriteTree(tree, n. leftIdx,282 WriteTree(tree, n.LeftIdx, 167 283 string.Format(CultureInfo.InvariantCulture, "{0}{1}{2} <= {3:F}", 168 284 partialRule, 169 285 string.IsNullOrEmpty(partialRule) ? "" : " and ", 170 n. varName,171 n. val), offset);172 WriteTree(tree, n. rightIdx,286 n.VarName, 287 n.Val), offset); 288 WriteTree(tree, n.RightIdx, 173 289 string.Format(CultureInfo.InvariantCulture, "{0}{1}{2} > {3:F}", 174 290 partialRule, 175 291 string.IsNullOrEmpty(partialRule) ? "" : " and ", 176 n.varName, 177 n.val), offset); 178 } 179 } 292 n.VarName, 293 n.Val), offset); 294 } 295 } 296 #endregion 180 297 } 181 298 }
Note: See TracChangeset
for help on using the changeset viewer.