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 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; }
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); }