Access variables from parallel job lib

Viewed 19

I have set up a job lib for parallel computing, so far, I have been able to use it in computing several metrics. I intend to compute g_mean, after the roc_auc. However, I am unable to retrieve y_test and svm_probs from the function. It gives an error when I try to retrieve it.

from sklearn.metrics import roc_auc_score, roc_curve
from sklearn.datasets import make_classification
import pandas as pd
from sklearn.model_selection import KFold
import numpy as np
from sklearn.metrics import classification_report, confusion_matrix, f1_score
from sklearn import svm
from sklearn import datasets
from sklearn.model_selection import StratifiedKFold
from sklearn.svm import LinearSVC
from joblib import Parallel, delayed

from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
X = data.data
y = data.target

skf = StratifiedKFold(n_splits=5)
clf = svm.SVC(kernel='rbf', probability=True)

def train(train_index, test_index):
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

    clf.fit(X_train, y_train)    
    r_probs = [0 for _ in range (len(y_test))]
    svm_probs = clf.predict_proba(X_test)
    svm_probs = svm_probs[:,1]
    svm_auc = roc_auc_score(y_test, svm_probs)
    return dict(svm_auc=svm_auc)


out = Parallel(n_jobs=2, verbose=100, pre_dispatch='1.5*n_jobs')(
    delayed(train)(train_index, test_index) for train_index, test_index in skf.split(X, y))

svm_auc = [d['svm_auc'] for d in out]
print(np.mean(svm_auc))

rf_fpr,rf_tpr, _ = roc_curve(y_test,svm_probs)
gmeans_rf = np.sqrt(rf_tpr * (1-rf_fpr))
ix_rf = np.argmax(gmeans_rf)

print("%.3f" % gmeans_rf[ix_rf])
0 Answers
Related