Функции потерь в Python — простая реализация

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

Существует несколько способов вычислить эту разницу. В этом материале мы рассмотрим некоторые из наиболее распространенных функций потерь.

В этом уроке будут рассмотрены следующие четыре функции потерь.

Из этих четырех функций потерь первые три применяются к модели классификации.

Реализация функций потерь в Python

1. Среднеквадратическая ошибка (MSE) — Mean Squared Error

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

Реализация MSE на языке Python выглядит следующим образом:

import numpy as np

def mean_squared_error(act, pred):
   # Вычисляем разницу между предсказанными и фактическими значениями
   diff = pred - act
   
   # Возводим каждую разницу в квадрат
   differences_squared = diff ** 2
   
   # Вычисляем среднее значение квадратов разниц
   mean_diff = differences_squared.mean()
   
   # Возвращаем среднюю квадратичную ошибку
   return mean_diff

# Массив фактических значений
act = np.array([1.1,2,1.7])

# Массив предсказанных значений
pred = np.array([1,1.7,1.5])

# Выводим среднюю квадратичную ошибку между фактическими и предсказанными значениями
print(mean_squared_error(act, pred))

Вы также можете использовать mean_squared_error из sklearn для расчета MSE. Вот как работает функция:

from sklearn.metrics import mean_squared_error
import numpy as np

# Массив фактических значений
act = np.array([1.1, 2, 1.7])

# Массив предсказанных значений
pred = np.array([1, 1.7, 1.5])

# Вычисляем среднюю квадратичную ошибку между фактическими и предсказанными значениями
mse = mean_squared_error(act, pred)

# Выводим среднюю квадратичную ошибку
print(mse)

2. Корень средней квадратической ошибки (RMSE) — Root Mean Squared Error

Стандартное отклонение (RMSD) или среднеквадратичная ошибка (RMSE) - это часто используемая мера разницы между значением (выборочным или общим), предсказанным моделью или оценщиком, и наблюдаемым значением. и наблюдаемыми значениями, или квадратный корень из разницы между ними по второму моменту выборки, или среднеквадратичное значение этих разниц. Эти отклонения называются остатками при расчете по выборке данных, используемых для оценки, и ошибками (или ошибками предсказания) при расчете вне выборки. RMSD используется как единая мера предсказательной силы, включающая величину ошибки предсказания в разных точках данных. RMSD зависит от масштаба и поэтому сравнивает точность ошибок предсказания различных моделей для данного набора данных, а не между наборами данных.

RMSD всегда неотрицателен, при этом значение нуля (что редко достигается на практике) указывает на идеальное согласие с данными. В целом, низкий RMSD лучше, чем высокий RMSD. Однако эта мера зависит от используемой числовой шкалы, что делает невозможным сравнение между различными типами данных.

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

Среднеквадратическая ошибка (RMSE) рассчитывается как квадратный корень из среднеквадратичной ошибки. Математически мы можем представить это следующим образом:

Реализация Python для RMSE выглядит следующим образом:

import numpy as np

def root_mean_squared_error(act, pred):
   # Вычисляем разницу между предсказанными и фактическими значениями
   diff = pred - act
   
   # Возводим каждую разницу в квадрат
   differences_squared = diff ** 2
   
   # Вычисляем среднее значение квадратов разниц
   mean_diff = differences_squared.mean()
   
   # Вычисляем квадратный корень из среднего значения квадратов разниц
   rmse_val = np.sqrt(mean_diff)
   
   # Возвращаем корень средней квадратичной ошибки
   return rmse_val

# Массив фактических значений
act = np.array([1.1, 2, 1.7])

# Массив предсказанных значений
pred = np.array([1, 1.7, 1.5])

# Выводим корень средней квадратичной ошибки между фактическими и предсказанными значениями
print(root_mean_squared_error(act, pred))

Вы также можете использовать mean_squared_error из sklearn для расчета RMSE. Давайте посмотрим, как реализовать RMSE, используя ту же функцию:

from sklearn.metrics import mean_squared_error
import numpy as np

# Массив фактических значений
act = np.array([1.1, 2, 1.7])

# Массив предсказанных значений
pred = np.array([1, 1.7, 1.5])

# Вычисляем корень средней квадратичной ошибки (RMSE) между фактическими и предсказанными значениями
# Если параметр squared установлен в False, функция возвращает значение RMSE
rmse = mean_squared_error(act, pred, squared=False)

# Выводим корень средней квадратичной ошибки
print(rmse)

Если для параметра squared установлено значение True, функция возвращает значение MSE. Если установлено значение False, функция возвращает значение RMSE.

3. Средняя абсолютная ошибка (MAE) — Mean Absolute Error

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

Реализация Python для MAE выглядит следующим образом:

import numpy as np

def mean_absolute_error(act, pred):
    # Вычисляем разницу между предсказанными и фактическими значениями
    diff = pred - act
    
    # Вычисляем абсолютные значения разниц
    abs_diff = np.absolute(diff)
    
    # Вычисляем среднее значение абсолютных разниц
    mean_diff = abs_diff.mean()
    
    # Возвращаем среднюю абсолютную ошибку
    return mean_diff

# Массив фактических значений
act = np.array([1.1, 2, 1.7])

# Массив предсказанных значений
pred = np.array([1, 1.7, 1.5])

# Вычисляем и выводим среднюю абсолютную ошибку между фактическими и предсказанными значениями
print(mean_absolute_error(act, pred))

Вы также можете использовать mean_absolute_error из sklearn для расчета MAE.

from sklearn.metrics import mean_absolute_error
import numpy as np

# Массив фактических значений
act = np.array([1.1, 2, 1.7])

# Массив предсказанных значений
pred = np.array([1, 1.7, 1.5])

# Вычисляем среднюю абсолютную ошибку между фактическими и предсказанными значениями
mae = mean_absolute_error(act, pred)

# Выводим среднюю абсолютную ошибку
print(mae)

4. Функция кросс-энтропийной потери в Python

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

Давайте посмотрим, как вычислить ошибку в случае проблемы бинарной классификации.

Давайте рассмотрим проблему классификации, когда модель пытается провести классификацию между собакой и кошкой.

Код Python для поиска ошибки приведен ниже.

from sklearn.metrics import log_loss

# Массив фактических классов
true_classes = ["Dog", "Cat", "Cat", "Dog"]

# Массив предсказанных вероятностей для каждого класса
predicted_probabilities = [[.1, .9], [.9, .1], [.8, .2], [.35, .65]]

# Вычисляем логарифмическую потерю (log loss) между фактическими классами и предсказанными вероятностями
log_loss_value = log_loss(true_classes, predicted_probabilities)

# Выводим значение логарифмической потери
print(log_loss_value)

Мы используем метод log_loss из sklearn.

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

Вероятности представлены в следующем формате:

[P(dog), P(cat)]

Заключение

Это руководство было посвящено функциям потерь в Python. Мы рассмотрели различные функции потерь как для задач регрессии, так и для задач классификации.

Last updated