def METHOD_NAME(self, X, y, iterations=500, disp=-1):
    """Fit the model using the training data.
    Arguments:
        X (ndarray, shape = (n_samples, n_features)):
            Training input matrix where each row is a feature vector.
            The data in X are passed in without a bias column!
        y (ndarray, shape = (n_samples,)):
            Training target. Each entry is either -1 or 1.
    Notes: This function must set member variables such that a subsequent call
    to get_params or predict uses the learned parameters, overwriting 
    any parameter values previously set by calling set_params.
    """
    n_features = X.shape[1]
    x = np.random.rand(n_features + 1)
    minimizer = x
    fmin = self.objective(x, X, y)
    for t in range(iterations):
        if disp != -1 and t % disp == 0:
            print("At iteration", t, "f(minimizer) =", fmin)
        alpha = 0.002 / math.sqrt(t + 1)
        subgrad = self.subgradient(x, X, y)
        x -= alpha * subgrad
        objective = self.objective(x, X, y)
        if (objective < fmin):
            fmin = objective
            minimizer = x
    self.w = minimizer[:-1]
    self.b = minimizer[-1]