더 이상 분할할 속성이 없거나 하나의 가지에 있는 모든 사례가 전부 같은 분류 항목일 때 멈추게 할 것이다.
여기서 트리를 만드는 코드가 굉장히 큰 도움이 될 만한 요소가 많다.
의사 결정 트리를 dictionary로 구현한다. (혁준이형의 말에 따르면 이런 방식은
JavaScript에서 많이 사용된다고 한다.)
예를 들어 의사 결정 트리가 다음과 같다고 하자.
[PNG image (16.77 KB)]
{'저그 게이머인가?' : {0: '홍진호 아님', 2: {'춤을 잘 추는가?': {0: '홍진호 아님', 2: {'미소가 아름다운가?':{0: '홍진호 아님', 2:{'어떤 머리큰 게이머에게 똑같은 전략을 3번 당해 패배한적 있는가?':{0: '홍진호 아님', 2:'홍진호'
}}}}}
}}}
이런 식으로 Dictionary가 만들어 질 것이다.
구현 코드는 다음과 같다.
def create_tree(data_set, labels):
class_list = [example[-1] for example in data_set]
if class_list.count(class_list[0]) == len(class_list):
return class_list[0]
if len(data_set[0]) == 1:
return majority_cnt(class_list)
best_feat = choose_best_feature_to_split(data_set)
best_feat_label = labels[best_feat]
my_tree = {best_feat_label: {}} #서브 트리의 루트를 만들고,
del(labels[best_feat])
feat_values = [example[best_feat] for example in data_set]
unique_values = set(feat_values)
for value in unique_values: #가지를 뻗어나가는 과정이다.
sub_labels = labels[:]
my_tree[best_feat_label][value] = create_tree(split_data_set(data_set, best_feat, value), sub_labels)
return my_tree