private static void PrintTree(IDomainTree domainTree, ITreeNode node, String tab = "")
        {
            var outputAttributeId = domainTree.Attributes.Count - 1;

            if (node.IsLeaf())
            {
                var values = domainTree.GetAllSymbolicValuesOfAttribute(SymbolicDomainDataParams.CreateIt(node.Data, outputAttributeId));
                if (values.Length == 0)
                {
                    Console.WriteLine("{0}\t{1} = \"null\";", tab, domainTree.Attributes[outputAttributeId]);
                }
                else
                {
                    Console.WriteLine("{0}\t{1} = \"{2}\";", tab, domainTree.Attributes[outputAttributeId],
                                  domainTree.Domain[outputAttributeId][values[0]]);
                }

                return;
            }

            var numvalues = node.Children.Length;
            for (var i = 0; i < numvalues; i++)
            {
                Console.WriteLine(tab + "if( " + domainTree.Attributes[node.TestAttribute] + " == \"" +
                                  domainTree.Domain[node.TestAttribute][i] + "\") {");
                PrintTree(domainTree, node.Children[i], tab + "\t");

                if (i != numvalues - 1)
                    Console.Write(tab + "} else ");
                else
                    Console.WriteLine(tab + "}");
            }
        }
Example #2
0
        public static void Main(String[] args)
        {
            var num = args.Length;

            if (num != 1)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Error.WriteLine("You need to specify the name of the datafile at the command line ");
                return;
            }

            IDomainTree data = ReadData(args);

            InvokeID3Algorithm(data);

            IDomainTree data2 = ReadData(args);

            InvokeID3Optimized(data2);

            IDomainTree data3 = ReadData(args);

            InvokeID3Algorithm(data3);

            IDomainTree data4 = ReadData(args);

            InvokeID3Optimized(data4);

            Console.WriteLine("Press <enter> to finish program ...");
            Console.ReadLine();
        }
        /// <summary>
        ///   This function returns an integer corresponding to the symbolic value of the attribute.
        ///   If the symbol does not exist in the domain, the symbol is added to the domain of the attribute
        /// </summary>
        /// <param name = "domainTree"></param>
        /// <param name = "domainAttributeId"></param>
        /// <param name = "symbol"></param>
        /// <returns></returns>
        private static int GetSymbolValue(IDomainTree domainTree, int domainAttributeId, String symbol)
        {
            var index = domainTree.Domain[domainAttributeId].IndexOf(symbol);

            if (index < 0)
            {
                domainTree.Domain[domainAttributeId].Add(symbol);
                return(domainTree.Domain[domainAttributeId].Count - 1);
            }

            return(index);
        }
        /// <summary>
        ///   This function returns an integer corresponding to the symbolic value of the attribute.
        ///   If the symbol does not exist in the domain, the symbol is added to the domain of the attribute
        /// </summary>
        /// <param name = "domainTree"></param>
        /// <param name = "domainAttributeId"></param>
        /// <param name = "symbol"></param>
        /// <returns></returns>
        private static int GetSymbolValue(IDomainTree domainTree, int domainAttributeId, String symbol)
        {
            var index = domainTree.Domain[domainAttributeId].IndexOf(symbol);

            if (index < 0)
            {
                domainTree.Domain[domainAttributeId].Add(symbol);
                return domainTree.Domain[domainAttributeId].Count - 1;
            }

            return index;
        }
        private static void EvalInputFrom(EntityData entityData, IDomainTree domainTree)
        {
            foreach (var dataRow in entityData.Data)
            {
                var domainSymbolicAttributes = AttributeSymbolicValues.CreateIt(domainTree.Attributes.Count);

                for (var attributeId = 0; attributeId < domainTree.Attributes.Count; attributeId++)
                    domainSymbolicAttributes.Values[attributeId] = GetSymbolValue(domainTree, attributeId,
                                                                                              dataRow.Values[attributeId]);

                domainTree.Root.Data.Add(domainSymbolicAttributes);
            }
        }
        private static void EvalInputFrom(EntityData entityData, IDomainTree domainTree)
        {
            foreach (var dataRow in entityData.Data)
            {
                var domainSymbolicAttributes = AttributeSymbolicValues.CreateIt(domainTree.Attributes.Count);

                for (var attributeId = 0; attributeId < domainTree.Attributes.Count; attributeId++)
                {
                    domainSymbolicAttributes.Values[attributeId] = GetSymbolValue(domainTree, attributeId,
                                                                                  dataRow.Values[attributeId]);
                }

                domainTree.Root.Data.Add(domainSymbolicAttributes);
            }
        }
        private static void InvokeID3Optimized(IDomainTree data)
        {
            var meOptimized = ID3Algorithm.CreateIt(data, true);

            long startTime = DateTime.Now.Ticks;

            meOptimized.BuildDecisionTree();

            long endTime = DateTime.Now.Ticks;
            long totalTime = (endTime - startTime) / 1000;

            TreePrinter.PrintTree(meOptimized.DomainTree);

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine();
            Console.WriteLine("Generating tree (optimized): {0} ms", totalTime);
            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.White;
        }
