def __init__(self,
                 loss_function,
                 step_alpha=1,
                 step_beta=1,
                 tolerance=1e-5,
                 max_iter=1000,
                 **kwargs):
        """
        loss_function - строка, отвечающая за функцию потерь классификатора. 
        Может принимать значения:
        - 'binary_logistic' - бинарная логистическая регрессия
        - 'multinomial_logistic' - многоклассовая логистическая регрессия

        step_alpha - float, параметр выбора шага из текста задания

        step_beta- float, параметр выбора шага из текста задания

        tolerance - точность, по достижении которой, необходимо прекратить оптимизацию.
        Необходимо использовать критерий выхода по модулю разности соседних значений функции:
        если (f(x_{k+1}) - f(x_{k})) < tolerance: то выход 

        max_iter - максимальное число итераций     

        **kwargs - аргументы, необходимые для инициализации   
        """
        self.loss_function = loss_function
        if loss_function == 'multinomial_logistic':
            self.loss = oracles.MulticlassLogistic(**kwargs)
        else:
            self.loss = oracles.BinaryLogistic(**kwargs)
        self.alpha = step_alpha
        self.beta = step_beta
        self.tolerance = tolerance
        self.max_iter = max_iter
        self.kwargs = kwargs
    def __init__(self,
                 loss_function,
                 batch_size,
                 step_alpha=1,
                 step_beta=0,
                 tolerance=1e-5,
                 max_iter=1000,
                 random_seed=None,
                 **kwargs):
        """
        loss_function - строка, отвечающая за функцию потерь классификатора.
        Может принимать значения:
        - 'binary_logistic' - бинарная логистическая регрессия
        - 'multinomial_logistic' - многоклассовая логистическая регрессия

        batch_size - размер подвыборки, по которой считается градиент

        step_alpha - float, параметр выбора шага из текста задания

        step_beta- float, параметр выбора шага из текста задания

        tolerance - точность, по достижении которой, необходимо прекратить оптимизацию
        Необходимо использовать критерий выхода по модулю разности соседних значений функции:
        если (f(x_{k+1}) - f(x_{k})) < tolerance: то выход


        max_iter - максимальное число итераций

        random_seed - в начале метода fit необходимо вызвать np.random.seed(random_seed).
        Этот параметр нужен для воспроизводимости результатов на разных машинах.

        **kwargs - аргументы, необходимые для инициализации
        """
        self.loss_function = loss_function
        if self.loss_function == "binary_logistic":
            self.l2_coef = kwargs.get('l2_coef', 0)
            self.oracle = oracles.BinaryLogistic(l2_coef=self.l2_coef)
        elif self.loss_function == "multinomial_logistic":
            self.class_number = kwargs.get('class_number', None)
            if self.class_number is None:
                raise Exception("class_number is not implemented")
            self.oracle = oracles.MulticlassLogistic(**kwargs)

        self.random_seed = kwargs.get('random_seed', None)
        self.batch_size = batch_size
        self.step_alpha = step_alpha
        self.step_beta = step_beta
        self.tolerance = tolerance
        self.max_iter = max_iter
        self.random_seed = random_seed

        self.w_0 = None
        self.w = None