Плюсануть
Поделиться
Класснуть
Запинить


Олимпиадный тренинг

Вы можете самостоятельно решать эти задачи столько раз, сколько вам это понадобится.
   

3.1.1 Успешные ученики (уровень 1)

Машинное обучение Классификация по фиксированному правилу

Файл students.txt содержит данные о 2400 учениках. В каждой строке два целых числа через пробел: балл_за_тест посещаемость_процент.

Ученик считается успешным, если его балл за тест не меньше 60 и посещаемость не меньше 75%.

Определите количество успешных учеников. В ответе запишите одно целое число.

3.1.2 Одобрение кредита (уровень 1)

Машинное обучение Классификация по фиксированному правилу

Банк рассматривает заявки на кредит. Файл clients.txt содержит данные о 3500 клиентах. В каждой строке три целых числа через пробел: возраст доход_тыс_руб кредитный_рейтинг (рейтинг — от 0 до 10).

Правило одобрения: доход не меньше 50 и кредитный рейтинг не меньше 5 и возраст не меньше 21 года.

Определите, сколько клиентов получат одобрение. В ответе запишите одно целое число.

3.1.3 Право на скидку (уровень 1)

Машинное обучение Классификация по фиксированному правилу

Магазин предоставляет скидку постоянным покупателям. Файл buyers.txt содержит данные о 4200 покупателях. В каждой строке два целых числа через пробел: сумма_покупок_руб число_визитов.

Покупатель получает скидку, если сумма его покупок больше 10000 руб или число визитов не меньше 30.

Определите, сколько покупателей получат скидку. В ответе запишите одно целое число.

3.1.4 Отбор в сборную (уровень 1)

Машинное обучение Классификация по фиксированному правилу

Тренер отбирает легкоатлетов в сборную. Файл athletes.txt содержит результаты 2800 спортсменов. В каждой строке два числа через пробел: время_на_100м_сек прыжок_в_длину_см (время — вещественное, прыжок — целое).

В сборную попадает спортсмен, у которого время на 100 м находится в диапазоне от 11.0 до 12.5 секунды включительно, а прыжок в длину строго больше 650 см.

Определите количество отобранных спортсменов. В ответе запишите одно целое число.

3.1.5 Фильтр товаров (уровень 1)

Машинное обучение Классификация по фиксированному правилу

Интернет-магазин формирует витрину. Файл goods.txt содержит данные о 5000 товарах. В каждой строке три целых числа через пробел: цена_руб остаток_на_складе снят_с_производства (последнее поле: 1 — снят, 0 — выпускается).

Товар попадает на витрину, если его цена не превышает 5000 руб, остаток на складе больше нуля и товар не снят с производства.

Определите, сколько товаров попадёт на витрину. В ответе запишите одно целое число.

3.2.1 Тариф такси (уровень 2)

Машинное обучение Классификация по фиксированному правилу

Служба такси классифицирует поездки. Файл taxi.txt содержит данные о 6000 поездках. В каждой строке два числа через пробел: расстояние_км час_начала (расстояние — вещественное, час — целое от 0 до 23).

Тариф определяется первым сработавшим правилом (правила проверяются по порядку):

  1. если расстояние больше 30 км — тариф «межгород» (класс 3);
  2. иначе, если час начала меньше 6 или не меньше 23 — тариф «ночной» (класс 2);
  3. иначе — тариф «городской» (класс 1).

Определите количество поездок по тарифу «ночной». В ответе запишите одно целое число.

3.2.2 Индекс массы тела (уровень 2)

Машинное обучение Классификация по фиксированному правилу

Медцентр анализирует данные пациентов. Файл patients.txt содержит 4500 строк. В каждой строке два числа через пробел: рост_м вес_кг (оба вещественные).

Индекс массы тела вычисляется по формуле \( ИМТ = \dfrac{вес}{рост^2} \).

Пациент относится к категории «норма», если \( 18{,}5 \le ИМТ < 25 \).

Определите количество пациентов категории «норма». В ответе запишите одно целое число.

3.2.3 Спам-фильтр с белым списком (уровень 2)

Машинное обучение Классификация по фиксированному правилу

Почтовый сервис фильтрует письма. Файл mail.txt содержит данные о 7000 письмах. В каждой строке три целых числа через пробел: число_ссылок процент_заглавных_букв отправитель_в_белом_списке (последнее поле: 1 — да, 0 — нет).

Правила применяются по порядку, срабатывает первое подходящее:

  1. если отправитель в белом списке — письмо «не спам»;
  2. если число ссылок не меньше 10 — «спам»;
  3. если процент заглавных букв больше 60 — «спам»;
  4. иначе — «не спам».

Определите количество писем, помеченных как «спам». В ответе запишите одно целое число.

3.2.4 Самый частый класс погоды (уровень 2)

Машинное обучение Классификация по фиксированному правилу

Метеостанция классифицирует дни по среднесуточной температуре. Файл days.txt содержит 8000 строк, в каждой — одно вещественное число: температура.

Классы:

  • класс 1 «мороз»: температура меньше −10;
  • класс 2 «холодно»: от −10 (включительно) до 5 (не включая);
  • класс 3 «прохладно»: от 5 (включительно) до 20 (не включая);
  • класс 4 «тепло»: 20 и выше.

Определите номер класса, к которому относится наибольшее количество дней. Гарантируется, что такой класс единственный. В ответе запишите одно целое число — номер класса.

3.2.5 Отбор резюме (уровень 2)

Машинное обучение Классификация по фиксированному правилу

IT-компания отбирает резюме. Файл resume.txt содержит данные о 5500 кандидатах. В каждой строке три целых числа через пробел: стаж_лет знание_английского балл_за_алгоритмы (английский: 1 — есть, 0 — нет; балл — от 0 до 100).

