При оценке качества бинарной классификации часто используют матрицу ошибок (Confusion matrix). Поясним, что это такое. Пусть у нас есть $$$N$$$ каких-то объектов, относящихся к одному из двух классов (0 или 1). Например, объекты — это рентгеновские снимки, класс 1 означает, что пациент болен, класс 0 — что здоров. Пусть имеется некоторый алгоритм, который по объекту предсказывает его класс. Зная фактические и предсказанные классы, для оценки качества предсказания можно построить следующую таблицу:
| Предсказанный класс = 1 | Предсказанный класс = 0 | |
| Фактический класс = 1 | TP | FN |
| Фактический класс = 0 | FP | TN |
Здесь значение TP (True Positive) — это количество объектов, для которых модель предсказала класс 1, и у них на самом деле класс 1. Значение TN (True Negative) — количество объектов, для которых модель предсказала класс 0, и у них на самом деле класс 0. Значение FP (False Positive) — количество объектов, для которых модель предсказала класс 1, а на самом деле у них класс 0. Значение FN (False Negative) — количество объектов, для которых модель предсказала класс 0, а на самом деле у них класс 1.
По значениям из данной таблицы можно вычислить ещё две характеристики — точность и полноту.
Точность (precision) вычисляется по формуле $$$precision = TP / (TP + FP)$$$, то есть какая доля объектов, которые наш алгоритм отнёс к классу 1, действительно относится к классу 1.
Полнота (recall) вычисляется по формуле $$$recall = TP / (TP + FN)$$$, то есть какую долю объектов класса 1 среди всех объектов класса 1 нашёл наш алгоритм.
Пусть всего было 99 объектов, из них 35 — класса 0 и 64 — класса 1. Известно, что модель правильно определила класс для 51 объекта. Найдите ответы на следующие четыре вопроса.
В ответ запишите четыре вещественных числа, каждое в отдельной строке. В качестве разделителя дробной части используйте точку. Если вы не знаете каких-то ответов, напишите вместо них нули. Гарантируется, что все числа в ответе имеют конечную дробную часть. В поле "Язык" выберите PHP (вам не нужно знать этот язык, это просто особенность проверяющей системы) и нажмите кнопку "Отослать".
Система оценивания: каждый верный ответ оценивается в 25 баллов.
Вам дана таблица с данными о проверке решений участников некоторой олимпиады по информатике: log.csv. Копия этой таблицы также находится здесь: log.csv.
Таблица имеет 4 столбца: problem — номер задачи (от 1 до 5); userId — идентификатор участника; language — язык программирования; score — баллы, которое набрало решение (от 0 до 100). Значения score также могут быть пустыми (если, например, какие-то решения даже не скомпилировалось на сервере).
Олимпиада проводилась по традиционным школьным правилам: участник может послать на проверку несколько решений по каждой задаче, при подведении итогов выбирается лучшее решение участника по каждой задаче, баллы за них складываются.
Проанализируйте данные в таблице и ответьте на следующие 4 вопроса.
В ответе напишите 4 целых числа, каждое в отдельной строке. Не пишите ничего лишнего. Если вы не знаете каких-то ответов, напишите вместо них нули. В поле "Язык" выберите PHP (вам не нужно знать этот язык, это просто особенность проверяющей системы) и нажмите кнопку "Отослать".
Каждый верный ответ оценивается в 25 баллов.
Известная медицинская клиника решила добавить в свой список услуг лечение опасной болезни под названием «Воспаление хитрости». Но, прежде чем лечить болезнь, её необходимо диагностировать. Для этого клиника заказала у трёх медицинских лабораторий разработку тест-систем для выполнения диагностики. Через некоторое время лаборатории предоставили свои результаты.
Известно, что при своей работе все тест-системы используют разные технологии и разные алгоритмы для выявления болезни. Поэтому в этой задаче будем считать их диагнозы независимыми друг от друга (примечание: на практике некоторая зависимость всё равно бы имелась, но здесь её будем игнорировать).
Первая тест-система ставит верный диагноз с вероятностью $$$p_1$$$, вторая — с вероятностью $$$p_2$$$, третья — с вероятностью $$$p_3$$$. Окончательное решение принимается по большинству результатов. То есть, если любые две или все три тест-системы решили, что пациент болен, то он считается больным, в противном случае — нет. Определите, с какой вероятностью клиника будет ставить верные диагнозы.
Вводятся три вещественных числа $$$p_1$$$, $$$p_2$$$, $$$p_3$$$, каждое в отдельной строке ($$$0.5 \le p_1, p_2, p_3 \le 1$$$).
Выведите одно вещественное число — итоговую вероятность верного диагноза. Абсолютная или относительная погрешность ответа не должна превышать $$$10^{-4}$$$.
0.650.70.9
0.851
Меры центральной тенденции — это статистические показатели, которые описывают «типичное» или центральное значение в наборе данных. Существует несколько таких мер, рассмотрим три из них.
Медианой набора чисел нечётной длины называется элемент, который окажется в середине, если числа отсортировать. Мода — это самый часто встречающийся элемент. Мод может быть несколько. Среднее арифметическое — это сумма всех элементов, делённая на их количество.
Напишите программу, находящую набор из пяти целых чисел, для которого выполняются одновременно следующие три условия:
Вводятся три целых числа $$$x$$$, $$$y$$$ и $$$z$$$, каждое в отдельной строке ($$$0 \le x, y, z \le 10^8$$$).
Выведите пять целых чисел, имеющих указанные моду, медиану и среднее. Числа должны быть в диапазоне от $$$-10^9$$$ до $$$10^9$$$. Если есть несколько верных ответов, выведите любой. Если решений нет, выведите одно число -1.
125
1 9 1 2 12
132
-1
Решения, верно работающие при $$$x, y, z \le 10$$$, будут оценены в 50 баллов.
Даны $$$n$$$ точек на плоскости. Каждая точка имеет координаты $$$x_i$$$, $$$y_i$$$ и цвет $$$c_i$$$, который может быть белый ($$$c_i=0$$$) или чёрный ($$$c_i=1$$$).
Чтобы определить цвет новой точки $$$P$$$, если он неизвестен, может использоваться следующий подход. Берутся $$$k$$$ наиболее близких к ней наших точек (где $$$k$$$ — некоторое нечётное число), и выбирается тот цвет, который встречается среди них чаще. Примечание: меру близости двух точек можно вычислять по разному, в данной задаче используется обычное евклидово расстояние (то есть длина отрезка между точками).
Качество работы такого классификатора зависит от выбора параметра $$$k$$$. Чтобы найти хорошее значение $$$k$$$, можно использовать следующий простой способ. Посмотрим, какие ответы при разных $$$k$$$ будут получаться для наших входных точек (для которых заранее известны правильные ответы), и выберем то значение $$$k$$$, при котором правильных ответов будет наибольшее количество. Такой метод называется «LOO-кросс-валидация».
Поясним работу этого метода подробнее. Переберём все нечётные значения $$$k$$$ в диапазоне от $$$1$$$ до $$$n-1$$$. Для каждого такого $$$k$$$ переберём все точки. Для каждой из них найдём $$$k$$$ ближайших к ней других точек (её саму не учитываем), возьмём цвет, который встречается среди них чаще, и сравним его с настоящим цветом этой точки. Чем больше верных ответов получилось для текущего значения $$$k$$$, тем это значение лучше. Разумеется, для повышения эффективности можно изменить описанную реализацию алгоритма — главное, чтобы при этом результаты остались правильными.
Напишите программу, которая для каждого нечётного $$$k$$$ в диапазоне от 1 до $$$n$$$ определит, для скольких точек будет верно определён цвет при данном $$$k$$$ в ходе LOO-кросс-валидации.
В первой строке входных данных записано целое число $$$n$$$ ($$$2 \le n \le 1000$$$).
В следующих $$$n$$$ строках записаны тройки чисел $$$x_i$$$, $$$y_i$$$ и $$$c_i$$$ — координаты очередной точки ($$$-20000 \le x_i, y_i \le 20000$$$) и её цвет $$$c_i$$$ (равный либо 0, либо 1).
Гарантируется, что никакие две точки не совпадают и расстояния между всеми парами точек различны.
Выведите количество верно классифицированных точек для $$$k=1$$$, $$$k=3$$$, $$$k=5$$$ и так далее до $$$n-1$$$ (а если $$$n-1$$$ чётно, то до $$$n-2$$$). Сами значения $$$k$$$ выводить не нужно.
41 2 0-3 1 10 0 14 5 0
2 0
Подзадача 1 (до 30 баллов): $$$n \le 50$$$.
Подзадача 2 (до 30 баллов): $$$n \le 200$$$.
Подзадача 3 (до 40 баллов): $$$n \le 1000$$$.
Примечание для пишущих на языке Python. Ввести три числа через пробел можно так:
x, y, c = [int(x) for x in input().split()]
Вася решил разработать плагин для нового мессенджера Min. Плагин должен определять, является ли приходящее сообщение фродом (то есть, что оно написано мошенниками). Вася уже почти выполнил работу и реализовал алгоритм, который для каждого сообщения выдаёт оценку P. Чем больше эта оценка, тем выше вероятность, что сообщение является фродом. Осталась последняя деталь — необходимо определить порог срабатывания, то есть начиная с какого порогового значения T сообщения с оценкой P ≥ T алгоритм будет считать фродом.
Для решения этой задачи Вася сформировал обучающую выборку из N сообщений и привлёк в качестве экспертов своих одноклассников. Они прочитали эти N сообщений и отметили, какие из них — фрод. Все остальные сообщения фродом не являются.
Для оценки качества алгоритма Вася решил использовать метрику F1. Поясним, как она вычисляется. Введём следующие обозначения:
Тогда значения precision (точность) и recall (полнота) вычисляются по формулам:
precision = TP / (TP + FP), то есть какая доля сообщений, которые наш алгоритм назвал фродом, действительно фрод.
recall = TP / (TP + FN), то есть какую долю фрод-сообщений среди всех фрод-сообщений нашёл наш алгоритм.
Метрика F1 вычисляется по формуле:
Примечание. В случае, когда precision и recall одновременно равны нулю, результирующая метрика F1 тоже равна нулю.
Чем больше значение метрики F1, тем выше качество классификации. Найдите такое натуральное число — значение порога T, которое даст максимальное значение F1.
В первой строке входных данных записано число N (1 ≤ N ≤ 105) — общее количество сообщений.
Во второй строке перечислены N натуральных чисел через пробел в диапазоне от 1 до 109 — значения оценки P для каждого сообщения.
В третьей строке находится число K (1 ≤ K ≤ N) – количество фрод-сообщений.
В четвертой строке перечислены K различных целых чисел в диапазоне от 1 до N в произвольном порядке — номера фрод-сообщений.
Выведите одно натуральное число – значение порога T, при котором достигается наибольшеее значению метрики F1. Если есть несколько верных ответов, то выведите наименьший.
5
1 2 3 4 5
3
1 4 3
1
10
1 2 3 4 5 6 7 8 100 1000
1
9
9
Примечание для пишущих на языке Python. Ввести набор записанных через пробел целых чисел можно так:
a = [int(x) for x in input().split()]
Система оценивания.
Подзадача 1 (до 60 баллов): N ≤ 100.
Подзадача 2 (до 40 баллов): N ≤ 105.