def supervised_reduction(method=None, dataset=None): np.random.seed(1) sklearn.utils.check_random_state(1) dataset_path = 'data' train_data, train_labels, test_data, test_labels = dataset_loader( dataset_path, dataset, seed=1) scaler = StandardScaler() train_data = scaler.fit_transform(train_data) test_data = scaler.transform(test_data) if dataset == 'yale': regularizer_weight = 0.0001 else: regularizer_weight = 1 n_classes = len(np.unique(train_labels)) if method == 'lda': proj = LinearDiscriminantAnalysis(n_components=n_classes - 1) proj.fit(train_data, train_labels) elif method == 's-lda': proj = LinearSEF(train_data.shape[1], output_dimensionality=(n_classes - 1)) proj.cuda() loss = proj.fit(data=train_data, target_labels=train_labels, epochs=100, target='supervised', batch_size=256, regularizer_weight=regularizer_weight, learning_rate=0.001, verbose=False) elif method == 's-lda-2x': # SEF output dimensions are not limited proj = LinearSEF(train_data.shape[1], output_dimensionality=2 * (n_classes - 1)) proj.cuda() loss = proj.fit(data=train_data, target_labels=train_labels, epochs=100, target='supervised', batch_size=256, regularizer_weight=regularizer_weight, learning_rate=0.001, verbose=False) acc = evaluate_svm(proj.transform(train_data), train_labels, proj.transform(test_data), test_labels) print("Method: ", method, " Test accuracy: ", 100 * acc, " %")