def __init__(self, name, host='127.0.0.1', port=27017):
        self.name = name
        self.host = host
        self.port = port
def apply_svm(K, y, n_folds=5, iterations=10000, subjects=False, verbose=True,
              random_state=None):
    """
    Compute the balanced accuracy, its null distribution and the p-value.

    Parameters:
    ----------
    K: array-like
        Kernel matrix
    y: array_like
        class labels
    cv: Number of folds in the stratified cross-validation
    verbose: bool
        Verbosity

    Returns:
    -------
    acc: float
        Average balanced accuracy.
    acc_null: array
        Null distribution of the balanced accuracy.
    p_value: float
         p-value
    """
    # Computing the accuracy
    param_grid = [{'C': np.logspace(-5, 5, 20)}]
    if subjects:
        acc = compute_svm_subjects(K, y, n_folds)
    else:
        acc = compute_svm_score_nestedCV(K, y, n_folds, param_grid=param_grid,
                                         random_state=random_state)
    if verbose:
        print("Mean balanced accuracy = %s" % (acc))
        print("Computing the null-distribution.")

    # Computing the null-distribution

    # acc_null = np.zeros(iterations)
    # for i in range(iterations):
    #     if verbose and (i % 1000) == 0:
    #         print(i),
    #         stdout.flush()

    #     y_perm = np.random.permutation(y)
    #     acc_null[i] = compute_svm_score_nestedCV(K, y_perm, n_folds,
    #                                              param_grid=param_grid)

    # if verbose:
    #     print ''

    # Computing the null-distribution
    if subjects:
        yis = [permutation_subjects(y) for i in range(iterations)]
        acc_null = Parallel(n_jobs=-1)(delayed(compute_svm_subjects)(K, yis[i], n_folds) for i in range(iterations))
    else:
        yis = [np.random.permutation(y) for i in range(iterations)]
        acc_null = Parallel(n_jobs=-1)(delayed(compute_svm_score_nestedCV)(K, yis[i], n_folds, scoring=balanced_accuracy_scoring, param_grid=param_grid) for i in range(iterations))
    # acc_null = Parallel(n_jobs=-1)(delayed(compute_svm_cv)(K, yis[i], C=100., n_folds=n_folds) for i in range(iterations))

    p_value = max(1.0 / iterations, (acc_null > acc).sum()
                  / float(iterations))
    if verbose:
        print("p-value ~= %s \t (resolution : %s)" % (p_value, 1.0/iterations))

    return acc, acc_null, p_value