def test_select_percentile_regression(): """ Test whether the relative univariate feature selection gets the correct items in a simple regression problem with the percentile heuristic """ X, y = make_regression(n_samples=200, n_features=20, n_informative=5, shuffle=False, random_state=0) univariate_filter = SelectPercentile(f_regression, percentile=25) X_r = univariate_filter.fit(X, y).transform(X) assert_best_scores_kept(univariate_filter) X_r2 = GenericUnivariateSelect( f_regression, mode='percentile', param=25).fit(X, y).transform(X) assert_array_equal(X_r, X_r2) support = univariate_filter.get_support() gtruth = np.zeros(20) gtruth[:5] = 1 assert_array_equal(support, gtruth) X_2 = X.copy() X_2[:, np.logical_not(support)] = 0 assert_array_equal(X_2, univariate_filter.inverse_transform(X_r)) # Check inverse_transform respects dtype assert_array_equal(X_2.astype(bool), univariate_filter.inverse_transform(X_r.astype(bool)))
def test_select_percentile_regression(): # Test whether the relative univariate feature selection # gets the correct items in a simple regression problem # with the percentile heuristic X, y = make_regression(n_samples=200, n_features=20, n_informative=5, shuffle=False, random_state=0) univariate_filter = SelectPercentile(f_regression, percentile=25) X_r = univariate_filter.fit(X, y).transform(X) assert_best_scores_kept(univariate_filter) X_r2 = GenericUnivariateSelect(f_regression, mode='percentile', param=25).fit(X, y).transform(X) assert_array_equal(X_r, X_r2) support = univariate_filter.get_support() gtruth = np.zeros(20) gtruth[:5] = 1 assert_array_equal(support, gtruth) X_2 = X.copy() X_2[:, np.logical_not(support)] = 0 assert_array_equal(X_2, univariate_filter.inverse_transform(X_r)) # Check inverse_transform respects dtype assert_array_equal(X_2.astype(bool), univariate_filter.inverse_transform(X_r.astype(bool)))
def test_select_percentile_classif_sparse(): # Test whether the relative univariate feature selection # gets the correct items in a simple classification problem # with the percentile heuristic X, y = make_classification(n_samples=200, n_features=20, n_informative=3, n_redundant=2, n_repeated=0, n_classes=8, n_clusters_per_class=1, flip_y=0.0, class_sep=10, shuffle=False, random_state=0) X = sparse.csr_matrix(X) univariate_filter = SelectPercentile(f_classif, percentile=25) X_r = univariate_filter.fit(X, y).transform(X) X_r2 = GenericUnivariateSelect(f_classif, mode='percentile', param=25).fit(X, y).transform(X) assert_array_equal(X_r.toarray(), X_r2.toarray()) support = univariate_filter.get_support() gtruth = np.zeros(20) gtruth[:5] = 1 assert_array_equal(support, gtruth) X_r2inv = univariate_filter.inverse_transform(X_r2) assert_true(sparse.issparse(X_r2inv)) support_mask = safe_mask(X_r2inv, support) assert_equal(X_r2inv.shape, X.shape) assert_array_equal(X_r2inv[:, support_mask].toarray(), X_r.toarray()) # Check other columns are empty assert_equal(X_r2inv.getnnz(), X_r.getnnz())
def test_select_percentile_classif_sparse(): # Test whether the relative univariate feature selection # gets the correct items in a simple classification problem # with the percentile heuristic X, y = make_classification( n_samples=200, n_features=20, n_informative=3, n_redundant=2, n_repeated=0, n_classes=8, n_clusters_per_class=1, flip_y=0.0, class_sep=10, shuffle=False, random_state=0, ) X = sparse.csr_matrix(X) univariate_filter = SelectPercentile(f_classif, percentile=25) X_r = univariate_filter.fit(X, y).transform(X) X_r2 = GenericUnivariateSelect(f_classif, mode="percentile", param=25).fit(X, y).transform(X) assert_array_equal(X_r.toarray(), X_r2.toarray()) support = univariate_filter.get_support() gtruth = np.zeros(20) gtruth[:5] = 1 assert_array_equal(support, gtruth) X_r2inv = univariate_filter.inverse_transform(X_r2) assert_true(sparse.issparse(X_r2inv)) support_mask = safe_mask(X_r2inv, support) assert_equal(X_r2inv.shape, X.shape) assert_array_equal(X_r2inv[:, support_mask].toarray(), X_r.toarray()) # Check other columns are empty assert_equal(X_r2inv.getnnz(), X_r.getnnz())
def SVM(self, X, y): # (-10.0, -26.0, 28.0) COORDINATES WERE FOUND print("Resampling..") X_resampled = self.nilearn_resample(X) mean_img = nilearn.image.mean_img(X_resampled) masker = NiftiMasker(smoothing_fwhm=1, standardize=True, memory="nilearn_cache", memory_level=1) X = masker.fit_transform(X_resampled) # Model print("Training...") feature_selection = SelectPercentile(f_classif, percentile=0.5) svc = SVC(kernel='linear') anova_svc = Pipeline([('anova', feature_selection), ('svc', svc)]) anova_svc.fit(X, y) y_pred = anova_svc.predict(X) # Compute the prediction accuracy for the different folds (i.e. session) if self.task == "classification": scoring = "accuracy" else: scoring = "neg_mean_absolute_error" # For cross validation # cv_scores = cross_val_score(anova_svc, X, y, cv = 3, scoring=scoring) # print(cv_scores) # Return the corresponding mean prediction accuracy # score = cv_scores.mean() # print("Score at task: ", score) from sklearn.metrics import mean_squared_error if self.task == "classification": output, stats = self.binary_classification(y, y_pred) print(stats) else: stats = mean_squared_error(y, y_pred) print(stats) coef = svc.coef_ # was svc print("COEF\n", coef) # reverse feature selection coef = feature_selection.inverse_transform(coef) print("COEF_INVERSE\n", coef) # reverse masking weight_img = masker.inverse_transform(coef) # Use the mean image as a background to avoid relying on anatomical data # Create the figure plot_stat_map(weight_img, mean_img, title='SVM weights', cut_coords=()) #-50,-33, 7 show() return stats
# Return the corresponding mean prediction accuracy classification_accuracy = cv_scores.mean() # Print the results print("Classification accuracy: %.4f / Chance level: %f" % (classification_accuracy, 1. / len(conditions_f_h.unique()))) # Visualizing the results: # In[26]: # Look at the SVC’s discriminating weights coef = svc.coef_ # reverse feature selection coef = feature_selection.inverse_transform(coef) # reverse masking weight_img = masker.inverse_transform(coef) # Use the mean image as a background to avoid relying on anatomical data mean_img = image.mean_img(func_file) # Create the figure plot_stat_map(weight_img, mean_img, title='SVM weights') # Save the results as a Nifti file #weight_img.to_file('haxby_face_vs_house.nii') # ## ROI-based decoding analysis # In this section, I am looking at decoding accuracy for different objects in three different masks: the full ventral stream (mask_vt), the house selective areas (mask_house), and the face-selective areas (mask_face), that have been defined via a standard General Linear Model (GLM) based analysis.
# Return the corresponding mean prediction accuracy classification_accuracy = cv_scores.mean() # Print the results print("Classification accuracy: %.4f / Chance level: %f" % (classification_accuracy, 1. / len(conditions.unique()))) # Classification accuracy: 0.70370 / Chance level: 0.5000 ############################################################################# # Visualize the results # ---------------------- # Look at the SVC's discriminating weights coef = svc.coef_ # reverse feature selection coef = feature_selection.inverse_transform(coef) # reverse masking weight_img = masker.inverse_transform(coef) # Use the mean image as a background to avoid relying on anatomical data from nilearn import image mean_img = image.mean_img(func_filename) # Create the figure from nilearn.plotting import plot_stat_map, show plot_stat_map(weight_img, mean_img, title='SVM weights') # Saving the results as a Nifti file may also be important weight_img.to_filename('haxby_face_vs_house.nii')