public DecisionSystem GetSubset(string decisionClassName,
                                        string attributeName)
        {
            int classNumber;

            for (classNumber = 1;
                 classNumber < Records[0].Length - 1;
                 classNumber++)
            {
                if (Records[0][classNumber] == decisionClassName)
                {
                    break;
                }
            }

            var recordsList = new List <string[]>();

            recordsList.Add(Records[0]);

            for (int i = 1; i < Records.Length; i++)
            {
                if (Records[i][classNumber] == attributeName)
                {
                    recordsList.Add(Records[i]);
                }
            }

            var subset = new DecisionSystem();

            subset.Records = recordsList.ToArray();

            return(subset);
        }
        public DecisionSystem GetSubset(string decisionClassName, 
                                        string attributeName)
        {
            int classNumber;

            for (classNumber = 1;
                 classNumber < Records[0].Length - 1;
                 classNumber++)
                if (Records[0][classNumber] == decisionClassName)
                    break;

            var recordsList = new List<string[]>();

            recordsList.Add(Records[0]);

            for (int i = 1; i < Records.Length; i++)
                if (Records[i][classNumber] == attributeName)
                    recordsList.Add(Records[i]);

            var subset = new DecisionSystem();

            subset.Records = recordsList.ToArray();

            return subset;
        }
示例#3
0
        private Leaf build(DecisionSystem ds, DecisionClassAttribute parentLink)
        {
            var leaf = new Leaf {
                ParentLink = parentLink
            };

            // an end of recursion
            // if entropy equals 0 decision is deterministic
            if (parentLink != null && parentLink.Entropy == 0)
            {
                return(leaf);
            }

            // divide decision system into decision classes, assuming that
            // first row contains labels,
            // first column contains ordinal,
            // last column contains decision
            var records = ds.Records;

            var decisionClasses = new List <DecisionClass>();

            var decisionsVector = ds.
                                  GetDecisionClassVector(ds.Records[0].Length - 1);

            for (int i = 1; i < records[0].Length - 1; i++)
            {
                var decisionClassVector = ds.GetDecisionClassVector(i);

                var dc = new DecisionClass(decisionClassVector,
                                           decisionsVector);

                decisionClasses.Add(dc);
            }

            decisionClasses.ForEach(x => x.BuildAttributesList());

            // sort decision classes by their gain
            decisionClasses.Sort();

            // get class with the highest gain as a leaf
            leaf.DecisionClass = decisionClasses.Last();

            // we continue to build tree,
            // searching for the next decision class for leaf
            foreach (var attribute in leaf.DecisionClass.Attributes)
            {
                var subset = ds.GetSubset(leaf.DecisionClass.Name,
                                          attribute.AttributeName);

                leaf.Children.Add(build(subset, attribute));
            }

            return(leaf);
        }
        private Leaf build(DecisionSystem ds, DecisionClassAttribute parentLink)
        {
            var leaf = new Leaf { ParentLink = parentLink };

            // an end of recursion
            // if entropy equals 0 decision is deterministic
            if (parentLink != null && parentLink.Entropy == 0)
                return leaf;

            // divide decision system into decision classes, assuming that
            // first row contains labels,
            // first column contains ordinal,
            // last column contains decision
            var records = ds.Records;

            var decisionClasses = new List<DecisionClass>();

            var decisionsVector = ds.
                GetDecisionClassVector(ds.Records[0].Length - 1);

            for (int i = 1; i < records[0].Length - 1; i++)
            {
                var decisionClassVector = ds.GetDecisionClassVector(i);

                var dc = new DecisionClass(decisionClassVector,
                                           decisionsVector);

                decisionClasses.Add(dc);
            }

            decisionClasses.ForEach(x => x.BuildAttributesList());

            // sort decision classes by their gain
            decisionClasses.Sort();

            // get class with the highest gain as a leaf
            leaf.DecisionClass = decisionClasses.Last();

            // we continue to build tree,
            // searching for the next decision class for leaf
            foreach (var attribute in leaf.DecisionClass.Attributes)
            {
                var subset = ds.GetSubset(leaf.DecisionClass.Name,
                                          attribute.AttributeName);

                leaf.Children.Add(build(subset, attribute));
            }

            return leaf;
        }
        public static void Main(string[] args)
        {
            string outputFileName = "graph.dot";

            if (args.Length == 0)
            {
                printHelp();

                return;
            }

            for (int i = 1; i < args.Length; i++)
            {
                switch (args[i])
                {
                    case "--output-file-name":
                        i++;

                        outputFileName = args[i];

                        break;

                    default:

                        break;
                }
            }

            string path = args[0];

            var ds = new DecisionSystem();

            ds.Load(path);

            var tree = new DecisionTree();

            tree.Build(ds);

            var graph = new DecisionTreeGraph(tree);

            graph.BuildGraph();
            graph.DrawGraph(outputFileName);
        }
示例#6
0
        public static void Main(string[] args)
        {
            string outputFileName = "graph.dot";

            if (args.Length == 0)
            {
                printHelp();

                return;
            }

            for (int i = 1; i < args.Length; i++)
            {
                switch (args[i])
                {
                case "--output-file-name":
                    i++;

                    outputFileName = args[i];

                    break;

                default:

                    break;
                }
            }

            string path = args[0];

            var ds = new DecisionSystem();

            ds.Load(path);

            var tree = new DecisionTree();

            tree.Build(ds);

            var graph = new DecisionTreeGraph(tree);

            graph.BuildGraph();
            graph.DrawGraph(outputFileName);
        }
 public void Build(DecisionSystem ds)
 {
     Root = build(ds, null);
 }
示例#8
0
 public void Build(DecisionSystem ds)
 {
     Root = build(ds, null);
 }