Все задачи
Легко Решено: 0 Процент решений: 0%

Предсказание логистической регрессией

Классифицируйте примеры как 0 или 1, пропуская взвешенную сумму через сигмоиду и сравнивая с порогом.

Чему вы научитесь

  • Превращать взвешенную сумму в вероятность
  • Классифицировать с порогом решения
  • Понять бинарные классификаторы

Условие

Логистическая регрессия — линейная модель для вопросов «да/нет». Для каждого примера она вычисляет вероятность и превращает её в класс:

  1. z = x₁×w₁ + … + xₙ×wₙ + bias
  2. p = 1 / (1 + e^(-z))
  3. класс = 1, если p ≥ threshold, иначе 0

Реализуйте logistic_predict(samples, weights, bias, threshold).

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

samples: по строке из n признаков на пример.

weights: n весов.

bias: смещение.

threshold: вероятность, нужная для предсказания класса 1 (строго между 0 и 1).

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

Верните предсказанный класс (0 или 1) каждого примера по порядку.

Ограничения

1 ≤ число примеров ≤ 1000, 1 ≤ n ≤ 50

-100 ≤ каждый признак, вес и смещение ≤ 100

0 < threshold < 1

Примеры

Пример 1
Ввод:
bias = -1.0
samples = [
    [2.0, 1.0],
    [0.0, 0.0],
    [-1.0, -3.0]
]
weights = [1.5, -0.5]
threshold = 0.5

Ожидаемый вывод:
expected = [1, 0, 0]
Ввод:
double bias = -1.0;
std::vector<std::vector<double>> samples = {
    {2.0, 1.0},
    {0.0, 0.0},
    {-1.0, -3.0}
};
std::vector<double> weights = {1.5, -0.5};
double threshold = 0.5;

Ожидаемый вывод:
std::vector<long long> expected = {1, 0, 0};
Ввод:
double bias = -1.0;
double[][] samples = new double[][] {
    new double[] {2.0, 1.0},
    new double[] {0.0, 0.0},
    new double[] {-1.0, -3.0}
};
double[] weights = new double[] {1.5, -0.5};
double threshold = 0.5;

Ожидаемый вывод:
long[] expected = new long[] {1, 0, 0};

Пояснение

Пример 1: z = 3 - 0.5 - 1 = 1.5, p ≈ 0.818 → 1. Пример 2: z = -1, p ≈ 0.269 → 0. Пример 3: z = -1.5 + 1.5 - 1 = -1, p ≈ 0.269 → 0. Результат: [1, 0, 0].

Пример 2
Ввод:
bias = -2.0
samples = [
    [1.0],
    [2.0],
    [3.0]
]
weights = [1.0]
threshold = 0.7

Ожидаемый вывод:
expected = [0, 0, 1]
Ввод:
double bias = -2.0;
std::vector<std::vector<double>> samples = {
    {1.0},
    {2.0},
    {3.0}
};
std::vector<double> weights = {1.0};
double threshold = 0.7;

Ожидаемый вывод:
std::vector<long long> expected = {0, 0, 1};
Ввод:
double bias = -2.0;
double[][] samples = new double[][] {
    new double[] {1.0},
    new double[] {2.0},
    new double[] {3.0}
};
double[] weights = new double[] {1.0};
double threshold = 0.7;

Ожидаемый вывод:
long[] expected = new long[] {0, 0, 1};

Пояснение

Вероятности равны σ(-1) ≈ 0.269, σ(0) = 0.5 и σ(1) ≈ 0.731. Порог 0.7 достигает только последняя, поэтому результат — [0, 0, 1].

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.