Кандидат проходит на собеседование, если выполнено условие:

(стаж не меньше 3 лет ИЛИ балл за алгоритмы не меньше 80) И есть знание английского.

Определите количество кандидатов, прошедших отбор. В ответе запишите одно целое число.

3.3.1 Дерево решений для цветков (уровень 3)

Машинное обучение Классификация по фиксированному правилу

Ботаник классифицирует цветки по заданному дереву решений. Файл flowers.txt содержит 9000 строк: длина_лепестка ширина_лепестка (оба числа вещественные, в сантиметрах).

Дерево решений:

  • если длина лепестка меньше 2.5 — вид 0;
  • иначе:
    • если ширина лепестка меньше 1.8 — вид 1;
    • иначе — вид 2.

Примените дерево ко всем цветкам. Определите номер вида, к которому отнесено наибольшее количество цветков, и количество цветков этого вида. Гарантируется, что такой вид единственный.

В ответе запишите два целых числа через пробел: номер вида и количество.

3.3.2 Два правила фиксации скорости (уровень 3)

Машинное обучение Классификация по фиксированному правилу

Дорожная служба сравнивает два правила фиксации превышения скорости. Файл speed.txt содержит 10000 строк: скорость_кмч лимит_зоны (оба числа целые; лимит принимает значения 40, 60 или 90).

Правило А: нарушение, если скорость больше, чем лимит + 20.

Правило Б: нарушение, если скорость больше, чем лимит × 1.25.

Примените оба правила к каждой записи. Определите:

  • количество записей, для которых правила дали одинаковый вердикт;
  • количество записей, которые правило А считает нарушением, а правило Б — нет.

В ответе запишите два целых числа через пробел.

3.3.3 Отличники и нестабильные (уровень 3)

Машинное обучение Классификация по фиксированному правилу

Школа анализирует четвертные оценки. Файл marks.txt содержит 6500 строк, в каждой — 8 целых чисел через пробел: оценки одного ученика по восьми предметам (от 2 до 5).

Ученик классифицируется так:

  • «отличник» — средний балл не меньше 4.5;
  • «нестабильный» — разница между максимальной и минимальной оценкой не меньше 3 (эта категория присваивается независимо от первой).

Определите количество отличников и количество нестабильных учеников.

В ответе запишите два целых числа через пробел.

3.3.4 Рекомендация тарифа (уровень 3)

Машинное обучение Классификация по фиксированному правилу

Оператор связи рекомендует абонентам тариф. Файл abonents.txt содержит 7500 строк: минуты_звонков число_смс гигабайты (минуты и СМС — целые, гигабайты — вещественное).

Сначала вычисляется индекс активности: минуты + 2 × число СМС.

Затем применяется дерево правил (по порядку):

  1. если гигабайт больше 30 — тариф 3 «интернет»;
  2. иначе, если индекс активности больше 400 — тариф 2 «разговорный»;
  3. иначе — тариф 1 «базовый».

Определите номер тарифа, рекомендованного наименьшему числу абонентов, и количество таких абонентов. Гарантируется, что такой тариф единственный.

В ответе запишите два целых числа через пробел.

3.3.5 Класс риска водителя (уровень 3)

Машинное обучение Классификация по фиксированному правилу

Страховая компания назначает водителям класс риска. Файл drivers.txt содержит 8500 строк: возраст число_аварий стаж_лет vip_клиент (все числа целые; vip: 1 — да, 0 — нет).

Правила применяются по порядку, срабатывает первое подходящее:

  1. VIP-клиент — класс 1 «стандарт» (независимо от остальных данных);
  2. число аварий не меньше 3 — класс 3 «высокий риск»;
  3. возраст меньше 23 и стаж меньше 3 лет — класс 3 «высокий риск»;
  4. аварий нет (ровно 0) и стаж не меньше 10 лет — класс 0 «низкий риск»;
  5. иначе — класс 1 «стандарт».

Определите количество водителей класса 3 «высокий риск» и количество водителей класса 0 «низкий риск».

В ответе запишите два целых числа через пробел.

A3.1 quantile(0.9)

Классификация по фиксированному правилу

Что делает df['col'].quantile(0.9)?

  1. берёт 9 случайных значений
  2. возвращает топ-10 строк
  3. умножает столбец на 0.9
  4. возвращает значение, ниже которого находится 90% данных

A10.1 не Европа

Классификация по фиксированному правилу

Какие выражения найдут страны, которые НЕ из Европы?
(I) df[df['Region'] != 'Европа']
(II) df[~(df['Region'] == 'Европа')]

  1. только I
  2. только II
  3. оба варианта верны
  4. ни один не верен

A1.1 len(df[mask])

Классификация по фиксированному правилу

Что вернёт выражение len(df[df['Region'] == 'ASIA'])?

  1. список стран Азии
  2. количество стран Азии
  3. таблицу со столбцом Region
  4. ошибку, потому что нет .count()

Упражнение - 6

Классификация по фиксированному правилу

Какую диаграмму использовать, чтобы найти связь между временем учёбы и оценкой?

  1. Круговую
  2. Столбчатую
  3. Линейную
  4. Точечную (scatter)

Упражнение - 4

Классификация по фиксированному правилу

Какую диаграмму выбрать для сравнения продаж по регионам?

  1. Линейную
  2. Круговую
  3. Столбчатую
  4. Точечную

Проверь себя - 11

Классификация по фиксированному правилу

По правилу третей, где лучше размещать ключевой элемент?

  1. Строго в центре
  2. В углу
  3. На пересечении линий третей

Проверь себя - 4

Классификация по фиксированному правилу

Принцип близости (proximity) означает:

  1. Все элементы должны быть на одинаковом расстоянии
  2. Связанные элементы располагаются рядом друг с другом
  3. Элементы должны быть как можно дальше друг от друга

