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