Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать класс на языке Python, который соответствует следующему интерфейсу.
class GradientOptimizer:
def __init__(self, oracle, x0):
self.oracle = oracle
self.x0 = x0
def optimize(self, iterations, eps, alpha):
pass
В конструктор принимаются два аргумента — оракул, с помощью которого можно получить градиент оптимизируемой функции, а также точку, с которой необходимо начать градиентный спуск.
Метод optimize
принимает максимальное число итераций для критерия остановки,
L2-норму градиента, которую можно считать оптимальной,
а также learning rate. Метод возвращает оптимальную точку.
Оракул имеет следующий интерфейс:
class Oracle:
def get_func(self, x)
def get_grad(self, x)
x
имеет тип np.array
вещественных чисел.
Код должен содержать только класс и его реализацию. Он не должен ничего выводить на экран.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс
Параметрами алгоритма являются:
max_iter количества итераций или при достижении точки, в которой L2 норма градиента меньше eps .
Класс
|
Код решения должен содержать только определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс
Параметрами алгоритма являются:
max_iter количества итераций или при достижении точки, в которой L2 норма градиента меньше eps .
Класс
|
Код решения должен содержать только определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс
Параметрами алгоритма являются:
max_iter количества итераций или при достижении точки, в которой L2 норма градиента меньше eps .
Класс
|
Код решения должен содержать только определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс
Параметрами алгоритма являются:
max_iter количества итераций или при достижении точки, в которой L2 норма градиента меньше eps .
Класс
|
Код решения должен содержать только определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать на языке Python класс
Параметрами алгоритма являются:
max_iter количества итераций или при достижении точки, в которой L2 норма градиента меньше eps .
Класс
|
Код решения должен содержать только определение и реализацию класса.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать следующие функции на языке Python.
def linear_func(theta, x) # function value
def linear_func_all(theta, X) # 1-d np.array of function values of all rows of the matrix X
def mean_squared_error(theta, X, y) # MSE value of current regression
def grad_mean_squared_error(theta, X, y) # 1-d array of gradient by theta
theta
— одномерный np.array
x
— одномерный np.array
X
— двумерный np.array
. Каждая строка соответствует по размерности вектору theta
y
— реальные значения предсказываемой величины
Матрица X имеет размер M × N. M строк и N столбцов.
Используется линейная функция вида: hθ(x) = θ1 x1 + θ2 x2 + ... + θn xN
Mean squared error (MSE) как функция от θ: J(θ) = 1MM∑i = 1(yi − hθ(x(i)))2. Где x(i) — i-я строка матрицы X
Градиент функции MSE: ∇ J(θ) = { ∂ J∂ θ1, ∂ J∂ θ2, ..., ∂ J∂ θN}
X = np.array([[1,2],[3,4],[4,5]])
theta = np.array([5, 6])
y = np.array([1, 2, 1])
linear_func_all(theta, X) # --> array([17, 39, 50])
mean_squared_error(theta, X, y) # --> 1342.0
grad_mean_squared_error(theta, X, y) # --> array([215.33333333, 283.33333333])
Код должен содержать только реализацию функций.
Входной файл: | Стандартный вход | Ограничение времени: | 10 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать функцию на языке Python, которая находит линейную регрессию заданных векторов, используя метрику MSE.
def fit_linear_regression(X, y) # np.array of linear regression coefs
X
— двумерный np.array
. Каждая строка соответствует отдельному примеру.
y
— реальные значения предсказываемой величины
Код должен содержать только реализацию функций.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать следующие функцию на языке Python.
def entropy(y) # entropy value for labels -- y
y
— одномерный np.array
— значения классов в обучающей выборке.
При решении задачи следует использовать натуральный логарифм.
Код должен содержать только реализацию функции. Запрещено пользоваться любыми готовыми реализациями вычисления функции entropy
.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать следующие функцию на языке Python.
def gini(y) # gini impurity value for labels -- y
y
— одномерный np.array
— значения классов в выборке
Код должен содержать только реализацию функции. Запрещено пользоваться любыми готовыми реализациями вычисления функции gini
.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 10 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать следующие функцию на языке Python.
def tree_split(X, y, criterion) # col, row of best split
X
— двумерный np.array
— обучающая выборка
y
— одномерный np.array
— значения классов в обучающей выборке
criterion
— строковое значение — вид критерия 'var'
, 'gini'
или 'entropy'
tree_split
должен возвращать номер признака и номер значения из обучающей выборки, которое будет использоваться в качестве порогового
Таким образом, tree_split
возвращает наилучшее бинарное разделение по правилу вида xcol ≤ X[row, col]
Код должен содержать только реализацию функции.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Пусть имеется задача регрессии f(x) = a ⋅ x + b ≈ y. Требуется найти коэффициенты регрессии a, такие, что |{ai | ai ∈ a, ai = 0}| = k, 0 < k ⩽ |a| = m. При этом должно выполняться условие R2 = 1 − n∑i = 1(yi − f(Xi))2n∑i = 1(yi − y)2 ⩾ s. При решении задачи предполагается использование алгоритма Lasso.
Данные для обучения содержатся в файле. Качество модели будет рассчитано на скрытом наборе данных
Первая строка входных данных содержит натуральное число N — количество тестов. В следующих N блоках содержится описание тестов. Первая строка блока содержит целые числа n — количество примеров обучающей выборки, m — размерность пространства, k — необходимое количество нулевых коэффициентов, и вещественное число s — минимальное значение метрики R2. Следующие n строк содержат по m + 1 вещественному числу — координаты точки пространства и значение целевой переменной y.
Решение должно представлять собой текстовый файл содержащий N строк — коэффициенты a и b линейной регрессии разделённые символом пробел.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется на языке Python реализовать методы точечного кроссовера.
Функция single_point_crossover(a, b, point)
выполняет одноточечный кроссовер, значения справа от точки кроссовера меняются местами.
Функция two_point_crossover(a, b, first, second)
выполняет двухточечный кроссовер, значения между точек кроссовера меняются местами.
Функция k_point_crossover(a, b, points)
выполняет k-точечный кроссовер, значения между каждой чётной парой точек меняются местами.
Функции должны иметь следующий интерфейс
import numpy as np
from typing import Tuple
def single_point_crossover(a: np.ndarray, b: np.ndarray, point: int) -> Tuple[np.ndarray, np.ndarray]:
"""Performs single point crossover of `a` and `b` using `point` as crossover point.
Chromosomes to the right of the `point` are swapped
Args:
a: one-dimensional array, first parent
b: one-dimensional array, second parent
point: crossover point
Return:
Two np.ndarray objects -- the offspring"""
raise NotImplemetnedError()
def two_point_crossover(a: np.ndarray, b: np.ndarray, first: int, second: int) -> Tuple[np.ndarray, np.ndarray]:
"""Performs two point crossover of `a` and `b` using `first` and `second` as crossover points.
Chromosomes between `first` and `second` are swapped
Args:
a: one-dimensional array, first parent
b: one-dimensional array, second parent
first: first crossover point
second: second crossover point
Return:
Two np.ndarray objects -- the offspring"""
raise NotImplemetnedError()
def k_point_crossover(a: np.ndarray, b: np.ndarray, points: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:
"""Performs k point crossover of `a` and `b` using `points` as crossover points.
Chromosomes between each even pair of points are swapped
Args:
a: one-dimensional array, first parent
b: one-dimensional array, second parent
points: one-dimensional array, crossover points
Return:
Two np.ndarray objects -- the offspring"""
raise NotImplemetnedError()
Код решения должен содержать импортируемые модули, определение и реализацию функций.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется на языке Python реализовать алгоритм Stochastic universal sampling.
Функция должна иметь следующий интерфейс
import numpy as np
def sus(fitness: np.ndarray, n: int, start: float) -> list:
"""Selects exactly `n` indices of `fitness` using Stochastic universal sampling alpgorithm.
Args:
fitness: one-dimensional array, fitness values of the population, sorted in descending order
n: number of individuals to keep
start: minimal cumulative fitness value
Return:
Indices of the new population"""
raise NotImplementedError()
Параметрами функции являются:
fitness
— одномерный массив значений функции приспособленности, отсортированный по убыванию,n
— количество особей, которых нужно оставить,start
— минимальное кумулятивное значение функции приспособленности.Функция возвращает список индексов выбранных особей
Код решения должен содержать импортируемые модули, определение и реализацию функции.
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать следующие функцию на языке Python.
def knn_predict_simple(X, y, x, k) # array of pairs -- class and number of votes of neighbors
X
— двумерный np.array
— обучающая выборка
y
— реальные значения классов в обучающей выборке
x
— одномерный np.array
-- тестовый пример
k
— количество соседей, которые нужно рассматривать
Функция возвращает массив пар (класс, количество голосов) только для классов которые встречаются среди k ближайших соседей!
Для поиска ближайшего примера использовать евклидово расстояние.
Код должен содержать только реализацию функции.
Входной файл: | Стандартный вход | Ограничение времени: | 10 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Требуется реализовать функцию leave-one-out score на языке Python. Результат функции должен быть целочисленным, то есть его НЕ следует нормировать на размер выборки.
def loo_score(predict, X, y, k) # integer loo score for predict function
predict
— функция predict(X, y, x, k)
, обучающая некоторый алгоритм на выборке X, y
с параметром k
и дающая предсказание на примере x
X
— двумерный np.array
— обучающая выборка
y
— реальные значения классов в обучающей выборке
k
— количество соседей, которые нужно рассматривать
Код должен содержать только реализацию функции.
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Пусть на некотором наборе точек X = {xi}ni = 1, xi ∈ Rm задана функция f: Rm↦N. Требуется написать программу, вычисляющую значение border ratio α(x) = ∥x̂ − y∥2∥ x − y∥2, ∀ x ∈ X, где y = arg miny ∈ X, f(x) ≠ f(y)∥ x − y∥2, x̂ = arg minx̂ ∈ X, f(x) = f(x̂)∥x̂ − y∥2.
Первая строка входного файла содержит натуральные числа n, m — количество точек и размерность пространства соответственно. В следующих n строках содержится m вещественных чисел и одно натуральное число — координаты точки и значение функции в этой точке.
Выходной файл должен содержать n вещественных чисел — значения border ratio каждой точки с точностью не менее трёх знаков после запятой.
6 ⩽ n ⩽ 1500
2 ⩽ m ⩽ 50
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
2 |
|
|
Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб | |
Максимальный балл: | 1 |
Пусть задан некоторый набор точек X = {xi}ni = 1, xi ∈ Rm. Требуется выполнить кластеризацию точек на k кластеров, используя наивный алгоритм KMeans.
Первая строка входных данных содержит натуральные числа n, m, k, t — количество точек, размерность пространства, количество кластеров и максимальное количество итераций соответственно. В каждой из следующих n строк содержится m вещественных чисел и одно натуральное число — координаты точки и начальное значение кластера точки. Значения кластеров нумеруются от 0 до k − 1.
Выходной данные должны содержать n натуральных чисел — номер кластера каждой точки.
6 ⩽ n ⩽ 1000
2 ⩽ m, k ⩽ 10
10 ⩽ t ⩽ 109
№ | Стандартный вход | Стандартный выход |
---|---|---|
1 |
|
|
Входной файл: | input.txt | Ограничение времени: | 1 сек | |
Выходной файл: | output.txt | Ограничение памяти: | 256 Мб | |
Максимальный балл: | 10000 |
Группа разработчиков работает над проектом. Весь проект разбит на задачи, для каждой задачи указывается ее категория сложности (1, 2, 3 или 4), а также оценочное время выполнения задачи в часах. Проект считается выполненным, если выполнены все задачи. Для каждого разработчика и для каждой категории сложности задачи указывается коэффициент, с которым, как ожидается, будет соотноситься реальное время выполнения задачи данным разработчиком к оценочному времени. Считается, что все разработчики начинают работать с проектом в одно и тоже время и выделяют для работы одинаковое время. Необходимо реализовать программу, распределяющую задачи по разработчикам, с целью минимизировать время выполнения проекта (получить готовый проект за минимальный промежуток времени). Поиск решения необходимо реализовать с помощью генетического алгоритма.
В качестве решения принимается текстовый файл, содержащий ответ к задаче
в требуемом формате (при его отправке следует выбрать в тестирующей системе среду разработки "Answer text
").
Решение набирает количество баллов, вычисляемое по следующей формуле: Score = 106Tmax. Tmax — наибольшее среди всех разработчиков время, затраченное на выполнение выданных соответствующему разработчику задач.
Первая строка входного файла содержит целое число N количество задач.
Вторая строка — N целых чисел от 1 до 4 категорий сложности задач.
Третья строка — N вещественных положительных чисел оценочного времени для задач.
Четвертая строка – целое число M, количество разработчиков .
Следующие M строк содержат по 4 вещественных положительных числа — коэффициенты каждого разработчика.
Первая и единственная строка выходного файла содержит N целых чисел wi — номер разработчика, назначенного на i - ю задачу.
№ | Входной файл (input.txt ) |
Выходной файл (output.txt ) |
---|---|---|
1 |
|
|
Максимальный балл: | 10 |
Устный экзамен.
* Основные термины и задачи машинного обучения.
* Признаки, их виды и свойства.
* Функция потерь. Оптимизация.
* Ошибки первого и второго рода. Метрики качества: accuracy, precision, recall, F1-score.
* Случайный поиск. Перебор по сетке.
* Проблемы работы с данными высокой размерности.
* Производная, частные производные, градиент. Методы оценки градиента.
* Градиентный спуск, проблема выбора шага.
* Стохастический градиентный спуск.
* Использование момента. Метод Нестерова.
* Метод отжига.
* Adagrad, Adadelta, RMSProp, Adam.
* Постановка задачи линейной регрессии. Вероятностная интерпретация.
* Метод наименьших квадратов. Алгебраическое и оптимизационное решения.
* Ковариация, корреляция.
* Критерий R2.
* Анализ остатков. Гомоскедастичность. Квартет Анскомба.
* Решение для неквадратных и плохо обусловненных матриц.
* Регуляризация LASSO.
* Регуляризация Ridge, Elastic*.
* Обобщённые аддитивные модели (generalized additive models)*.
* Сигмоид.
* Метод наибольшего правдоподобия.
* Логистическая регрессия для меток − 1, 1.
* Обобщённые линейные модели (generalized linear models)*.
* Многопараметрическая оптимизация.
* Доминация и оптимальность по Парето.
* Функция качества (fitness). Аппроксимация качества.
* Общая идея генетического алгоритма.
* Представление генома.
* Методы селекции: пропорционально качеству, универсальная выборка (stochastic universal sampling), с наследием (reward-based), турнир. Стратегия элитизма.
* Методы кроссовера. Двух и много-точечный, равномерный (по подмножествам), для перестановок.
* Мутация. Влияние на скорость обучения.
* Управление популяцией. Сегрегация, старение, распараллеливание.
* Генетическое программирование*.
* Понятие энтропии, определение информации по Шеннону.
* Понятие дерева решений.
* Метрики: примеси Джини (Gini impurity), добавленная информация (information gain).
* Алгоритмы ID3, CART.
* Борьба с оверфиттингом: bagging, выборки признаков (random subspace method).
* Ансамбли, случайный лес (Random Forest).
* Деревья регрессии. Метрика вариации.
* Непрерывные признаки. Использование главных компонент вместо признаков.
* Сокращение дерева (pruning).
* Другие алгоритмы вывода правил: 1-rule, RIPPER, bayesian rule lists*.
* Комбинация с линейной регрессией (RuleFit)*.
* Понятие бустинга. Бустинг для бинарной классификации, регрессии.
* Градиентный бустинг.
* AdaBoost. Алгоритм Виолы-Джонса.
* Извлечение признаков. Признаки Хаара (Haar).
* Бустинг деревьев решений. XGBoost.
* CatBoost
* LPBoost, BrownBoost, ComBoost*.
* Понятие и свойства метрики. Ослабление требования к неравенству треугольника.
* Метрики L1, L2, Хемминга, Левенштейна, косинусное расстояние.
* Потеря точности нормы в высоких размерностях.
* Нормализация координат. Предварительная трансформация пространства признаков.
* Метрика Махаланобиса.
* Понятие центроида и представителя класса.
* Центроидные алгоритмы: k-means, k-medoid. Алгоритм Ллойда.
* Базовый алгоритм классификации методом 1-NN и k-NN. Преимущества и недостатки.
* Кросс-валидация методом "без одного" (leave one out).
* Определение границ, показатель пограничности (border ratio).
* Сжатие по данным. Понятия выброса, прототипа, усвоенной точки. Алгоритм Харта (Hart).
* Регрессия методом k-NN.
* Взвешенные соседи.
* Связь с градиентным спуском. Стохастическая формулировка, softmax.
* Метод соседних компонент (neighbour component analysis)*.
* Связь с выпуклой оптимизацией. Метод большого запаса (Large margin NN)*.
* Оптимизация классификатора, k-d деревья, Hierarchical Navigable Small World*.
* Хеши чувствительные к локальности, хеши сохраняющие локальность*.
* Задача обучения без учителя, применения при эксплораторном анализе.
* Иерархическая кластеризация: методы снизу вверх и сверху вниз.
* Алгоритмы, основанные на связности: функция схожести, компоненты связности и остовные деревья, критерии связности.
* Алгоритм BIRCH*.
* Алгоритмы, основанные на плотности: DBSCAN, OPTICS.
* Алгоритмы, основанные на распределении: сумма гауссиан.
* Нечёткая кластеризация, алгоритм c-means.
* Поиск моды (Mean-Shift)*.
* Внутренние оценки качества: leave-one-out, силуэт, индекс Дэвиса-Болдина (Davies-Bouldin), индекс Данна (Dunn).
* Внешние оценки качества.
Постановка задачи, причины и цели снижения размерности.
Выбор и извлечение признаков.
Подходы к выбору признаков: filtering, wrapping, embedding.
Расстояние между распределениями. Расстояние Кульбака-Лейблера. Взаимная информация.
Алгоритмы выбора признаков: на основе корреляции (CFS), взаимной информации, Relief.
Метод главных компонент (PCA).
Многомерное шкалирование (multidimensional scaling). Isomap.
Стохастическое вложение соседей с t-распределением (t-SNE).
Нелинейные обобщения метода главных компонент. Kernel PCA.*
Неотрицательное матричное разложение (NMF).*
Анализ независимых компонент (ICA).*