Проверь себя - 1

Классификация по фиксированному правилу

Как создать иерархию с помощью размера?

  1. Сделать все элементы одинакового размера
  2. Важные элементы — крупнее, второстепенные — мельче
  3. Мелкие элементы привлекают больше внимания

Упражнение 7.4 k-distance

Классификация по фиксированному правилу

Как изменение параметра minPts влияет на форму k-distance графика и выбор εε?

  1. При увеличении minPts k-расстояния уменьшаются, и локоть смещается к нулю
  2. minPts влияет только на итоговые кластеры и никак не связан с k-distance графиком
  3. При увеличении minPts k-расстояния, как правило, возрастают, и локоть смещается вправо и вверх
  4. Изменение minPts вообще не рекомендуется, он всегда фиксирован

Упражнение 7.3 k-distance

Классификация по фиксированному правилу

Как выбор параметра k (количество соседей для k-distance) связан с параметром minPts в DBSCAN?

  1. Часто выбирают k=minPts или k=minPts−1
  2. Обычно выбирают k=1, независимо от minPts
  3. Связи между k и minPts нет, они подбираются совершенно независимо
  4. k всегда должен быть намного больше minPts

Упражнение 7.2 k-distance

Классификация по фиксированному правилу

Зачем сортировать k-расстояния по возрастанию перед построением k-distance графика?

  1. Чтобы разнесённые во времени наблюдения шли подряд
  2. Чтобы визуально выделить резкий переход от плотных областей к шуму
  3. Чтобы получить симметричный график относительно середины
  4. Чтобы можно было напрямую прочитать индексы кластеров

Упражнение 7.1 k-distance

Классификация по фиксированному правилу

На k-distance графике по оси абсцисс отложены отсортированные объекты датасета. Что обычно показывается по оси ординат?

Выберите верный вариант ответа
  1. Расстояние до ближайшего соседа k=1 для каждого объекта
  2. Индекс объекта в исходном порядке выборки
  3. Среднее расстояние от объекта до всех других объектов
  4. Расстояние до k-го ближайшего соседа для каждого объекта

Упражнение 3. Определите тип точки

Классификация по фиксированному правилу

Дано: eps = 2, minPts = 3
Точки: A(1, 1),  B(2, 1),  C(3, 1),  D(10, 10)

Какой тип у точки D?

Выберите верный вариант ответа

  1. Ядровая точка
  2. Граничная точка
  3. Шумовая точка
  4. Невозможно определить

Кластеризация - 6

Классификация по фиксированному правилу

Даны точки на координатной плоскости:

A(1, 1), B(2, 1), C(1, 2), D(8, 8), E(9, 8), F(8, 9)

Центры кластеров:
C1(1.5, 1.5) и C2(8.5, 8.5)

К какому кластеру относится точка G(5, 5)?

  1. Кластер 1 (C1)
  2. Кластер 2 (C2)
  3. На границе кластеров (равные расстояния)
  4. Не относится ни к одному кластеру

Кластеризация - 5

Классификация по фиксированному правилу

Какое расстояние чаще всего используется в k-means?

  1. Расстояние на карте города
  2. Евклидово расстояние
  3. Время в пути
  4. Количество шагов

Кластеризация - 3

Классификация по фиксированному правилу

Как выбрать оптимальное количество кластеров k?

  1. Всегда использовать k=2
  2. k должно быть равно количеству точек
  3. Методом локтя (Elbow method) или другими эвристиками
  4. Случайным образом

Кластеризация - 1

Классификация по фиксированному правилу

Что такое центроид (центр кластера) в алгоритме k-means?

1) Самая первая точка в кластере
2) Точка со средними координатами всех точек кластера
3) Точка, которая находится дальше всего от других кластеров
4) Случайная точка из кластера

Новый детектор для директора

Классификация по фиксированному правилу

После Великой паники директор понял: старая система слишком сложная и ошибается. Он собрал данные за целую неделю (не только тот понедельник):

Странные слова? Избегает общения? Пришёл до 9:00? Оказался нечистью?
1 Да Да Да ✅ Да
2 Да Да Нет ✅ Да
3 Да Нет Да ❌ Нет
4 Да Нет Нет ❌ Нет
5 Нет Да Да ❌ Нет
6 Нет Да Нет ✅ Да
7 Нет Нет Да ❌ Нет
8 Нет Нет Нет ❌ Нет

Всего: 3 нечисти, 5 людей


Директор заметил: «Бледное лицо» больше не работает — зимой все бледные! Нужны новые признаки.

Ты получил задачу: Построй дерево глубины 2 и предскажи для новенького.
 

Новенький — Гриша:

  • Странные слова: ДА (переехал из Германии, вставляет немецкие слова)
  • Избегает общения: ДА (стесняется, ещё никого не знает)
  • Пришёл до 9:00: ДА (родители привезли пораньше)

Что предскажет оптимальное дерево глубины 2?

    1. Человек
    1. Нечисть
    1. 50/50 — дерево не может определить
    1. Нужен третий уровень дерева

автопроверка

Классификация по фиксированному правилу

После карантина школа Ларево установила систему для определения зомби:

              [Бледное лицо?]
               /           \
             Да            Нет
             /               \
      [Странная походка?]   НЕ ЗОМБИ
         /          \
       Да           Нет
       /              \
[Издаёт стоны?]    НЕ ЗОМБИ
    /       \
  Да        Нет
  /           \
ЗОМБИ      НЕ ЗОМБИ

Понедельник, 8:00. Костя всю ночь писал код. Приходит в школу:

  • Лицо бледное (не видел солнце 3 дня)
  • Походка странная (врезался в две стены)
  • Издаёт стоны («уууу....стены...кофеее....коодд»)

