/// <summary>
        /// Initializes a new instance of the <see cref="BayesPointMachineClassifierTrainingSettings"/> class.
        /// </summary>
        /// <param name="isTrained">Indicates whether the Bayes point machine classifier is trained.</param>
        internal BayesPointMachineClassifierTrainingSettings(Func <bool> isTrained)
        {
            this.trainingSettingsGuard = new SettingsGuard(isTrained, "This setting cannot be changed after training.");

            this.computeModelEvidence = ComputeModelEvidenceDefault;
            this.iterationCount       = IterationCountDefault;
            this.batchCount           = BatchCountDefault;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MatchboxRecommenderAdvancedTrainingSettings"/> class.
        /// </summary>
        /// <param name="isTrained">Indicates whether the Matchbox recommender is trained.</param>
        internal MatchboxRecommenderAdvancedTrainingSettings(Func <bool> isTrained)
        {
            this.trainingSettingsGuard = new SettingsGuard(isTrained, "This setting cannot be changed after training.");

            this.User        = new UserHyperparameters();
            this.Item        = new ItemHyperparameters();
            this.UserFeature = new FeatureHyperparameters();
            this.ItemFeature = new FeatureHyperparameters();
            this.Noise       = new NoiseHyperparameters();
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MatchboxRecommenderTrainingSettings"/> class.
        /// </summary>
        /// <param name="isTrained">Indicates whether the Matchbox recommender is trained.</param>
        internal MatchboxRecommenderTrainingSettings(Func <bool> isTrained)
        {
            this.trainingSettingsGuard = new SettingsGuard(isTrained, "This setting cannot be changed after training.");

            this.Advanced        = new MatchboxRecommenderAdvancedTrainingSettings(isTrained);
            this.useUserFeatures = UseUserFeaturesDefault;
            this.useItemFeatures = UseItemFeaturesDefault;
            this.traitCount      = TraitCountDefault;
            this.batchCount      = BatchCountDefault;
            this.iterationCount  = IterationCountDefault;
        }