def trainModel(self, x_data, penalty=1, kernel=Kernels.defaultKernel(),
                   eta=1, report=False):

        y = x_data[:, 0]

        # add a column of ones for the intercept
        X = np.hstack((np.ones((len(x_data), 1)), x_data[:, 1:]))

        weights = self._trainSVM(X, y, penalty, eta, report, kernel)
        return self.packModel(weights, penalty, kernel)
    def trainModel(self, x_data, kernel=Kernels.defaultKernel(), report=False):

        # +1 for intercept
        self.weights = [0] * (x_data.shape[1] + 1)
        y = x_data[:, 0]

        # add a column of ones for the intercept
        X = np.hstack((np.ones((len(x_data), 1)), x_data[:, 1:]))

        mistakes = self._trainSVM(x_data[:, 1:], y, report, kernel)
        # Returns length 785
        print mistakes
        return mistakes