Система сработала и вызвала охрану! Костя хочет доказать, что он не зомби. Какой ОДИН признак ему проще всего изменить прямо сейчас, чтобы система изменила решение?

    1. Бледное лицо — умыться холодной водой
    1. Странная походка — выпить кофе и взбодриться
    1. Издаёт стоны — просто замолчать
    1. Любой из трёх сработает одинаково

Пустят ли Костю на олимпиаду?

Классификация по фиксированному правилу

Дерево отбора на олимпиаду по программированию:

              [Средний балл > 4.5?]
                /              \
              Да               Нет
              /                  \
     [Победил в прошлом году?]  НЕ ПУСТЯТ
          /           \
        Да            Нет
        /               \
    ПУСТЯТ        [Рекомендация учителя?]
                      /            \
                    Да             Нет
                    /                \
                ПУСТЯТ          НЕ ПУСТЯТ

Костя Багов: средний балл 4.2, но он трижды побеждал на олимпиадах, написал школьный сайт и учитель информатики его боготворит.

Пустят на олимпиаду?

    1. Пустят — он же гений!
    1. Не пустят
    1. Пустят вне конкурса
    1. Создаст свою олимпиаду

Проспит ли Тимоха

Классификация по фиксированному правилу

Нейросеть школы Ларево предсказывает, проспит ли Тимоха урок:

        [Урок до 10:00?]
         /           \
       Да            Нет
       /               \
   ПРОСПИТ         НЕ ПРОСПИТ

Сейчас урок информатики, начало в 8:30. Что предскажет модель?

    1. Проспит
    1. Не проспит
    1. Зависит от предмета
    1. Нужно проверить, выпил ли он кофе

Истории из школы

Классификация по фиксированному правилу

Добро пожаловать в школу Ларево — место, где ученики строят ML-модели, чтобы предсказать, кого вызовут к доске, а учителя используют нейросети для распознавания тех, кто не сделал домашку.


🌟 ГЕРОИ ШКОЛЫ ЛАРЕВО:

  • Тимофей «Тимоха» Лапшин — засыпает на любом уроке за 3 минуты
  • Алиса Кактусова — рисует мемы в тетради вместо конспектов
  • Данил «Данон» Йогуртов — всегда голодный, ест на уроках
  • Вика Вайфайная — не может жить без телефона больше 5 минут
  • Костя Багов — гений программирования, но забывает надеть разные носки
  • Маша Мемасова — знает все тренды, но не знает, кто такой Пушкин

Готовы к викторине?
1. Да
2. Нет



---
Все имена и события выдуманы. Любые совпадения случайны (честно)
За ответ на этот вопрос тоже дают балл :)

Кот или не кот

Классификация по фиксированному правилу

ИИ-система школы Ларево научилась распознавать котов на фото (для важных научных целей):

            [Есть усы?]
            /         \
          Да          Нет
          /             \
    [Говорит «мяу»?]   НЕ КОТ
       /        \
     Да         Нет
     /            \
   КОТ        [Ловит мышей?]
                /        \
              Да         Нет
              /            \
            КОТ        НЕ КОТ

Ситуация: На перемене Вика нарисовала Тимохе усы маркером пока он спал. Тимоха проснулся, увидел себя в камере телефона и от неожиданности издал звук «мяяяу?!». В этот момент школьная система распознавания сфоткала его для пропуска.

Что выдаст система?

    1. Кот 🐱
    1. Не кот 👦
    1. Ошибка распознавания
    1. Тимофей Лапшин, 10-Б класс

Построй дерево и предскажи - 2

Классификация по фиксированному правилу

Данные о том, выйдет ли человек на пробежку:

Дождь? Температура Выходной? Бегал?
1 Нет Тепло Да
2 Нет Тепло Нет
3 Нет Холодно Да
4 Нет Холодно Нет
5 Да Тепло Да
6 Да Тепло Нет
7 Да Холодно Да
8 Да Холодно Нет

Новый человек — Саша: Дождь=Нет, Температура=Холодно, Выходной=Нет.

Что предскажет дерево с оптимальным корнем?
 

  1. Побежит (100% уверенность)
  2. Не побежит (100% уверенность)
  3. Побежит (но есть неопределённость)
  4. Не побежит (но есть неопределённость)

Дерево для школьной дискотеки

Классификация по фиксированному правилу

Данные: кто пойдёт на школьную дискотеку?

Есть пара? Друзья идут? Домашка сделана? Пошёл?
1 Да Да Да
2 Да Да Нет
3 Да Нет Да
4 Да Нет Нет
5 Нет Да Да
6 Нет Да Нет
7 Нет Нет Да
8 Нет Нет Нет

Какой признак лучше поставить в корень?

    1. Есть пара
    1. Друзья идут
    1. Домашка сделана
    1. Все одинаково хороши

Кто пойдет на школьную мафию

Классификация по фиксированному правилу

В школе Ларево пятничная мафия — священная традиция. Дерево предсказывает участие:

              [Пятница?]
              /        \
            Да          Нет
            /             \
     [Домашки много?]   НЕ ПРИДЁТ
        /        \
      Да         Нет
      /            \
[Мафия или домашка?] ПРИДЁТ
    /        \
 Мафия     Домашка
   /          \
ПРИДЁТ    НЕ ПРИДЁТ

Пять учеников в пятницу:

Ученик Много домашки? Выбор
Тимоха Да Мафия
Алиса Нет
Данон Да Домашка
Вика Да Мафия
Костя Нет

Сколько придут на мафию?

    1. 2
    1. 3
    1. 4
    1. 5

Information Gain для предсказания

Классификация по фиксированному правилу

Предсказываем, кто забудет сменку.

Начальная энтропия: 1.0 (половина забывает, половина нет)

Разделяем по признаку «Понедельник»:

  • Понедельник (8 человек): энтропия 0.0 (все забыли!)
  • Другой день (12 человек): энтропия 0.65

