Changeset 17928 for branches/3026_IntegrationIntoSymSpace/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest
- Timestamp:
- 04/06/21 13:13:32 (4 years ago)
- Location:
- branches/3026_IntegrationIntoSymSpace
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3026_IntegrationIntoSymSpace
- Property svn:mergeinfo changed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.Algorithms.DataAnalysis
- Property svn:mergeinfo changed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.Algorithms.DataAnalysis/3.4
- Property svn:mergeinfo changed
-
branches/3026_IntegrationIntoSymSpace/HeuristicLab.Algorithms.DataAnalysis/3.4/RandomForest/RandomForestModelSurrogate.cs
r17180 r17928 35 35 #region parameters for recalculation of the model 36 36 [Storable] 37 private int seed;37 private readonly int seed; 38 38 [Storable] 39 private IDataAnalysisProblemData originalTrainingData;39 private readonly IDataAnalysisProblemData originalTrainingData; 40 40 [Storable] 41 private double[] classValues;41 private readonly double[] classValues; 42 42 [Storable] 43 private int nTrees;43 private readonly int nTrees; 44 44 [Storable] 45 private double r;45 private readonly double r; 46 46 [Storable] 47 private double m;47 private readonly double m; 48 48 #endregion 49 49 50 50 51 // don't store the actual model! 51 52 // the actual model is only recalculated when necessary 53 private IRandomForestModel fullModel = null; 52 54 private readonly Lazy<IRandomForestModel> actualModel; 55 53 56 private IRandomForestModel ActualModel { 54 57 get { return actualModel.Value; } … … 74 77 this.m = m; 75 78 76 actualModel = new Lazy<IRandomForestModel>(() => RecalculateModel());79 actualModel = CreateLazyInitFunc(); 77 80 } 78 81 79 // wrap an actual model in a surrog rate82 // wrap an actual model in a surrogate 80 83 public RandomForestModelSurrogate(IRandomForestModel model, string targetVariable, IDataAnalysisProblemData originalTrainingData, 81 int seed, int nTrees, double r, double m, double[] classValues = null) : this(targetVariable, originalTrainingData, seed, nTrees, r, m, classValues) { 82 actualModel = new Lazy<IRandomForestModel>(() => model); 84 int seed, int nTrees, double r, double m, double[] classValues = null) 85 : this(targetVariable, originalTrainingData, seed, nTrees, r, m, classValues) { 86 fullModel = model; 83 87 } 84 88 85 89 [StorableConstructor] 86 90 private RandomForestModelSurrogate(StorableConstructorFlag _) : base(_) { 87 actualModel = new Lazy<IRandomForestModel>(() => RecalculateModel());91 actualModel = CreateLazyInitFunc(); 88 92 } 89 93 90 94 private RandomForestModelSurrogate(RandomForestModelSurrogate original, Cloner cloner) : base(original, cloner) { 91 IRandomForestModel clonedModel = null;92 if (original.actualModel.IsValueCreated) clonedModel = cloner.Clone(original.ActualModel);93 actualModel = new Lazy<IRandomForestModel>(CreateLazyInitFunc(clonedModel)); // only capture clonedModel in the closure94 95 95 // clone data which is necessary to rebuild the model 96 96 this.originalTrainingData = cloner.Clone(original.originalTrainingData); … … 100 100 this.r = original.r; 101 101 this.m = original.m; 102 }103 102 104 private Func<IRandomForestModel> CreateLazyInitFunc(IRandomForestModel clonedModel) { 105 return () => { 106 return clonedModel ?? RecalculateModel(); 107 }; 103 // clone full model if it has already been created 104 if (original.fullModel != null) this.fullModel = cloner.Clone(original.fullModel); 105 actualModel = CreateLazyInitFunc(); 108 106 } 109 107 110 108 public override IDeepCloneable Clone(Cloner cloner) { 111 109 return new RandomForestModelSurrogate(this, cloner); 110 } 111 112 private Lazy<IRandomForestModel> CreateLazyInitFunc() { 113 return new Lazy<IRandomForestModel>(() => { 114 if (fullModel == null) fullModel = RecalculateModel(); 115 return fullModel; 116 }); 112 117 } 113 118 … … 128 133 } 129 134 return randomForestModel; 135 } 136 137 public override bool IsProblemDataCompatible(IDataAnalysisProblemData problemData, out string errorMessage) { 138 return ActualModel.IsProblemDataCompatible(problemData, out errorMessage); 130 139 } 131 140
Note: See TracChangeset
for help on using the changeset viewer.