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