Чему равна информационная выгода?

    1. 0.21
    1. 0.39
    1. 0.61
    1. 1.0

Индекс Gini в столовой

Классификация по фиксированному правилу

Голосование за меню школьной столовой:

  • 20 человек за пельмени 🥟
  • 5 человек за овсянку 🥣

Формула: Gini = 1 − (p₁² + p₂²)

Чему равен Gini?

    1. 0
    1. 0.32
    1. 0.5
    1. 1

Лучший признак

Классификация по фиксированному правилу

Данные: кто нарисовал усы на портрете Пушкина?

Был на перемене в кабинете? Имеет маркер? Смеялся громче всех? Виновен?
1 Да Да Да
2 Да Да Нет
3 Да Нет Да
4 Да Нет Нет
5 Нет Да Да
6 Нет Да Нет
7 Нет Нет Да
8 Нет Нет Нет

Какой признак лучше всего разделяет виновных?

    1. Был в кабинете
    1. Имеет маркер
    1. Смеялся громче всех
    1. Нужны все три вместе

(вопрос с подвохом) 

4. Пройди по дереву

Классификация по фиксированному правилу

Дерево учителя информатики:

                [Телефон на парте?]
                 /              \
               Да               Нет
               /                  \
      [Вика смотрит в него?]   НЕ КОНФИСКУЮТ
          /           \
        Да            Нет
        /               \
  КОНФИСКУЮТ     [Звук включён?]
                    /        \
                  Да         Нет
                  /            \
            КОНФИСКУЮТ    НЕ КОНФИСКУЮТ

Ситуация: телефон на парте, Вика смотрит в окно, но телефон вдруг играет «Never Gonna Give You Up».

Что случится?

    1. Не конфискуют — она же не смотрит!
    1. Конфискуют
    1. Учитель посмеётся и простит
    1. Рикролл защитит телефон

Что есть что?

Классификация по фиксированному правилу

Дерево решает, будет ли Данон есть на уроке:

           [Прошло больше часа с завтрака?]
                  /                \
                Да                 Нет
                /                    \
        [Учитель строгий?]       НЕ БУДЕТ ЕСТЬ
           /          \
         Да           Нет
         /              \
    БУДЕТ ЕСТЬ      БУДЕТ ЕСТЬ
    (тихо)          (громко хрустя)

Что является ЛИСТОМ дерева?

    1. «Прошло больше часа с завтрака?»
    1. «Учитель строгий?»
    1. «БУДЕТ ЕСТЬ (тихо)»
    1. «Да» и «Нет»

Предскажи по дереву

Классификация по фиксированному правилу

У вас есть дерево для предсказания, понравится ли фильм:

                [Жанр = Ужасы?]
                /            \
              Да              Нет
              /                \
        НЕ ПОНРАВИТСЯ     [Есть супергерои?]
                            /           \
                          Да            Нет
                          /              \
                   ПОНРАВИТСЯ      [Длительность > 2ч?]
                                      /          \
                                    Да           Нет
                                    /             \
                              НЕ ПОНРАВИТСЯ   ПОНРАВИТСЯ

Маша идёт на фильм: комедия, без супергероев, длится 1.5 часа. Что предскажет дерево?

  1. Понравится
  2. Не понравится
  3. Невозможно определить
  4. Нужно больше данных

Проверь себя - 4

Классификация по фиксированному правилу

Почему Gini часто предпочитают энтропии?

  1. Gini всегда дает лучшие результаты
  2. Gini быстрее вычислять (не нужен логарифм)
  3. Gini работает с многоклассовыми задачами
  4. Gini менее чувствителен к выбросам

Проверь себя - 2

Классификация по фиксированному правилу

Если энтропия узла = 0, что это означает?

  1. В узле нет данных
  2. Все примеры в узле одного класса
  3. Классы распределены равномерно
  4. Узел является корнем

Проверь себя - 1

Классификация по фиксированному правилу

Что такое информационная выгода?

  1. Количество правильных предсказаний
  2. Уменьшение энтропии после разделения
  3. Глубина дерева
  4. Количество листьев

Подбираем порог. Упражнение 2

Классификация по фиксированному правилу

Каким должен быть порог, чтобы поймать ВСЕ спам-письма (Recall = 100%)?

Выберите правильный ответ

  1. 0.3
  2. 0.4
  3. 0.43
  4. 0.5

 

Типы машинного обучения. Упражнение 2

Классификация по фиксированному правилу

Интернет-магазин анализирует поведение покупателей и автоматически делит их на группы: «экономные», «люксовые покупатели», «импульсные покупатели» и т.д.

Какой тип машинного обучения здесь применяется?

  1. Классификация
  2. Кластеризация
  3. Регрессия

Что отличает задачу классификации от задачи регрессии?

Классификация по фиксированному правилу

Что отличает задачу классификации от задачи регрессии?

Варианты ответа:
1) Классификация предсказывает непрерывные значения, а регрессия — категориальные.
2) Классификация и регрессия обе предсказывают только непрерывные значения.
3) Классификация предсказывает категориальные метки, а регрессия — непрерывные значения.
4) Классификация и регрессия обе предсказывают только категориальные метки.

26

Классификация по фиксированному правилу

Каково назначение функции pivot_table() в Pandas?

  1. Для создания нового DataFrame
  2. Для поворота строк и столбцов в DataFrame
  3. Для выполнения статистических операций над DataFrame
  4. Для создания сводной таблицы

Learning by Example

Классификация по фиксированному правилу

Фермер Джон решил использовать данные о своём стаде коров,
чтобы построить автоматический распознаватель, имеет корова
пятна или нет.

