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