Beispiel #1
0
 def splitTree(self, node):
     """
     according to best split feature, split datasets into multiple parts
     :@ param node: input Tree Node
     :@ rparam children of input node
     """
     children = []
     bestFeature = self.chooseSplitFeature(node)
     if bestFeature < 0:
         return children
     for key in node.uniformAttribute[bestFeature][1]:
         newDataSet = []
         if key.startswith('<='):
             newDataSet = [
                 instance for instance in node.dataSet
                 if instance[bestFeature] <= float(key.split('<= ')[1])
             ]
         elif key.startswith('>'):
             newDataSet = [
                 instance for instance in node.dataSet
                 if instance[bestFeature] > float(key.split('> ')[1])
             ]
         else:
             newDataSet = [
                 instance for instance in node.dataSet
                 if instance[bestFeature] == key
             ]
         newNode = TreeNode(newDataSet, copy.deepcopy(node.attribute),
                            copy.deepcopy(node.classOutput))
         newNode.splitFeatureName = node.attribute[bestFeature][0]
         newNode.splitFeatureValue = key
         children.append(newNode)
     return children