Ejemplo n.º 1
0
        private static DecisionTreeItem InitializeTreeItem(DataSet dataSet, int levelAvailableCount,
                                                           List <int> unusedFeatures, bool useId3, ref int nodeIndex)
        {
            nodeIndex++;
            var currentIndex = nodeIndex;

            if (dataSet.ClassCount == 1 || levelAvailableCount == 1 || unusedFeatures.Count == 0)
            {
                return(new DecisionTreeLeaf(dataSet.GetClassByMaxCount(), currentIndex));
            }

            levelAvailableCount--;

            (var _, var usedFeature) = DecisionTreeItem.GetBestDecisionFromDataSet(dataSet, unusedFeatures, out var split);
            if (useId3)
            {
                unusedFeatures.Remove(usedFeature);
            }

            if (split is null || split.RightPart.ObjectCount == 0 || split.LeftPart.ObjectCount == 0)
            {
                return(new DecisionTreeLeaf(dataSet.GetClassByMaxCount(), currentIndex));
            }

            var leftChild  = InitializeTreeItem(split.LeftPart, levelAvailableCount, unusedFeatures, useId3, ref nodeIndex);
            var rightChild = InitializeTreeItem(split.RightPart, levelAvailableCount, unusedFeatures, useId3, ref nodeIndex);

            return(new DecisionTreeNode(leftChild, rightChild, split.SplitItemIndex, split.SplitValue, currentIndex));
        }
Ejemplo n.º 2
0
 internal DecisionTreeNode(DecisionTreeItem leftChild, DecisionTreeItem rightChild, int itemDecisionItemIndex, Double compareValue, int nodeIndex) : base(nodeIndex)
 {
     _leftChild         = leftChild;
     _rightChild        = rightChild;
     _decisionItemIndex = itemDecisionItemIndex;
     _compareValue      = compareValue;
 }
Ejemplo n.º 3
0
 private DecisionTree(DecisionTreeItem head, int nodeCount)
 {
     _head     = head;
     NodeCount = nodeCount;
 }