// wrap an actual model in a surrograte public GradientBoostedTreesModelSurrogate(IRegressionProblemData trainingProblemData, uint seed, ILossFunction lossFunction, int iterations, int maxSize, double r, double m, double nu, IGradientBoostedTreesModel model) : this(trainingProblemData, seed, lossFunction, iterations, maxSize, r, m, nu) { this.actualModel = model; }
// forward message to actual model (recalculate model first if necessary) public override IEnumerable <double> GetEstimatedValues(IDataset dataset, IEnumerable <int> rows) { if (actualModel == null) { actualModel = RecalculateModel(); } return(actualModel.GetEstimatedValues(dataset, rows)); }
private GradientBoostedTreesModelSurrogate(GradientBoostedTreesModelSurrogate original, Cloner cloner) : base(original, cloner) { if (original.actualModel != null) this.actualModel = cloner.Clone(original.actualModel); this.trainingProblemData = cloner.Clone(original.trainingProblemData); this.lossFunction = cloner.Clone(original.lossFunction); this.seed = original.seed; this.iterations = original.iterations; this.maxSize = original.maxSize; this.r = original.r; this.m = original.m; this.nu = original.nu; }
private GradientBoostedTreesModelSurrogate(GradientBoostedTreesModelSurrogate original, Cloner cloner) : base(original, cloner) { if (original.actualModel != null) { this.actualModel = cloner.Clone(original.actualModel); } this.trainingProblemData = cloner.Clone(original.trainingProblemData); this.lossFunction = cloner.Clone(original.lossFunction); this.seed = original.seed; this.iterations = original.iterations; this.maxSize = original.maxSize; this.r = original.r; this.m = original.m; this.nu = original.nu; }
private GradientBoostedTreesModelSurrogate(GradientBoostedTreesModelSurrogate original, Cloner cloner) : base(original, cloner) { IGradientBoostedTreesModel clonedModel = null; if (original.actualModel.IsValueCreated) { clonedModel = cloner.Clone(original.ActualModel); } actualModel = new Lazy <IGradientBoostedTreesModel>(CreateLazyInitFunc(clonedModel)); // only capture clonedModel in the closure this.trainingProblemData = cloner.Clone(original.trainingProblemData); this.lossFunction = cloner.Clone(original.lossFunction); this.seed = original.seed; this.iterations = original.iterations; this.maxSize = original.maxSize; this.r = original.r; this.m = original.m; this.nu = original.nu; }
private Func <IGradientBoostedTreesModel> CreateLazyInitFunc(IGradientBoostedTreesModel clonedModel) { return(() => { return clonedModel ?? RecalculateModel(); }); }
// wrap an actual model in a surrograte public GradientBoostedTreesModelSurrogate(IGradientBoostedTreesModel model, IRegressionProblemData trainingProblemData, uint seed, ILossFunction lossFunction, int iterations, int maxSize, double r, double m, double nu) : this(trainingProblemData, seed, lossFunction, iterations, maxSize, r, m, nu) { actualModel = new Lazy <IGradientBoostedTreesModel>(() => model); }
// forward message to actual model (recalculate model first if necessary) public override IEnumerable<double> GetEstimatedValues(IDataset dataset, IEnumerable<int> rows) { if (actualModel == null) actualModel = RecalculateModel(); return actualModel.GetEstimatedValues(dataset, rows); }