public void LargeSampleTest1() { Accord.Math.Tools.SetupGenerator(0); int[][] dataSamples = Matrix.Random(500, 3, 0, 10).ToInt32().ToArray(); int[] target = Matrix.Random(500, 1, 0, 2).ToInt32().GetColumn(0); DecisionVariable[] features = { new DecisionVariable("Outlook", 10), new DecisionVariable("Temperature", 10), new DecisionVariable("Humidity", 10), }; DecisionTree tree = new DecisionTree(features, 2); ID3Learning id3Learning = new ID3Learning(tree); double error = id3Learning.Run(dataSamples, target); Assert.IsTrue(error < 0.2); var code = tree.ToCode("MyTree"); Assert.IsNotNull(code); Assert.IsTrue(code.Length > 0); }
public void Run(String filename) { ReadFile(filename); // Create a new codification codebook to // convert strings into integer symbols Codification codebook = new Codification(data, inputColumns.ToArray()); // Translate our training data into integer symbols using our codebook: DataTable symbols = codebook.Apply(data); foreach (String s in inputColumns) CreateDic(s, symbols); CreateDic(outputColumn, symbols); int[][] inputs = (from p in symbols.AsEnumerable() select GetInputRow(p) ).Cast<int[]>().ToArray(); int[] outputs = (from p in symbols.AsEnumerable() select GetIndex(outputColumn, p[outputColumn].ToString())).Cast<int>().ToArray(); // Gather information about decision variables DecisionVariable[] attributes = GetDecisionVariables(); int classCount = GetCount(outputColumn); // 2 possible output values for playing tennis: yes or no //Create the decision tree using the attributes and classes DecisionTree tree = new DecisionTree(attributes, classCount); // Create a new instance of the ID3 algorithm ID3Learning id3learning = new ID3Learning(tree); //C45Learning c45learning = new C45Learning(tree); // Learn the training instances! id3learning.Run(inputs, outputs); //c45learning.Run(inputs2, outputs); /* string answer = codebook.Translate(outputColumn, tree.Compute(codebook.Translate("Sunny", "Hot", "High", "Strong"))); Console.WriteLine("Calculate for: Sunny, Hot, High, Strong"); Console.WriteLine("Answer: " + answer); */ var expression = tree.ToExpression(); Console.WriteLine(tree.ToCode("ClassTest")); DecisionSet rules = tree.ToRules(); Console.WriteLine(rules.ToString()); // Compiles the expression to IL var func = expression.Compile(); }
public void Run(String filename) { ReadFile(filename); // Now, we have to convert the textual, categorical data found // in the table to a more manageable discrete representation. // // For this, we will create a codebook to translate text to // discrete integer symbols: // Codification codebook = new Codification(data); // And then convert all data into symbols // DataTable symbols = codebook.Apply(data); for (int i = 0; i < inputColumns.Count; i++) if (inputTypes[i] == "string") CreateDic(inputColumns[i], symbols); CreateDic(outputColumn, symbols); double[][] inputs = (from p in symbols.AsEnumerable() select GetInputRow(p) ).Cast<double[]>().ToArray(); int[] outputs = (from p in symbols.AsEnumerable() select GetIndex(outputColumn, p[outputColumn].ToString())).Cast<int>().ToArray(); // From now on, we can start creating the decision tree. // var attributes = DecisionVariable.FromCodebook(codebook, inputColumns.ToArray()); DecisionTree tree = new DecisionTree(attributes, 5); //outputClasses: 5 // Now, let's create the C4.5 algorithm C45Learning c45 = new C45Learning(tree); // and learn a decision tree. The value of // the error variable below should be 0. // double error = c45.Run(inputs, outputs); // To compute a decision for one of the input points, // such as the 25-th example in the set, we can use // //int y = tree.Compute(inputs[25]); // Finally, we can also convert our tree to a native // function, improving efficiency considerably, with // //Func<double[], int> func = tree.ToExpression().Compile(); // Again, to compute a new decision, we can just use // //int z = func(inputs[25]); var expression = tree.ToExpression(); Console.WriteLine(tree.ToCode("ClassTest")); DecisionSet s = tree.ToRules(); Console.WriteLine(s.ToString()); }
public void Run() { DataTable data = new DataTable("Mitchell's Tennis Example"); data.Columns.Add("Day"); data.Columns.Add("Outlook"); data.Columns.Add("Temperature"); data.Columns.Add("Humidity"); data.Columns.Add("Wind"); data.Columns.Add("PlayTennis"); data.Rows.Add("D1", "Sunny", "Hot", "High", "Weak", "No"); data.Rows.Add("D2", "Sunny", "Hot", "High", "Strong", "No"); data.Rows.Add("D3", "Overcast", "Hot", "High", "Weak", "Yes"); data.Rows.Add("D4", "Rain", "Mild", "High", "Weak", "Yes"); data.Rows.Add("D5", "Rain", "Cool", "Normal", "Weak", "Yes"); data.Rows.Add("D6", "Rain", "Cool", "Normal", "Strong", "No"); data.Rows.Add("D7", "Overcast", "Cool", "Normal", "Strong", "Yes"); data.Rows.Add("D8", "Sunny", "Mild", "High", "Weak", "No"); data.Rows.Add("D9", "Sunny", "Cool", "Normal", "Weak", "Yes"); data.Rows.Add("D10", "Rain", "Mild", "Normal", "Weak", "Yes"); data.Rows.Add("D11", "Sunny", "Mild", "Normal", "Strong", "Yes"); data.Rows.Add("D12", "Overcast", "Mild", "High", "Strong", "Yes"); data.Rows.Add("D13", "Overcast", "Hot", "Normal", "Weak", "Yes"); data.Rows.Add("D14", "Rain", "Mild", "High", "Strong", "No"); // Create a new codification codebook to // convert strings into integer symbols Codification codebook = new Codification(data, "Outlook", "Temperature", "Humidity", "Wind", "PlayTennis"); // Translate our training data into integer symbols using our codebook: DataTable symbols = codebook.Apply(data); CreateDic("Outlook", symbols); CreateDic("Temperature", symbols); CreateDic("Humidity", symbols); CreateDic("Wind", symbols); CreateDic("PlayTennis", symbols); int[][] inputs = (from p in symbols.AsEnumerable() select new int[] { GetIndex("Outlook", p["Outlook"].ToString()), GetIndex("Temperature", p["Temperature"].ToString()), GetIndex("Humidity", p["Humidity"].ToString()), GetIndex("Wind", p["Wind"].ToString()) }).Cast<int[]>().ToArray(); int[] outputs = (from p in symbols.AsEnumerable() select GetIndex("PlayTennis", p["PlayTennis"].ToString())).Cast<int>().ToArray(); /* // Gather information about decision variables DecisionVariable[] attributes = { new DecisionVariable("Outlook", 3), // 3 possible values (Sunny, overcast, rain) new DecisionVariable("Temperature", 3), // 3 possible values (Hot, mild, cool) new DecisionVariable("Humidity", 2), // 2 possible values (High, normal) new DecisionVariable("Wind", 2) // 2 possible values (Weak, strong) }; */ DecisionVariable[] attributes = { new DecisionVariable("Outlook", GetCount("Outlook")), // 3 possible values (Sunny, overcast, rain) new DecisionVariable("Temperature", GetCount("Temperature")), // 3 possible values (Hot, mild, cool) new DecisionVariable("Humidity", GetCount("Humidity")), // 2 possible values (High, normal) new DecisionVariable("Wind", GetCount("Wind")) // 2 possible values (Weak, strong) }; int classCount = GetCount("PlayTennis"); // 2 possible output values for playing tennis: yes or no //Create the decision tree using the attributes and classes DecisionTree tree = new DecisionTree(attributes, classCount); // Create a new instance of the ID3 algorithm ID3Learning id3learning = new ID3Learning(tree); // Learn the training instances! id3learning.Run(inputs, outputs); string answer = codebook.Translate("PlayTennis", tree.Compute(codebook.Translate("Sunny", "Hot", "High", "Strong"))); Console.WriteLine("Calculate for: Sunny, Hot, High, Strong"); Console.WriteLine("Answer: " + answer); var expression = tree.ToExpression(); Console.WriteLine(tree.ToCode("ClassTest")); DecisionSet s = tree.ToRules(); Console.WriteLine(s.ToString()); // Compiles the expression to IL var func = expression.Compile(); }