static void Main(string[] args) { //Outlook Attribute outlook = new Attribute("Outlook", new string[] { "sunny", "overcast", "rainy" }); //Temperature Attribute temp = new Attribute("Temperature", new string[] { "hot", "mild", "cool" }); //Humidity Attribute humidity = new Attribute("Humidity", new string[] { "high", "normal" }); //Windy Attribute windy = new Attribute("Windy", new string[] { "true", "false" }); //načíst data z CSV Attribute[] attributes = new Attribute[] { outlook, temp, humidity, windy }; DataTable samples = loadCSV(); //ID3 na data ID3 id3 = new ID3(); Node root = id3.makeTree(samples, "play", attributes); Console.ReadKey(); printNode(root, "--"); Console.ReadKey(); }
private Node ID3Tree(DataTable DataSet, string Target, Attribute[] attributes) { //Entropie tabulky je 0.00 = JE LEAF if (IsPositive(DataSet, Target) == true) { Node tmpNode = new Node(new Attribute(true)); tmpNode.totalData = DataSet.Rows.Count; return(tmpNode); } if (IsNegative(DataSet, Target) == true) { Node tmpNode = new Node(new Attribute(false)); tmpNode.totalData = DataSet.Rows.Count; return(tmpNode); } //OR TotalLines = 14; SearchFor = Target; TrueNumber = Count(DataSet); //vypočteme entropii setu Console.WriteLine("++++++++++++SET++++++++++++++"); EntropyOfSet = Entropy(TrueNumber, TotalLines - TrueNumber); Console.WriteLine("+++++++++++++++++++++++++++++"); //Najit "nejlepší atribut" - který má největší information gain v tabulce Attribute bestAttribute = GetBestGain(DataSet, attributes); Console.WriteLine("BEST GAIN IN SET: " + bestAttribute.AttributeName); Console.WriteLine(); //Udělat z nejlepšího atributu kořen (node) Node root = new Node(bestAttribute); root.totalData = TotalLines; DataTable aSample = DataSet.Clone(); //Cyklus pro každou možnou hodnotu kterou muže nabývat "Best" atribut foreach (string value in bestAttribute.values) { //Všechny řádky atributu nabývající danou hodnotu aSample.Rows.Clear(); DataRow[] rows = DataSet.Select(bestAttribute.AttributeName + " = " + "'" + value + "'"); foreach (DataRow row in rows) { aSample.Rows.Add(row.ItemArray); } // nový list atributu bez "best gain" attributu ArrayList aAttributes = new ArrayList(attributes.Length - 1); for (int i = 0; i < attributes.Length; i++) { if (attributes[i].AttributeName != bestAttribute.AttributeName) { aAttributes.Add(attributes[i]); } } //Rekurze ID3 algoritmu na novou pod-tabulku (omezený DataSet) //Vkládat node do nodu vytvořeného z best atributu ID3 nextTree = new ID3(); Node ChildNode = nextTree.makeTree(aSample, Target, (Attribute[])aAttributes.ToArray(typeof(Attribute))); root.AddTreeNode(ChildNode, value); } return(root); }