Changeset 18100 for branches/3140_NumberSymbol/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModel.cs
- Timestamp:
- 12/01/21 13:40:55 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3140_NumberSymbol/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModel.cs
r17931 r18100 220 220 } 221 221 222 var constSy = new Constant();222 var numSy = new Number(); 223 223 var varCondSy = new VariableCondition() { IgnoreSlope = true }; 224 224 225 var node = CreateRegressionTreeRec(rf.innerobj.trees, offset, offset + 1, constSy, varCondSy);225 var node = CreateRegressionTreeRec(rf.innerobj.trees, offset, offset + 1, numSy, varCondSy); 226 226 227 227 var startNode = new StartSymbol().CreateTreeNode(); … … 232 232 } 233 233 234 private ISymbolicExpressionTreeNode CreateRegressionTreeRec(double[] trees, int offset, int k, Constant constSy, VariableCondition varCondSy) {234 private ISymbolicExpressionTreeNode CreateRegressionTreeRec(double[] trees, int offset, int k, Number numSy, VariableCondition varCondSy) { 235 235 236 236 // alglib source for evaluation of one tree (dfprocessinternal) … … 262 262 263 263 if ((double)(trees[k]) == (double)(-1)) { 264 var constNode = (ConstantTreeNode)constSy.CreateTreeNode();265 constNode.Value = trees[k + 1];266 return constNode;264 var numNode = (NumberTreeNode)numSy.CreateTreeNode(); 265 numNode.Value = trees[k + 1]; 266 return numNode; 267 267 } else { 268 268 var condNode = (VariableConditionTreeNode)varCondSy.CreateTreeNode(); … … 271 271 condNode.Slope = double.PositiveInfinity; 272 272 273 var left = CreateRegressionTreeRec(trees, offset, k + 3, constSy, varCondSy);274 var right = CreateRegressionTreeRec(trees, offset, offset + (int)Math.Round(trees[k + 2]), constSy, varCondSy);273 var left = CreateRegressionTreeRec(trees, offset, k + 3, numSy, varCondSy); 274 var right = CreateRegressionTreeRec(trees, offset, offset + (int)Math.Round(trees[k + 2]), numSy, varCondSy); 275 275 276 276 condNode.AddSubtree(left); // not 100% correct because interpreter uses: if(x <= thres) left() else right() and RF uses if(x < thres) left() else right() (see above)
Note: See TracChangeset
for help on using the changeset viewer.