Дерево решений ID3 работает вечно - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть дерево решений для классификации данных из набора данных грибов. Этикетки либо съедобны, либо ядовиты. Я использую энтропию для расчета прироста информации для каждого атрибута. Когда я устанавливаю предел глубины, дерево, кажется, классифицируется соответствующим образом, однако, если я позволю ему работать, пока у меня не будет больше атрибутов, дерево будет работать вечно. Будучи новичком в этом, я не уверен, где это идет не так, вот мой код ниже:

def ID3NoDepth(data, attrs, label):

    #create the node with name and data
    node = Node(label, data)

    if Entropy(data.raw_data) == 0:
        label = getMajLabels(data.raw_data)
        node.result = label
        return node
    elif len(attrs) == 0:
        label = getMajLabels(data.raw_data)
        node.result = label
        return node
    else:
        root = findTopIg(data, attrs)

        val_root = data.attributes[root].possible_vals
        val_root_index = attrs.index(root)

        node.index = val_root_index
        node.branchName = root
        node.labels = val_root

        newAttrsList = attrs.copy()
        newAttrsList.remove(root)

        for b in val_root:
            subset = data_obj.get_row_subset(root, b)
            node.childz.append(ID3NoDepth(subset, newAttrsList, b))

        return node

Любая помощь в правильном направлении очень ценится!

...