public override void Train()
        {
            if (UseLaplaceCorrection)
            {
                priorProb = new Dictionary <string, double>();
                IEnumerable <string?> distinctLabels = TrainingInstances.Select(i => i.LabelValue).Distinct();
                foreach (string?labelValue in distinctLabels)
                {
                    priorProb.Add(labelValue ?? throw new NullReferenceException("Unlabeled instance in training instances. "), TrainingInstances.Count(i => i.LabelValue == labelValue) / (double)TrainingInstances.Count);
                }
            }
            string splitFeatureName = GetSplitFeature(TrainingInstances, out double threshold);

            rootNode = new Node(TrainingInstances, splitFeatureName, threshold);
            SplitRecursive(rootNode, -1);
        }