К несчастью, ФД не ученье удачно собрал данные о своих коровах
Для каждой из его N(1 <= N <= 50,000) коров, всё что он знает, это
вес коровы и имеет или нет она пятна. Все его коровы имеют
различный вес. По этим данным он построил то, что он назвал,
"классификатор ближайшего соседа". Чтобы угадать, есть у новой
коровы C пятно или нет, он сначала находит в своём стаде корову С'
такую, что её вес ближайший к C'. Если корова C' имеет пятна,
то ФД предполагает, что корова C имеет пятна, если корова C'
не имеет пятен, то ФД предполагает, что и корова C не имеет пятен.
Если же уникального ближайшего соседа нет, а есть две коровы
на одинаковом минимальном расстоянии от C', тогда ФД предполагает,
что корова C имеет пятна, если одна из двух ближайших коров
также имеется пятна.

ФД хочет проверить свой автопредсказатель пятнистости на группе
новых коров, которые только что прибыли на его ферму.
После взвешивания новых коров он обнаружил, что они имеют веса
всех целых чисел в интервале от A до B включительно.

Пожалуйста, определите, сколько из этих коров будут классифицированы
как имеющие пятна. Заметим, что классификатор делает предсказание,
основываясь на данных об N существующих коровах.
Также заметим, что A и B могут быть достаточно большими числами,
так что просто проверка всех чисел по одному от A до B не пройдёт
по времени.

Формат входных данных

Первая строка ввода содержит три целых числа N,A,B
(1 <= A <= B <= 1,000,000,000).

Каждая из следующих N строк описывают одну корову. Каждая строка
содержит либо S W, означающее, что корова с весом W имеет пятна
или NS W, означающее, что корова с весом W не имеет пятен.
Все веса - целые числа в интервале 1 ... 1 000 000 000.

Формат выходных данных

Одно целое число - количество коров из прибывших,
которых алгоритм ФД классифицирует как пятнистых.

В приведенном примере новые коровы с весами
1, 2, 7, 8, 9, 10
будут классифицированы как пятнистые.

Одномерный k-means

Классификация по фиксированному правилу

Реализуйте алгоритм k-means для одномерных данных (только координата x).

Для одномерных данных расстояние между точками вычисляется как модуль разности: |x₁ - x₂|

При равном расстоянии до нескольких центров точка присваивается кластеру с меньшим номером.

 

Формат входных данных

- Первая строка: два целых числа n и k (1 ≤ k ≤ n ≤ 1000) — количество точек и кластеров

- Вторая строка: n целых чисел через пробел — значения точек (−10⁶ ≤ xᵢ ≤ 10⁶)

- Третья строка: k вещественных чисел через пробел — начальные центры кластеров

 

Формат выходных данных

- Первая строка: k вещественных чисел — финальные центры кластеров (округлённые до 1 знака после запятой)

- Вторая строка: n целых чисел — номер кластера (0-индексация) для каждой точки в порядке их появления во входных данных

Задача - 4. Кластеризация звёзд

Классификация по фиксированному правилу

Учёный решил провести кластеризацию множества звёзд по их расположению на карте звёздного неба. Кластер звёзд — это набор звёзд (точек), лежащих внутри прямоугольника высотой H и шириной W. Каждая звезда принадлежит ровно одному кластеру. Центроид кластера — это одна из звёзд кластера, сумма расстояний от которой до всех остальных звёзд этого кластера минимальна. Расстояние между звёздами вычисляется по формуле Евклида: \(d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}\)

Вам дан список координат звёзд и количество кластеров k. Известно, что все кластеры имеют размер \(H \times W\) и чётко разделены (расстояние между кластерами значительно больше их размера).

Необходимо:

1. Разделить звёзды на k кластеров

2. Найти центроид каждого кластера

3. Вычислить \(P_x\) — среднее арифметическое x-координат всех центроидов

4. Вычислить \(P_y\) — среднее арифметическое y-координат всех центроидов

5. Вывести результат в заданном формате

 

Формат входных данных

- Первая строка содержит два целых числа n и k (\(1 \le n \le 1000\), \(1 \le k \le 10\)) — количество звёзд и количество кластеров.

- Вторая строка содержит два вещественных числа H и W — размеры каждого кластера.

- Следующие n строк содержат по два вещественных числа \(x_i\)и \(y_i\) (\(-10^6 \le x_i, y_i \le 10^6\)) — координаты звёзд.

 

Формат выходных данных

Выведите два целых числа через пробел:

- Целую часть от \(|P_x \times 10000|\)

- Целую часть от \(|P_y \times 10000|\)

где |x| обозначает абсолютное значение числа x.

Задача - 3. Реализация k-means

Классификация по фиксированному правилу

Алгоритм K-Means — это итеративный алгоритм кластеризации, который разбивает множество точек на K кластеров. Алгоритм работает следующим образом:

1. Инициализация: задаются начальные координаты K центров кластеров
2. Назначение: каждая точка относится к кластеру с ближайшим центром (по евклидову расстоянию)
3. Пересчёт: центр каждого кластера пересчитывается как среднее арифметическое координат всех точек, принадлежащих этому кластеру
4. Проверка сходимости: если центры не изменились — алгоритм завершается, иначе переход к шагу 2

Евклидово расстояние между точками \((x_1, y_1)\) и \((x_2, y_2)\)вычисляется по формуле: \(d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}\)

Реализуйте алгоритм K-Means и выведите результат его работы.

Формат входных данных

- Первая строка содержит два целых числа n и k (1 <= n <= 1000, 1 <= k <= 10, k <= n) — количество точек и количество кластеров.
- Следующие n строк содержат по два вещественных числа xi и yi (-106 <= xi, yi <= 106) — координаты точек.
- Следующие k строк содержат по два вещественных числа cxj и cyj (-106 <= cxj, cyj <= 106) — начальные координаты центров кластеров.


Формат выходных данных

