private List <Rule> CreateRulesForNotQualitativeArguments(Data[] elements, int indexOfArgument) { List <Rule> rules = new List <Rule>(); double[] valuesOfArgument = SortValuesOfArgument(elements, indexOfArgument); for (int j = 0; j < valuesOfArgument.Length; j++) { Rule temp = new Rule(); temp.IndexOfArgument = indexOfArgument; temp.IsQualitative = false; if (j + 1 < valuesOfArgument.Length) { temp.Rules.Add(CreateValueForRule(valuesOfArgument, j)); } else { temp.Rules.Add(valuesOfArgument[j]); } Data[] left = null, right = null; GeneralMethods.DivideSampleByNotQualitiveRule(out left, out right, elements, temp.Rules[0], indexOfArgument); temp.Error = GeneralMethods.CountError(left); temp.Error += GeneralMethods.CountError(right); rules.Add(temp); } return(rules); }
private void CountErrorInQualitativeRules(List <Rule> rules, Data[] elements) { for (int i = 0; i < rules.Count; i++) { Data[] left = null, right = null; GeneralMethods.DivideSampleByQualitiveRule(out left, out right, elements, rules[i].Rules, rules[i].IndexOfArgument); rules[i].Error = GeneralMethods.CountError(left); rules[i].Error += GeneralMethods.CountError(right); } }
private void Learn() { //build the tree using CART algorithm Queue <DecisionTreeNode> qe = new Queue <DecisionTreeNode>(); qe.Enqueue(Head); while (GeneralMethods.FindErrorSum(this) > 0) { DecisionTreeNode tempNode = new DecisionTreeNode(); tempNode = qe.Dequeue(); if (GeneralMethods.CountError(tempNode.Elements) != 0) { tempNode.Rule = new Rule(tempNode.Elements); AddChildren(tempNode); qe.Enqueue(tempNode.LeftChild); qe.Enqueue(tempNode.RightChild); } } TreeError = GeneralMethods.FindErrorSum(this); }
public static double FindErrorInNode(Data[] elements, int allElements) { double error = GeneralMethods.CountError(elements) * elements.Length; return(error / allElements); }