Информатика

15 724 задачивместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

Ты — data scientist в музыкальной компании! Твоя задача — понять, станут ли новые песни хитами, ещё до их релиза. У тебя есть реальный датасет из Spotify с характеристиками тысяч песен.

Сможешь ли ты создать модель, которая предскажет, попадут ли треки в топ? 

В датасете есть интересные музыкальные характеристики:

  • danceability — танцевальность (0.0-1.0) — насколько под это можно двигаться

  • energy — энергичность (0.0-1.0) — насколько трек агрессивный и быстрый

  • loudness — громкость (в децибелах, обычно от -60 до 0)

  • speechiness — разговорность (0.0-1.0) — сколько в треке слов (рэп будет высоким)

  • acousticness — акустичность (0.0-1.0) — есть ли живые инструменты

  • instrumentalness — инструментальность (0.0-1.0) — есть ли вокал (чем выше, тем меньше слов)

  • liveness — живость (0.0-1.0) — записано ли вживую с публикой

  • valence — позитивность (0.0-1.0) — насколько трек весёлый (грустный vs радостный)

  • tempo — темп (удары в минуту, обычно 50-200)

  • duration_ms — длительность в миллисекундах

  • target — хит (1) или нет (0)

Напиши программу, которая:

  1. Загружает датасет из файла CSV

  2. Готовит данные (выбирает нужные признаки и делит на train/test)

  3. Обучает модель логистической регрессии

  4. Запрашивает у пользователя:

    • Количество треков для проверки

    • Все характеристики каждого трека (10 параметров)

  5. Предсказывает для каждого введённого трека:

    • Станет ли он хитом (yes/no)

    • Вероятность успеха в процентах

 

Вы уже научились вычислять сигмоиду и log-loss. Теперь пришло время собрать всё вместе и написать полноценный градиентный спуск для логистической регрессии!

Ваша задача — написать программу, которая находит оптимальные параметры w и b для логистической регрессии с помощью градиентного спуска.

Что нужно сделать:

  1. Начать с начальных значений w = 0 и b = 0

  2. На каждой итерации (эпохе):

    • Вычислить предсказания: z=w⋅X+b, затем p=σ(z)

    • Вычислить градиенты по формулам: 
      \[ \frac{\partial \text{Loss}}{\partial w} = \frac{1}{n} \sum_{i=1}^{n} (p_i - y_i) \cdot x_i \]
      \[ \frac{\partial \text{Loss}}{\partial b} = \frac{1}{n} \sum_{i=1}^{n} (p_i - y_i) \]

      Обновить параметры:
      \[ w = w - \alpha \cdot \frac{\partial \text{Loss}}{\partial w} \]
      \[ b = b - \alpha \cdot \frac{\partial \text{Loss}}{\partial b} \]

  3. Повторить указанное количество итераций

  4. Вернуть найденные параметры и историю ошибок

Параметры алгоритма:

  • Скорость обучения (alpha): задаётся во входных данных
  • Количество итераций (epochs): задаётся во входных данных
  • Для вычисления вероятности также используйте  y_pred = np.clip(y_pred, 1e-15, 1 - 1e-15)

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

Первая строка: признаки (вещественные числа, разделённые пробелом)
Вторая строка: правильные классы (0 или 1, разделённые пробелом)
Третья строка: скорость обучения (вещественное число) и количество итераций (целое число), разделённые пробелом


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

Выведите три числа, каждое в отдельной строке:
Первая строка: найденное значение w (с точностью до 4 знаков после запятой)
Вторая строка: найденное значение b (с точностью до 4 знаков после запятой)
Третья строка: финальное значение log-loss (с точностью до 4 знаков после запятой)

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

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

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


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

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

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

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


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

Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = n при n < 20;
F(n) = (n – 6) · F(n – 7), если  n>= 20.
Вычислите значение выражения (F(47872) –  290·F(47865)) / F(47858).
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = n при n  2025;
F(n) = 2n + F(n + 2), если n > 2025.
Вычислите значение выражения F(82) –  F(81).
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = n , если n < 5;
F(n) = 2n · F(n – 4) , если n ≥ 5.
Чему равно значение выражения (F(13766) – 9·F(13762)) / F(13758)?
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = F(n / 2) + 5 , если n чётное;
F(n) = F(n / 5) + 2 , если n нечётное и делится на 5;
F(n) = 0, если n нечётное и не делится на 5. 
Сколько различных значений принимает функция F(n) на отрезке [1; 1000000]?
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = F(n / 2) + 5 , если n чётное;
F(n) = F(n / 5) + 2 , если n нечётное и делится на 5;
F(n) = 0, если n нечётное и не делится на 5. 
Определите минимальное значение n, для которого F(n) = 130.
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = F(n / 2) + 5 , если n чётное;
F(n) = F(n / 3) + 4 , если n нечётное и делится на 3;
F(n) = 0, если n нечётное и не делится на 3. 
Определите минимальное значение n, для которого F(n) = 108.
Алгоритм вычисления значения функции F(n), где n – натуральное число, задан следующими соотношениями:
F(n) = F(n / 2) + 3 , если n чётное;
F(n) = F(n / 3) + 2 , если n нечётное и делится на 3;
F(n) = 0, если n нечётное и не делится на 3. 
Определите минимальное значение n, для которого F(n) = 65.
Поделиться
Класснуть