- Первая строка должна содержать одно целое число — количество итераций, выполненных до сходимости.
- Следующие k строк должны содержать по два вещественных числа — финальные координаты центров кластеров (в том же порядке, что и во входных данных). Координаты выводить с точностью до 2 знаков после запятой.
- Следующие n строк должны содержать по одному целому числу — номер кластера для каждой точки (нумерация с 0, в том же порядке, что и точки во входных данных).
 

Примечания
- Сходимость достигается, когда координаты всех центров не изменяются между итерациями (с точностью до вычислительной погрешности 1e-9)
- При сравнении расстояний, если точка равноудалена от нескольких центров, она относится к кластеру с меньшим номером
- Если кластер оказался пустым (ни одна точка не была к нему отнесена), его центр остаётся на прежнем месте
- Гарантируется, что алгоритм сойдётся не более чем за 100 итераций

Задача - 2. Пересчёт центров кластеров

Классификация по фиксированному правилу

Напишите программу, которая пересчитывает координаты центров кластеров.

Формат входных данных:

Первая строка: n k — количество точек и кластеров
Следующие n строк: x y c — координаты точки и номер её кластера (числа x, y - вещественные, c - целое число)
 

Формат выходных данных:

k строк: новые координаты центров (округлённые до 2 знаков)

Задача - 1. Назначение точек ближайшим центрам кластеров

Классификация по фиксированному правилу

Дан набор точек и k центров кластеров. Для каждой точки определите номер ближайшего центра (нумерация с 0). Расстояние между точками считается евклидовым. Если точка имеет одинаковое минимальное расстояние для двух и более кластеров, то ее необходимо определить к кластеру с наименьшим номером.

Формат входных данных:
Первая строка: n — количество точек (1 ≤ n ≤ 1000). Следующие n строк: xi yi — координаты i-й точки (целые числа, |xi|, |yi| ≤ 10000) Следующая строка: k — количество центров (1 ≤ k ≤ 10) Следующие k строк: cxi cyi — координаты j-го центра (целые числа, |cxi|, |cyi| ≤ 10000)

Формат выходных данных:
Одна строка с n числами — номера ближайших центров для каждой точки (0 ≤ номер < k)

Средний порог

Классификация по фиксированному правилу

Вычислите среднее арифметическое всех порогов (threshold) во внутренних узлах дерева.

Формат входных данных
JSON с деревом решений.

Формат выходных данных
Одно число — среднее значение порогов с точностью до 4 знаков после запятой.

Предсказание класса

Классификация по фиксированному правилу

Дано дерево решений и вектор признаков объекта. Определите, какой класс предскажет дерево.

Правило обхода
Если x[feature_index] <= threshold, идём в left_child
Иначе идём в right_child
Когда достигли листа, возвращаем его class


Формат входных данных
Первая строка: JSON с деревом. Вторая строка: признаки объекта через пробел.

Формат выходных данных
Одно число — предсказанный класс.

Упражнение 8. Поиск порога

Классификация по фиксированному правилу

В деревьях решений для работы с непрерывными признаками нужно найти  оптимальный порог разделения.

Порог — это число, которое делит данные  на две части: значения ≤ порога идут влево, значения > порога — вправо.

 

Пример:

Значения:  [1, 3, 5, 7, 9]
Метки:     [0, 0, 1, 1, 1]

Если выбрать порог = 4:
- Левая часть (≤ 4): значения [1, 3], метки [0, 0]
- Правая часть (> 4): значения [5, 7, 9], метки [1, 1, 1]

Это хорошее разделение! Левая часть чистая, правая чистая.


Алгоритм поиска лучшего порога:

1. Отсортируй уникальные значения признака
2. Для каждой пары соседних уникальных значений:
   - Порог = среднее этих двух значений
   - Раздели данные по порогу
   - Посчитай информационную выгоду
3. Верни порог с максимальной выгодой

Реализуйте алгоритм поиска лучшего порога.


Формат входных данных
- Первая строка: N — количество элементов
- Вторая строка: N вещественных чисел — значения признака
- Третья строка: N целых чисел (0 или 1) — метки классов

Формат выходных данных
- Первая строка: оптимальный порог (вещественное число, 4 знака после запятой)
- Вторая строка: информационная выгода (вещественное число, 4 знака после запятой)

Упражнение 7. Строим дерево решений

Классификация по фиксированному правилу

Теперь соберём все части вместе и создадим полноценное дерево решений!

Дерево решений — это алгоритм машинного обучения, который:
1. Находит лучший признак для разделения данных (по информационной выгоде)
2. Рекурсивно строит поддеревья для каждой части
3. Останавливается, когда данные "чистые" или достигнута максимальная глубина

Пример работы на данных OR (логическое ИЛИ):
X = [[0,0], [0,1], [1,0], [1,1]]
y = [0, 1, 1, 1]

Дерево может выглядеть так:
            [feature 0]
             /       \
        x[0]=0      x[0]=1
           /           \
      [feature 1]    лист(1)
       /      \
   лист(0)  лист(1)


Задача

Используйте класс TreeNode, реализованный в предыдущем задании.
Реализуйте класс DecisionTree с методами:

