Skip to content

The purpose of this solution is to get the sum of all the decision tree results.

Notifications You must be signed in to change notification settings

fermendezmx/Decision.Trees

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Decision trees

The purpose of this solution is to get the sum of all the decision tree results.

Input:
  - 1000 Decimal variables: VAR_0 ... VAR_999
  - 50 Decision trees
    * Multilevel
    * Each level has a condition based on a variable
        Example:
          * VAR_56 < 0.5
          * VAR_475 > 544 and VAR_475 < 892
    * The result of a decision tree is a decimal number
        Example: 0.2319949
      
Output:
  - SCORE = Sum of the decision tree results

Solution:

public abstract class Decision
{
    public abstract decimal Decide(decimal[] input);
}
public class Node : Decision
{
    public Decision Affirmative { get; set; }
    public Decision Negative { get; set; }
    public Func<decimal[], bool> Condition { get; set; }

    public override decimal Decide(decimal[] input)
    {
        return Condition(input)
            ? Affirmative.Decide(input)
            : Negative.Decide(input);
    }
}
public class Leaf : Decision
{
    public decimal Result { get; set; }

    public override decimal Decide(decimal[] input)
    {
        return Result;
    }
}
/// <summary>
/// Define a set of multilevel trees for testing
/// Where each level has a condition based on a variable
/// </summary>
public static class Forest
{
    public static Node TreeA()
    {
        Node nodeC = new Node
        {
            Condition = (values) => values[0] > 0.5M,
            Affirmative = new Leaf { Result = 1.2M },
            Negative = new Leaf { Result = 0.4M }
        };

        Node nodeB = new Node
        {
            Condition = (values) => values[4] > 1.0M || values[4] == 0.8M,
            Affirmative = nodeC,
            Negative = new Leaf { Result = 2.2M }
        };

        Node nodeA = new Node
        {
            Condition = (values) => values[1] == 0.2M || values[1] > 0.5M,
            Affirmative = new Leaf { Result = 1.3M },
            Negative = nodeB
        };

        return nodeA;
    }

    public static Node TreeB()
    {
        Node nodeC = new Node
        {
            Condition = (values) => values[1] > 0.1M || values[1] == 0.0M,
            Affirmative = new Leaf { Result = 0.6M },
            Negative = new Leaf { Result = 2.4M }
        };

        Node nodeB = new Node
        {
            Condition = (values) => values[3] > 0.4M,
            Affirmative = new Leaf { Result = 0.7M },
            Negative = nodeC
        };

        Node nodeA = new Node
        {
            Condition = (values) => values[4] < 0.3M || values[4] > 0.7M,
            Affirmative = nodeB,
            Negative = new Leaf { Result = 1.5M }
        };

        return nodeA;
    }
}
public class Tree
{
    public Tree(Node root, decimal[] values)
    {
        Root = root;
        Values = values;
    }

    public Node Root { get; set; }
    public decimal[] Values { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        decimal result = 0;
        Node rootA = Forest.TreeA();
        Node rootB = Forest.TreeB();
        List<Tree> trees = new List<Tree>();

        // 1000 decimal variables, VAR_0 ... VAR_999
        decimal[] inputA = { 1.1M, 0.5M, 2.0M, 0.3M, 0.2M };
        decimal[] inputB = { 0.4M, 0.2M, 3.5M, 1.0M, 0.5M };

        // 50 decision trees
        trees.Add(new Tree(rootA, inputA));
        trees.Add(new Tree(rootA, inputB));
        trees.Add(new Tree(rootB, inputA));
        trees.Add(new Tree(rootB, inputB));

        foreach (Tree tree in trees)
        {
            // The result of a decision tree is a decimal number
            result += tree.Root.Decide(tree.Values);
        }

        // Sum of the decision tree results
        Console.WriteLine(result);
        Console.ReadKey();
    }
}

About

The purpose of this solution is to get the sum of all the decision tree results.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages