def cross_validation_error(df_labels, N, df_data, segments):

    error_list = {
        'anger': 1,
        'disgust': 2,
        'fear': 3,
        'happiness': 4,
        'sadness': 5,
        'surprise': 6
    }
    for e in cnst.EMOTIONS_LIST:
        total_error_for_emotion = 0
        error_list[1] = 2
        print("/\ Decision tree building for emotion:", e)
        binary_targets = util.filter_for_emotion(df_labels,
                                                 cnst.EMOTIONS_DICT[e])
        for test_seg in segments:
            test_df_data, test_df_targets, train_df_data, train_df_targets = util.divide_data(
                test_seg, N, df_data, df_labels)
            root = dtree.decision_tree(train_df_data, set(cnst.AU_INDICES),
                                       train_df_targets)
            TreeNode.plot_tree(root, e)
            # root = decision_tree(df_data, set(cnst.AU_INDICES), binary_targets)
            print("/\ Decision tree built.\n")
            count = 0
            # Counts number of incorrectly predicted tests
            for i in test_df_data.index.values:
                count += 1 - TreeNode.dfs2(root, test_df_data.loc[i],
                                           test_df_targets.loc[i].at[0])

            error = count / len(test_df_targets)
            total_error_for_emotion += error
            print()

        total_error_for_emotion /= 10
        error_list[e] = total_error_for_emotion
        print()
        print("Total error:", total_error_for_emotion)
        print()
Beispiel #2
0
def visualise(df_labels, df_data, N):
    for e in cnst.EMOTIONS_LIST:
        root = decision_tree(
            df_data, set(cnst.AU_INDICES),
            util.filter_for_emotion(df_labels, cnst.EMOTIONS_DICT[e]))
        TreeNode.plot_tree(root, e)