Maria@18: # -*- coding: utf-8 -*- Maria@18: """ Maria@18: Created on Thu Nov 10 15:10:32 2016 Maria@18: Maria@18: @author: mariapanteli Maria@18: """ Maria@18: import numpy as np Maria@18: import pandas as pd Maria@18: from sklearn import metrics Maria@18: Maria@18: import map_and_average Maria@18: import util_feature_learning Maria@18: Maria@18: Maria@18: FILENAMES = map_and_average.OUTPUT_FILES Maria@18: Maria@18: Maria@18: def load_data_from_pickle(filename): Maria@18: X_list, Y, Yaudio = pickle.load(open(filename,'rb')) Maria@18: X = np.concatenate(data_list, axis=1) Maria@18: return X, Y, Yaudio Maria@18: Maria@18: Maria@18: def get_train_test_indices(): Maria@18: trainset, valset, testset = map_and_average.load_train_val_test_sets() Maria@18: trainaudiolabels, testaudiolabels = trainset[2], testset[2] Maria@18: # train, test indices Maria@18: aa_train = np.unique(trainaudiolabels) Maria@18: aa_test = np.unique(testaudiolabels) Maria@18: traininds = np.array([i for i, item in enumerate(audiolabs) if item in aa_train]) Maria@18: testinds = np.array([i for i, item in enumerate(audiolabs) if item in aa_test]) Maria@18: return traininds, testinds Maria@18: Maria@18: Maria@18: def get_train_test_sets(X, Y, traininds, testinds): Maria@18: X_train = X[traininds, :] Maria@18: Y_train = Y[traininds] Maria@18: X_test = X[testinds, :] Maria@18: Y_test = Y[testinds] Maria@18: return X_train, Y_train, X_test, Y_test Maria@18: Maria@18: Maria@18: def classify_for_filenames(file_list=FILENAMES): Maria@18: df_results = pd.DataFrame() Maria@18: feat_learner = util_feature_learning.Transformer() Maria@18: for filename in file_list: Maria@18: X, Y, Yaudio = load_data_from_pickle(filename) Maria@18: traininds, testinds = get_train_test_indices() Maria@18: X_train, Y_train, X_test, Y_test = get_train_test_sets(X, Y, traininds, testinds) Maria@18: df_result = feat_learner.classify(X_train, Y_train, X_test, Y_test) Maria@18: df_results = pd.concat([df_results, df_result], axis=0, ignore_index=True) Maria@18: return df_results Maria@18: Maria@18: Maria@18: def plot_CF(CF, labels=None, figurename=None): Maria@18: labels[labels=='United States of America'] = 'United States Amer.' Maria@18: plt.imshow(CF, cmap="Greys") Maria@18: plt.xticks(range(len(labels)), labels, rotation='vertical', fontsize=4) Maria@18: plt.yticks(range(len(labels)), labels, fontsize=4) Maria@18: if figurename is not None: Maria@18: plt.savefig(figurename, bbox_inches='tight') Maria@18: Maria@18: Maria@18: def confusion_matrix(X_train, Y_train, X_test, Y_test, saveCF=False, plots=False): Maria@18: feat_learner = util_feature_learning.Transformer() Maria@18: accuracy, predictions = util_feature_learning.classification_accuracy(X_train, Y_train, Maria@18: X_test, Y_test, model=util_feature_learning.modelLDA) Maria@18: labels = np.unique(Y_test) # TODO: countries in geographical proximity Maria@18: CF = metrics.confusion_matrix(Y_test, predictions, labels=labels) Maria@18: if saveCF: Maria@18: np.savetxt('data/CFlabels.csv', labels, fmt='%s') Maria@18: np.savetxt('data/CF.csv', CF, fmt='%10.5f') Maria@18: if plots: Maria@18: plot_CF(CF, labels=labels, figurename='data/conf_matrix.pdf') Maria@18: return accuracy, predictions Maria@18: Maria@18: Maria@18: if __name__ == '__main__': Maria@18: df_results = classify_for_filenames(file_list=FILENAMES) Maria@18: max_i = np.argmax(df_results[:, 1]) Maria@18: feat_learning_i = max_i % 4 # 4 classifiers for each feature learning method Maria@18: filename = FILENAMES[feat_learning_i] Maria@18: X, Y, Yaudio = load_data_from_pickle(filename) Maria@18: traininds, testinds = get_train_test_indices() Maria@18: X_train, Y_train, X_test, Y_test = get_train_test_sets(X, Y, traininds, testinds) Maria@18: confusion_matrix(X_train, Y_train, X_test, Y_test, saveCF=True, plots=True) Maria@18: