diff options
-rwxr-xr-x | train.py | 29 |
1 files changed, 21 insertions, 8 deletions
@@ -59,23 +59,28 @@ def test_split(n_faces, raw_faces, split, seed): def draw_conf_mat(args, target_test, target_pred): cm = confusion_matrix(target_test, target_pred) - print(cm) + acc_sc = accuracy_score(target_test, target_pred) + print('Accuracy: ', acc_sc) if (args.conf_mat): plt.matshow(cm, cmap='Blues') plt.colorbar() plt.ylabel('Actual') plt.xlabel('Predicted') plt.show() - return accuracy_score(target_test, target_pred) + return acc_sc def test_model(M, faces_train, faces_test, target_train, target_test, args): raw_faces_train = faces_train + raw_faces_test = faces_test explained_variances = () if args.pca or args.pca_r: # faces_pca containcts the principial components or the M most variant eigenvectors average_face = np.mean(faces_train, axis=0) + #PLOTTING MEAN FACE + #plt.imshow(average_face.reshape([46,56]).T, cmap = 'gist_gray') + plt.show() deviations_tr = np.std(faces_train, axis=0) deviations_tst = np.std(faces_train, axis=0) faces_train = normalise_faces(average_face, faces_train) @@ -89,6 +94,10 @@ def test_model(M, faces_train, faces_test, target_train, target_test, args): print('Standard PCA') e_vals, e_vecs = LA.eigh(np.cov(faces_train.T)) # e_vecs = normalise_faces(np.mean(e_vecs,axis=0), e_vecs) + #PLOTTING NON-ZERO EVALS + #if args.pca: + # plt.semilogy(range(2576), np.absolute(416*np.flip(e_vals))) + # plt.show() e_vals = np.flip(e_vals)[:M] e_vecs = np.fliplr(e_vecs).T[:M] @@ -200,17 +209,21 @@ def main(): raw_faces = genfromtxt(args.data, delimiter=',') targets = np.repeat(np.arange(n_faces),n_cases) - faces_train, faces_test, target_train, target_test = test_split(n_faces, raw_faces, args.split, args.seed) - - + if args.reigen: - for M in range(args.eigen, args,reigen): + accuracy = np.zeros(args.reigen - args.eigen) + for M in range(args.eigen, args.reigen): start = timer() - accuracy[M] = test_model(M, faces_train, faces_test, target_train, target_test, args) + accuracy[M - args.eigen] = test_model(M, faces_train, faces_test, target_train, target_test, args) end = timer() print("Run with", M, "eigenvalues completed in ", end-start, "seconds") - + #plot + plt.plot(range(args.eigen, args.reigen), 100*accuracy) + plt.xlabel('Number of Eigenvectors used (M)') + plt.ylabel('Recognition Accuracy (%)') + plt.grid(True) + plt.show() else: M = args.eigen start = timer() |