Точность распознавания птиц по ближайшему наблюдению
Условие
В парке ведутся две таблицы наблюдений за птицами. В первой таблице для каждой птицы записаны измерения: размах крыльев, длина клюва и масса. Во второй таблице по тому же идентификатору указаны вид птицы и часть выборки.
Нужно оценить точность метода 1NN на отложенной части. Для птицы из отложенной части методом 1NN выбирается птица из обучающей части с наименьшим расстоянием, после чего ей назначается вид выбранной птицы.
Пусть у птиц a и b известны значения признаков из множества S. Расстояние между ними определяется формулой
d(a, b) = sqrt((sum((a_i - b_i)^2 для i из S)) / |S|).
Признак со значением NA считается пропущенным и не входит в множество S. Обучающая птица, у которой нет ни одного совместно известного признака с рассматриваемой птицей, не участвует в выборе ближайшей. Гарантируется, что для каждой птицы отложенной части найдётся хотя бы одна подходящая обучающая птица.
Если минимальное расстояние достигается у нескольких обучающих птиц, выбирается птица с меньшим идентификатором. Точностью называется доля птиц отложенной части, для которых предсказанный вид совпал с указанным во второй таблице видом: accuracy = correct / q, где q — число птиц отложенной части. Гарантируется, что обучающая и отложенная части непусты.
Формат ввода
В первой строке дано целое число n — число птиц.
В следующих n строках находится первая таблица. Каждая строка содержит четыре значения: id wing beak mass, где id — идентификатор птицы, wing — размах крыльев в сантиметрах, beak — длина клюва в миллиметрах, mass — масса в граммах. Вместо любого из трёх измерений может стоять строка NA.
В следующих n строках находится вторая таблица. Каждая строка содержит три значения: id part species, где id — идентификатор птицы, part равно train или test, species — вид птицы.
Идентификаторы в каждой таблице не повторяются, а множества идентификаторов в двух таблицах совпадают.
Формат вывода
Выведите точность метода 1NN на птицах с part = test с тремя знаками после десятичной точки.
Ограничения
2 <= n <= 4000.
1 <= id <= 1000000000.
Каждое известное значение wing — целое число от 1 до 300.
Каждое известное значение beak — целое число от 1 до 200.
Каждое известное значение mass — целое число от 1 до 100000.
Длина строки species составляет от 1 до 20 символов. Строка species состоит из строчных латинских букв.
В каждой из частей train и test есть хотя бы одна птица.
Решить задачу с автопроверкой на Python →
Куда дальше
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами
- Родителям: подготовка бесплатно — сколько стоит репетитор, что даёт бесплатный маршрут и как понять, что ребёнок занимается
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели