Поиск логистической потери/отрицательного логарифмического правдоподобия – классификация бинарной логистической регрессией

Вопрос или проблема

Я новичок в машинном обучении и науке о данных, и у меня возникают трудности с простой задачей. В моей задаче мне дана серия данных $X_i$, где $X_i = (x_{i1}, x_{i2})$, и у каждой точки данных есть метка $y_i$, где $y_i \in [-1, 1]$.

Моя первая задача заключается в следующем: дан вектор веса $w$, напишите функцию для расчета логистической потери (также известной как отрицательная логарифмическая правдоподобие) для данной выборки данных.

Мне также поставлена задача разработать функцию, которая вычисляет градиент логистической потери, оцениваемой при $w$, и обе эти функции будут использоваться совместно для выполнения градиентного спуска на данной выборке данных. Пока что меня строго интересует разработка первой функции.

Я понимаю логарифмическое правдоподобие как $\sum_{i=1}^n y_i \log p(x_i) + (1 − y_i) \log (1 − p(x_i))$ для бинарного классификатора, но не уверен, как написать функцию, которая вычисляет отрицательное логарифмическое правдоподобие. В частности, как мы вычисляем $p(x_i)$ и как в это вовлечен данный вектор веса $w$?

В вашем наборе данных две характеристики $x_{i1}$ и $x_{i2}$ для каждой точки данных, $i$. Таким образом, ваш вектор веса будет выглядеть как [$w_0$,$w_1$,$w_2$], где $w_0$ — это смещение, а следующие два элемента — веса, соответствующие двум характеристикам соответственно.

Следовательно, предсказанный результат будет
$p(x_i) = w_0 + (w_1*x_{i1}) + (w_2*x_{i2})$

Классовые метки -1 и 1. Следовательно, это задача бинарной классификации. Было бы неплохо иметь метки 0 и 1 для использования стандартной формулы для логарифмического правдоподобия. Поэтому подумайте о замене -1 на 0. Затем примените предложенную вами формулу для расчета логарифмического правдоподобия.

В противном случае, если вы не предпочитаете изменять метки и оставить их [-1,1] как таковые, измените формулу следующим образом:

$log{-}likelihood = \sum_{i=1}^n max(y,0)*\log p(x_i) + min(1-y,1)*(1-\log p(x_i))$

Первый член в формуле должен стать равным нулю, когда метка $y$ равна -1, а второй член должен стать равным нулю, когда метка $y$ равна 1.

После получения логарифмического правдоподобия просто измените его знак ($-1 * log{-}likelihood$), чтобы получить отрицательное логарифмическое правдоподобие.

Надеюсь, это поможет.

Ответ или решение

Чтобы найти логистическую потерю (также известную как отрицательная логарифмическая правдоподобие) в задаче бинарной логистической регрессии, важно понимать, как работает модель логистической регрессии, а также принципы вычисления логистической потери.

Введение в бинарную логистическую регрессию

В бинарной логистической регрессии используемая модель вычисляет вероятность принадлежности объекта к положительному классу. Для заданного веса $w$ и входных данных $X_i$ (где $Xi = (x{i1}, x_{i2})$) вероятности $p(x_i)$ определяются следующим образом:

$$
p(x_i) = \sigma(w \cdot X_i) = \frac{1}{1 + e^{-(w_0 + w1 x{i1} + w2 x{i2})}}
$$

Здесь $\sigma$ – это сигмоидная функция, а $w_0, w_1, w_2$ – это веса, которые включают смещение и коэффициенты для признаков соответственно.

Формула логарифмического правдоподобия

Ваша задача – написать функцию для вычисления логистической потери. Основная формула для логарифмического правдоподобия выглядит следующим образом:

$$
\text{log-likelihood} = \sum_{i=1}^n y_i \log p(x_i) + (1 – y_i) \log (1 – p(x_i))
$$

Однако, поскольку ваши метки $y_i$ принимают значения -1 и 1, для применения этой формулы мы можем сделать несколько изменений.

Изменение меток

Чтобы преобразовать метки в стандартный формат для бинарной классификации, вы можете заменить -1 на 0. Это приведет к следующей формуле:

$$
\text{log-likelihood} = \sum_{i=1}^n (y_i + 1) / 2 \cdot \log p(x_i) + (1 – (y_i + 1) / 2) \cdot \log (1 – p(x_i))
$$

Тем не менее, если вы решите сохранить метки как -1 и 1, формула логарифмического правдоподобия будет выглядеть так:

$$
\text{log-likelihood} = \sum_{i=1}^n \max(y_i, 0) \cdot \log p(x_i) + \min(1 – y_i, 1) \cdot \log(1 – p(x_i))
$$

Расчет логистической потери

Теперь, чтобы вычислить логистическую потерю, нужно просто взять отрицательное значение логарифмического правдоподобия:

$$
\text{negative log-likelihood} = -(\text{log-likelihood})
$$

Пример реализации функции

Далее, представим реализацию данной концепции на Python.

import numpy as np

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

def logistic_loss(X, y, w):
    n = len(y)
    p = sigmoid(X @ w)  # X @ w вычисляет матричное произведение

    # Преобразование y, если необходимо
    y_transformed = (y + 1) / 2

    # Вычисление логарифмического правдоподобия
    log_likelihood = np.sum(y_transformed * np.log(p) + (1 - y_transformed) * np.log(1 - p))

    # Возвращаем отрицательную величину логарифмического правдоподобия
    return -log_likelihood

# Пример использования:
X = np.array([[1, 2], [1, 0], [0, 1]])  # Массив с данными
y = np.array([-1, 1, -1])  # Метки классов
w = np.array([0.5, 1.0, -1.0])  # Вектор весов

loss = logistic_loss(X, y, w)
print(f"Logistic loss: {loss}")

Заключение

Таким образом, мы рассмотрели, как вычислить логистическую потерю для бинарной логистической регрессии, используя заданный вектор весов и входные данные. Эта модель и основанные на ней методы, такие как градиентный спуск, лежат в основе многих применений в области машинного обучения. Понимание этих основ поможет вам более уверенно двигаться дальше в вашем обучении и практической деятельности в области машинного обучения и науки о данных.

Оцените материал
Добавить комментарий

Капча загружается...