static Node BuildTree(Node root) { if (root.Class().HasValue) { Console.WriteLine(); Console.WriteLine($"All have class {root.Class()}"); Console.WriteLine(root.TrainingInstances); return(root); } var paramName = SelectParameter(root.TrainingInstances); foreach (var val in Enums.Items <Value>()) { Console.WriteLine(); Console.WriteLine($"{paramName}={val}"); root.ChildNodes.Add(BuildTree(new Node(root.TrainingInstances .Where(inst => inst.Parameters[paramName].Value == val) .Select(inst => inst.Without(paramName)) .ToInstanceSet(), new Parameter(val, paramName)))); } return(root); }
static Class Classify(Node root, Instance instance) { if (root.Class().HasValue) { return(root.Class().Value); } return(Classify(root.ChildNodes.First(n => instance.Parameters[n.Parameter?.Name].Value == n.Parameter?.Value), instance)); }