From 1c9cc37d21e433f97cdec0d74b1a955bc8df9978 Mon Sep 17 00:00:00 2001 From: Ari Kahn Date: Tue, 5 May 2020 14:36:58 -0400 Subject: [PATCH 1/2] Unpin scikit-learn and set scale to auto in SVC tests --- setup.py | 2 +- tests/fcma/test_classification.py | 4 ++-- tests/fcma/test_mvpa_voxel_selection.py | 2 +- tests/fcma/test_voxel_selection.py | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/setup.py b/setup.py index e394f6c85..1833945e6 100644 --- a/setup.py +++ b/setup.py @@ -128,7 +128,7 @@ def finalize_options(self): 'nitime', # https://github.com/numpy/numpy/issues/14189 'numpy!=1.17.*', - 'scikit-learn[alldeps]>=0.18,<0.22', + 'scikit-learn[alldeps]>=0.18', # See https://github.com/scipy/scipy/pull/8082 'scipy!=1.0.0', 'statsmodels', diff --git a/tests/fcma/test_classification.py b/tests/fcma/test_classification.py index 3225fa80d..967ad55bc 100644 --- a/tests/fcma/test_classification.py +++ b/tests/fcma/test_classification.py @@ -46,7 +46,7 @@ def test_classification(): # 5 subjects, 4 epochs per subject epochs_per_subj = 4 # svm - svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1) + svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1, gamma='auto') training_data = fake_raw_data[0:12] clf = Classifier(svm_clf, epochs_per_subj=epochs_per_subj) clf.fit(list(zip(training_data, training_data)), labels[0:12]) @@ -134,7 +134,7 @@ def test_classification_with_two_components(): # 5 subjects, 4 epochs per subject epochs_per_subj = 4 # svm - svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1) + svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1, gamma='auto') training_data = fake_raw_data[0: 12] training_data2 = fake_raw_data2[0: 12] clf = Classifier(svm_clf, epochs_per_subj=epochs_per_subj) diff --git a/tests/fcma/test_mvpa_voxel_selection.py b/tests/fcma/test_mvpa_voxel_selection.py index d551ff5ee..763f87cc2 100644 --- a/tests/fcma/test_mvpa_voxel_selection.py +++ b/tests/fcma/test_mvpa_voxel_selection.py @@ -34,7 +34,7 @@ def test_mvpa_voxel_selection(): mvs = MVPAVoxelSelector(data, mask, labels, 2, sl) # for cross validation, use SVM with precomputed kernel - clf = svm.SVC(kernel='rbf', C=10) + clf = svm.SVC(kernel='rbf', C=10, gamma='auto') result_volume, results = mvs.run(clf) if MPI.COMM_WORLD.Get_rank() == 0: output = [] diff --git a/tests/fcma/test_voxel_selection.py b/tests/fcma/test_voxel_selection.py index 98fadc4ea..b4c7739db 100644 --- a/tests/fcma/test_voxel_selection.py +++ b/tests/fcma/test_voxel_selection.py @@ -58,7 +58,7 @@ def test_voxel_selection(): 'within-subject normalization does not provide correct results' # for cross validation, use SVM with precomputed kernel # no shrinking, set C=1 - clf = svm.SVC(kernel='precomputed', shrinking=False, C=1) + clf = svm.SVC(kernel='precomputed', shrinking=False, C=1, gamma='auto') results = vs.run(clf) if MPI.COMM_WORLD.Get_rank() == 0: output = [None] * len(results) @@ -89,7 +89,7 @@ def test_voxel_selection_with_two_masks(): raw_data2=fake_raw_data2, voxel_unit=1) # for cross validation, use SVM with precomputed kernel # no shrinking, set C=1 - clf = svm.SVC(kernel='precomputed', shrinking=False, C=1) + clf = svm.SVC(kernel='precomputed', shrinking=False, C=1, gamma='auto') results = vs.run(clf) if MPI.COMM_WORLD.Get_rank() == 0: output = [None] * len(results) From 7aa591a27da5cde12544d7368e9c6cab0fca9a53 Mon Sep 17 00:00:00 2001 From: Ari Kahn Date: Tue, 5 May 2020 17:49:51 -0400 Subject: [PATCH 2/2] Update SVC gamma in examples --- examples/fcma/classification.py | 10 +++++----- examples/fcma/mvpa_classification.py | 2 +- examples/fcma/mvpa_voxel_selection.py | 2 +- examples/fcma/voxel_selection.py | 2 +- examples/funcalign/srm_image_prediction_example.ipynb | 6 +++--- examples/funcalign/srm_image_prediction_example.py | 4 ++-- .../srm_image_prediction_example_distributed.py | 2 +- examples/searchlight/example_searchlight.py | 2 +- examples/utils/fmrisim_multivariate_example.ipynb | 2 +- 9 files changed, 16 insertions(+), 16 deletions(-) diff --git a/examples/fcma/classification.py b/examples/fcma/classification.py index ed12b3e7e..8de4aca1c 100644 --- a/examples/fcma/classification.py +++ b/examples/fcma/classification.py @@ -32,7 +32,7 @@ def example_of_aggregating_sim_matrix(raw_data, labels, num_subjects, num_epochs_per_subj): # aggregate the kernel matrix to save memory - svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1) + svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1, gamma='auto') clf = Classifier(svm_clf, num_processed_voxels=1000, epochs_per_subj=num_epochs_per_subj) rearranged_data = raw_data[num_epochs_per_subj:] + raw_data[0:num_epochs_per_subj] rearranged_labels = labels[num_epochs_per_subj:] + labels[0:num_epochs_per_subj] @@ -54,7 +54,7 @@ def example_of_aggregating_sim_matrix(raw_data, labels, num_subjects, num_epochs def example_of_cross_validation_with_detailed_info(raw_data, labels, num_subjects, num_epochs_per_subj): # no shrinking, set C=1 - svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1) + svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1, gamma='auto') #logit_clf = LogisticRegression() clf = Classifier(svm_clf, epochs_per_subj=num_epochs_per_subj) # doing leave-one-subject-out cross validation @@ -86,7 +86,7 @@ def example_of_cross_validation_using_model_selection(raw_data, labels, num_subj # for self-correlation, i.e. correlation between the same data matrix. # no shrinking, set C=1 - svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1) + svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1, gamma='auto') #logit_clf = LogisticRegression() clf = Classifier(svm_clf, epochs_per_subj=num_epochs_per_subj) # doing leave-one-subject-out cross validation @@ -104,7 +104,7 @@ def example_of_cross_validation_using_model_selection(raw_data, labels, num_subj def example_of_correlating_two_components(raw_data, raw_data2, labels, num_subjects, num_epochs_per_subj): # aggregate the kernel matrix to save memory - svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1) + svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1, gamma='auto') clf = Classifier(svm_clf, epochs_per_subj=num_epochs_per_subj) num_training_samples=num_epochs_per_subj*(num_subjects-1) clf.fit(list(zip(raw_data[0:num_training_samples], raw_data2[0:num_training_samples])), @@ -127,7 +127,7 @@ def example_of_correlating_two_components(raw_data, raw_data2, labels, num_subje def example_of_correlating_two_components_aggregating_sim_matrix(raw_data, raw_data2, labels, num_subjects, num_epochs_per_subj): # aggregate the kernel matrix to save memory - svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1) + svm_clf = svm.SVC(kernel='precomputed', shrinking=False, C=1, gamma='auto') clf = Classifier(svm_clf, num_processed_voxels=1000, epochs_per_subj=num_epochs_per_subj) num_training_samples=num_epochs_per_subj*(num_subjects-1) clf.fit(list(zip(raw_data, raw_data2)), labels, diff --git a/examples/fcma/mvpa_classification.py b/examples/fcma/mvpa_classification.py index a3782db5a..d3d3e9e12 100644 --- a/examples/fcma/mvpa_classification.py +++ b/examples/fcma/mvpa_classification.py @@ -57,7 +57,7 @@ # transpose data to facilitate training and prediction processed_data = processed_data.T - clf = svm.SVC(kernel='linear', shrinking=False, C=1) + clf = svm.SVC(kernel='linear', shrinking=False, C=1, gamma='auto') # doing leave-one-subject-out cross validation for i in range(num_subjects): leave_start = i * num_epochs_per_subj diff --git a/examples/fcma/mvpa_voxel_selection.py b/examples/fcma/mvpa_voxel_selection.py index 658412d60..b3b3ec0dc 100644 --- a/examples/fcma/mvpa_voxel_selection.py +++ b/examples/fcma/mvpa_voxel_selection.py @@ -79,7 +79,7 @@ # create a Searchlight object sl = Searchlight(sl_rad=1) mvs = MVPAVoxelSelector(data, mask, labels, num_subjs, sl) - clf = svm.SVC(kernel='linear', shrinking=False, C=1) + clf = svm.SVC(kernel='linear', shrinking=False, C=1, gamma='auto') # only rank 0 has meaningful return values score_volume, results = mvs.run(clf) # this output is just for result checking diff --git a/examples/fcma/voxel_selection.py b/examples/fcma/voxel_selection.py index a01c3ef10..f4bd70aef 100644 --- a/examples/fcma/voxel_selection.py +++ b/examples/fcma/voxel_selection.py @@ -77,7 +77,7 @@ # if providing two masks, just append raw_data2 as the last input argument #vs = VoxelSelector(labels, epochs_per_subj, num_subjs, raw_data, raw_data2=raw_data2) # for cross validation, use SVM with precomputed kernel - clf = svm.SVC(kernel='precomputed', shrinking=False, C=10) + clf = svm.SVC(kernel='precomputed', shrinking=False, C=10, gamma='auto') results = vs.run(clf) # this output is just for result checking if MPI.COMM_WORLD.Get_rank()==0: diff --git a/examples/funcalign/srm_image_prediction_example.ipynb b/examples/funcalign/srm_image_prediction_example.ipynb index 378a50173..aabe125a6 100644 --- a/examples/funcalign/srm_image_prediction_example.ipynb +++ b/examples/funcalign/srm_image_prediction_example.ipynb @@ -252,7 +252,7 @@ " train_data[:, start_index:end_index] = image_data_shared[train_subjects[train_subject]]\n", "\n", " # Train a Nu-SVM classifier using scikit learn\n", - " classifier = NuSVC(nu=0.5, kernel='linear')\n", + " classifier = NuSVC(nu=0.5, kernel='linear', gamma='auto')\n", " classifier = classifier.fit(train_data.T, train_labels)\n", "\n", " # Predict on the test data\n", @@ -393,7 +393,7 @@ " train_data[:, start_index:end_index] = image_data_shared[train_subjects[train_subject]]\n", "\n", " # Train a Nu-SVM classifier using scikit learn\n", - " classifier = NuSVC(nu=0.5, kernel='linear')\n", + " classifier = NuSVC(nu=0.5, kernel='linear', gamma='auto')\n", " classifier = classifier.fit(train_data.T, train_labels)\n", "\n", " # Predict on the test data\n", @@ -448,4 +448,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} \ No newline at end of file +} diff --git a/examples/funcalign/srm_image_prediction_example.py b/examples/funcalign/srm_image_prediction_example.py index 10f2948cb..b5d1eb2f3 100644 --- a/examples/funcalign/srm_image_prediction_example.py +++ b/examples/funcalign/srm_image_prediction_example.py @@ -110,7 +110,7 @@ def plot_confusion_matrix(cm, title="Confusion Matrix"): train_data[:, start_index:end_index] = image_data_shared[train_subjects[train_subject]] # Train a Nu-SVM classifier using scikit learn - classifier = NuSVC(nu=0.5, kernel='linear') + classifier = NuSVC(nu=0.5, kernel='linear', gamma='auto') classifier = classifier.fit(train_data.T, train_labels) # Predict on the test data @@ -153,7 +153,7 @@ def plot_confusion_matrix(cm, title="Confusion Matrix"): train_data[:, start_index:end_index] = image_data_shared[train_subjects[train_subject]] # Train a Nu-SVM classifier using scikit learn - classifier = NuSVC(nu=0.5, kernel='linear') + classifier = NuSVC(nu=0.5, kernel='linear', gamma='auto') classifier = classifier.fit(train_data.T, train_labels) # Predict on the test data diff --git a/examples/funcalign/srm_image_prediction_example_distributed.py b/examples/funcalign/srm_image_prediction_example_distributed.py index 2c164ba4f..0823971e7 100644 --- a/examples/funcalign/srm_image_prediction_example_distributed.py +++ b/examples/funcalign/srm_image_prediction_example_distributed.py @@ -128,7 +128,7 @@ def plot_confusion_matrix(cm, title="Confusion Matrix"): train_data[:, start_index:end_index] = image_data_shared[train_subjects[train_subject]] # Train a Nu-SVM classifier using scikit learn - classifier = NuSVC(nu=0.5, kernel='linear') + classifier = NuSVC(nu=0.5, kernel='linear', gamma='auto') classifier = classifier.fit(train_data.T, train_labels) # Predict on the test data diff --git a/examples/searchlight/example_searchlight.py b/examples/searchlight/example_searchlight.py index fc808006a..c10e8ac4f 100644 --- a/examples/searchlight/example_searchlight.py +++ b/examples/searchlight/example_searchlight.py @@ -78,7 +78,7 @@ def sfn(l, msk, myrad, bcast_var): import sklearn.svm import sklearn.model_selection - classifier = sklearn.svm.SVC() + classifier = sklearn.svm.SVC(gamma='auto') data = l[0][msk,:].T return np.mean(sklearn.model_selection.cross_val_score(classifier, data, bcast_var,n_jobs=1)) diff --git a/examples/utils/fmrisim_multivariate_example.ipynb b/examples/utils/fmrisim_multivariate_example.ipynb index 176ad9923..c1a6a9090 100644 --- a/examples/utils/fmrisim_multivariate_example.ipynb +++ b/examples/utils/fmrisim_multivariate_example.ipynb @@ -9040,7 +9040,7 @@ "X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(\n", " input_mat, input_labels, test_size=0.2, random_state=0)\n", "\n", - "clf = sklearn.svm.SVC(kernel='linear', C=1).fit(X_train, y_train)\n", + "clf = sklearn.svm.SVC(kernel='linear', C=1, gamma='auto').fit(X_train, y_train)\n", "\n", "score = clf.score(X_test, y_test)\n", "print('Classification accuracy between condition A and B: %0.3f' % score)"