Accord.MachineLearning.DecisionTrees.DecisionTreeWriter.create C# (CSharp) Method

create() private method

private create ( Accord.MachineLearning.DecisionTrees.DecisionNode node, int depth ) : void
node Accord.MachineLearning.DecisionTrees.DecisionNode
depth int
return void
        private void create(DecisionNode node, int depth)
        {
            string indent = new string(' ', depth * 4);

            if (!node.IsLeaf)
            {
                int attributeIndex = node.Branches.AttributeIndex;

                // Create all comparison expressions
                for (int i = 0; i < node.Branches.Count; i++)
                {
                    DecisionNode child = node.Branches[i];
                    string cmp = ComparisonExtensions.ToString(child.Comparison);

                    if (i == 0)
                        writer.Write(indent + "if ");
                    else
                        writer.Write(indent + "else if ");

                    string value = child.Value.Value.ToString(CultureInfo.InvariantCulture);

                    writer.Write("(input[{0}] {1} {2}) {{", attributeIndex, cmp, value);
                    writer.WriteLine();
                    create(child, depth + 1);
                    writer.WriteLine(indent + "}");
                }

                writer.WriteLine(indent + "else throw new ArgumentException(\"input\", \"Unexpected value at position " + attributeIndex + ".\");");
            }

            else // node is a leaf
            {
                if (node.Output.HasValue)
                {
                    string value = node.Output.Value.ToString(CultureInfo.InvariantCulture);
                    writer.WriteLine(indent + "return " + value + ";");
                }
                else
                {
                    writer.WriteLine(indent + "return -1;");
                }
            }
        }