Esempio n. 1
0
 public Forest(int Trees, int DataSize, int Rounds, Func<int, DataSet> DataGenerator, Func<AttributeValue[]> EntryGenerator, Func<AttributeValue[], bool> Validator, int Target)
 {
     _Target = Target;
     for (int i = 0; i < Trees; ++i)
     {
         DataSet D = DataGenerator.Invoke(DataSize);
         _Trees.Add(new DecisionTree(D, Target));
         _DataSets.Add(D);
     }
     for (int i = 0; i < Rounds; ++i)
     {
         Console.WriteLine(i);
         AttributeValue[] E = EntryGenerator.Invoke();
         for (int j = 0; j < _Trees.Count; ++j)
         {
             AttributeValue Answer = _Trees[j].MakeDecision(E);
             E[Target] = Answer;
             if (!Validator.Invoke(E))
             {
                 Console.WriteLine("RECONSTRUCT TREE {0}", j);
                 _DataSets[j].AddEntry(E);
                 _Trees[j] = new DecisionTree(_DataSets[j], Target);
             }
         }
     }
 }
Esempio n. 2
0
 public DecisionTree(DataSet DataSet, int Target)
 {
     KeyValuePair<AttributeValue, bool> S = DataSet.SingularValue(Target);
     if (S.Value) _Value = S.Key;
     else
     {
         _Check = DataSet.BestGain(Target);
         if (_Check == null)
         {
             _Value = DataSet.MostCommonValue(Target);
             return;
         }
         _Children = new List<KeyValuePair<AttributeValue, DecisionTree>>();
         List<AttributeValue> A = DataSet.SortedValues(_Check.Function);
         foreach (AttributeValue V in A)
         {
             DecisionTree C = new DecisionTree(DataSet.Subset(_Check.Function, V), Target);
             _Children.Add(new KeyValuePair<AttributeValue, DecisionTree>(V, C));
         }
     }
 }
Esempio n. 3
0
 public void AddEntry(AttributeValue[] Entry)
 {
     foreach (DataSet D in _DataSets) D.AddEntry(Entry);
     for (int i = 0; i < _DataSets.Count; ++i) _Trees[i] = new DecisionTree(_DataSets[i], _Target);
 }
 void BuildTree(DecisionTree tree)
 {
     treeView1.Nodes.Add(BuildTreeNode(tree.Root, String.Empty));
 }