Функции потерь в 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