correct = 0
N = 0
for fold in range(1,6):
    X = data[:,0:4]
    Y = data[:,4]
    P = dm.get_partitioned_dataset(X,Y,fold)

    X_train = P["train"]["X"]
    Y_train = P["train"]["Y"]
    X_val = P["val"]["X"]
    Y_val = P["val"]["Y"]

    print("=="*5,"Fold:",fold,"=="*5)
    print("Training Started.")
    tree = DecisionTree()
    tree.NV_name_map = NV_name_map
    tree.NA_map = NA_map
    tree.create_tree(X_train,Y_train,NV_map)
    print("Training Over.")
    print("Validating..")
    Y_pred = tree.predict(X_val)
    print("Actual Y:",Y_val)
    print("Predicted Y:",Y_pred)
    acc, crct, n = dm.get_accuracy(Y_val,Y_pred)
    print("Accuracy:",acc,"%")
    correct+=crct
    N+=n
    trees.append(tree)

print("Overall accuracy =",(correct*100)/N,"%")
print("Press 1 and Enter to print last tree.")