Вы работаете с простым датасетом, где нужно предсказать класс (0 или 1) по одному признаку. Например, предсказываем, болен ли человек (1) или здоров (0) по температуре тела.
У вас есть:
Вам нужно найти лучшие значения коэффициента w и свободного члена b методом полного перебора, чтобы минимизировать log-loss.
Алгоритм
- Переберите все возможные значения
w от -2 до 2 с шагом 0.1
- Переберите все возможные значения
b от -10 до 10 с шагом 0.5
- Для каждой пары (
w, b):
- Посчитайте линейную комбинацию: z=w⋅X+b
- Примените сигмоиду: p=σ(z)
- Посчитайте log-loss
- Выберите пару (
w, b) с минимальным log-loss
Важные детали
- Используйте функцию сигмоиды
- Для расчёта log-loss используйте формулу:
- \(\text{Log-Loss} = -\frac{1}{n}\sum_{i=1}^{n} \left(y_i \cdot \log(p_i) + (1 - y_i) \cdot \log(1 - p_i)\right)\)
- Чтобы избежать ошибок с логарифмом нуля, ограничьте вероятности:
p = np.clip(p, 1e-15, 1 - 1e-15)
- Bспользуйте
np.arrange() для работы с вещественным шагов, вместо range()
Формат входных данных
На вход подаётся:
- в первой строке признаки (например, температуры): вещественные числа, разделенные одним пробелом
- во второй строке правильные классы для каждого признака соответственно (0 или 1).
Формат выходных данных
Выведите три числа, каждое в отдельной строке:
-
best_w — лучшее значение коэффициента (float, с точностью до сотых)
-
best_b — лучшее значение свободного члена (float, с точностью до сотых)
-
min_loss — минимальное значение log-loss (float, с точностью 4 знака после запятой)
Примеры
| № | Входные данные | Выходные данные |
|
1
|
36.6 37.2 38.5 39.1 36.8
0 0 1 1 0
|
0.20
-8.00
0.5854
|