Example #8
0
        private static void InvokeID3Algorithm(IDomainTree data)
        {
            var me = ID3Algorithm.CreateIt(data);

            long startTime = DateTime.Now.Ticks;

            me.BuildDecisionTree();

            long endTime   = DateTime.Now.Ticks;
            long totalTime = (endTime - startTime) / 1000;

            TreePrinter.PrintTree(me.DomainTree);

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine();
            Console.WriteLine("Generating tree: {0} ms", totalTime);
            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.White;
        }
        private static void PrintTree(IDomainTree domainTree, ITreeNode node, String tab = "")
        {
            var outputAttributeId = domainTree.Attributes.Count - 1;

            if (node.IsLeaf())
            {
                var values = domainTree.GetAllSymbolicValuesOfAttribute(SymbolicDomainDataParams.CreateIt(node.Data, outputAttributeId));
                if (values.Length == 0)
                {
                    Console.WriteLine("{0}\t{1} = \"null\";", tab, domainTree.Attributes[outputAttributeId]);
                }
                else
                {
                    Console.WriteLine("{0}\t{1} = \"{2}\";", tab, domainTree.Attributes[outputAttributeId],
                                      domainTree.Domain[outputAttributeId][values[0]]);
                }

                return;
            }

            var numvalues = node.Children.Length;

            for (var i = 0; i < numvalues; i++)
            {
                Console.WriteLine(tab + "if( " + domainTree.Attributes[node.TestAttribute] + " == \"" +
                                  domainTree.Domain[node.TestAttribute][i] + "\") {");
                PrintTree(domainTree, node.Children[i], tab + "\t");

                if (i != numvalues - 1)
                {
                    Console.Write(tab + "} else ");
                }
                else
                {
                    Console.WriteLine(tab + "}");
                }
            }
        }
 public static void PrintTree(IDomainTree domainTree)
 {
     PrintTree(domainTree, domainTree.Root);
 }
 public static IDecisionTreeAlgorithm CreateIt(IDomainTree domainTree, bool optimized = false)
 {
     return(new ID3Algorithm(domainTree, optimized));
 }
 private ID3Algorithm(IDomainTree domainTree, bool optimized = false)
 {
     _optimized      = optimized;
     DomainTree      = domainTree;
     _choiceStrategy = DefaultDecisionTreeChoiceStrategy.CreateIt();
 }
 public static IDecisionTreeAlgorithm CreateIt(IDomainTree domainTree, bool optimized = false)
 {
     return new ID3Algorithm(domainTree, optimized);
 }
 private ID3Algorithm(IDomainTree domainTree, bool optimized = false)
 {
     _optimized = optimized;
     DomainTree = domainTree;
     _choiceStrategy = DefaultDecisionTreeChoiceStrategy.CreateIt();
 }
 public static void PrintTree(IDomainTree domainTree)
 {
     PrintTree(domainTree, domainTree.Root);
 }