0.  __init__(self, max_depth=10)`
   Инициализирует дерево решений.
   
   Параметры:
   - max_depth: максимальная глубина дерева (по умолчанию 10)
   Что нужно сделать:
   - Сохранить max_depth как атрибут объекта
   - Создать атрибут self.root и установить его в None (корень дерева будет создан позже при вызове fit)

1. entropy(self, labels)
   Считает энтропию списка меток.
   H = -p₀·log₂(p₀) - p₁·log₂(p₁)
   Если список пустой, возвращает 0.
   Если p=0, соответствующее слагаемое = 0.

2. find_best_split(self, X, y)
   Находит лучший признак для разделения.
   - Для каждого признака считает информационную выгоду
   - Возвращает кортеж: (индекс_лучшего_признака, информационная_выгода)
   - Если все признаки дают нулевую выгоду, возвращает (0, 0)

3. build_tree(self, X, y, depth=0)
   Рекурсивно строит дерево. Возвращает TreeNode.
   
   Условия остановки (создать лист):
   - Все метки одинаковые → лист с этой меткой
   - Достигнута max_depth → лист с самым частым классом
   - Нет признаков (X пустой или X[0] пустой) → лист с самым частым классом
   - Лучшее разделение даёт нулевую выгоду → лист с самым частым классом
   
   Иначе:
   - Найти лучший признак
   - Разделить данные: левая часть где x[feature]=0, правая где x[feature]=1
   - Рекурсивно построить поддеревья
   - Вернуть TreeNode с feature_index и поддеревьями

4. fit(self, X, y) - берёт данные (примеры X и ответы y) и строит из них дерево решений, которое потом будет делать предсказания.

5. predict(self, X) - берёт новые данные и для каждого примера спрашивает у дерева: "Какой ответ?"
 

Класс TreeNode уже реализован в предыдущем задании. Скопируйте его здесь.
Примеры
Пример 1
X = [[0,0], [0,1], [1,0], [1,1]]
y = [0, 1, 1, 1]
tree = DecisionTree(max_depth=3)
tree.fit(X, y)
tree.predict(X)  # [0, 1, 1, 1]
Пример 2
X = [[0,0], [0,1], [1,0], [1,1]]
y = [0, 0, 0, 1]
tree = DecisionTree(max_depth=3)
tree.fit(X, y)
tree.predict(X)  # [0, 0, 0, 1]
Пример 3
X = [[0,0], [0,1], [1,0], [1,1]]
y = [1, 1, 1, 0]
tree = DecisionTree(max_depth=3)
tree.fit(X, y)
tree.predict(X)  # [1, 1, 1, 0]

Упражнение 4. Вычисляем информационную выгоду

Классификация по фиксированному правилу

Дан список меток (0 и 1) до разделения и два списка после разделения 
на левую и правую части. Вычисли информационную выгоду.

Формат входных данных
- Первая строка: N — количество элементов до разделения
- Вторая строка: N чисел (0 или 1) — метки до разделения
- Третья строка: L — количество элементов в левой части
- Четвёртая строка: L чисел (0 или 1) — метки левой части
- Пятая строка: R — количество элементов в правой части
- Шестая строка: R чисел (0 или 1) — метки правой части

Гарантируется, что L + R = N и L, R > 0.

Формат выходных данных
Одно число — информационная выгода, округлённое до 4 знаков после запятой.

E. Каракули Фурье

Классификация по фиксированному правилу

В этой задаче вам предстоит решить несложную задачу классификации: определить, содержит ли заданное изображение каракули Фурье.

Вам дан набор из 50 изображений, с id от 1 до 50. Вам также дан текстовый файл labels.txt, содержащий метки изображений с id от 1 до 20 - обучающей выборки.

Ваша задача - вывести результаты классификации изображений с id от 21 до 50 в том же формате.

Входные данные

Скачать изображения и тренировочные метки

Каждая строка файла labels.txt содержит единственное число 0 или 1. Строка номер \(i\) содержит метку изображения {i}.png (номера строк начинаются с 1). 1 означает, что на изображении действительно каракули Фурье, 0 - что нет.

Выходные данные

Выведите 30 строк, по одной строке на изображения от 21 до 50. Строка номер \(i\) должна содержать результат классификации изображения {i + 20}.png.

Полная оценка модели

Классификация по фиксированному правилу

Напиши программу для анализа качества классификации.

Входные данные:

Первая строка: n — количество примеров

Вторая строка: n чисел — реальные классы (0 или 1)

Третья строка: n чисел — предсказанные классы (0 или 1)

 

Выходные данные:

Выведи через пробел (округли до 2 знаков):

1. Accuracy

2. Precision

3. Recall

4. F1-score

 

Примечания:

- Если Precision или Recall считать невозможно (деление на 0), выведи 0.00

- Формат вывода: 0.87 0.92 0.85 0.88 (4 числа через пробел)

логрег-11. Классификация

Классификация по фиксированному правилу

По заданным параметрам: коэффициенту модели (w), свободному члену (b), температуре(t) и порогу принятия решения (p) определите и выведите на экран значения z, p, класс (1-болен/0-здоров/? - граница)

Формат входных данных
4 вещественных числа, каждое в отдельной строке:
w - коэффициент модели 
b - свободный член
t - температура пациента 
p - порог принятия решения

Формат выходных данных
Выведите три числа через пробел: z (вещественное число с точностью до сотых), p (вещественное число от 0 до 1 с точностью до сотых), класс (1-болен/0-здоров/? - граница)

Задача 1. Кто же болен?

Классификация по фиксированному правилу Линейная регрессия

Классификация пациентов по температуре

Дана модель логистической регрессии для предсказания вероятности болезни пациента на основе его температуры тела. Модель использует сигмоидную функцию:
 \(p =\frac{1}{1+e^{-(w \cdot t + b)}}\)
где t — температура пациента, w и b — параметры модели.​

Пациент считается больным, если вероятность болезни P≥0.5.​


Формат входных данных

  • В первой строке через пробел вводятся два вещественных числа: w и b — параметры модели

  • Во второй строке вводится целое число n — количество пациентов (1≤n≤100)

  • В следующих n строках вводятся вещественные числа — температуры пациентов


Формат выходных данных
Для каждого пациента, который относится к классу "болен", вывести в отдельной строке два числа через пробел: его температуру и вероятность болезни (тольцо целую часть вероятности - без округления). Строки выводить в порядке возрастания температуры пациента.