Функции потерь 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))
0.04666666666666667
Вы также можете использовать 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)
0.04666666666666667
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))
0.21602468994692867
Вы также можете использовать 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)
0.21602468994692867
Если для параметра 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))
0.20000000000000004
Вы также можете использовать 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)
0.20000000000000004
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)
0.21616187468057912
Мы используем метод log_loss из sklearn.
Первый аргумент в вызове функции — это список правильных меток классов для каждого входа. Второй аргумент — это список вероятностей, предсказанных моделью.
Вероятности представлены в следующем формате:
[P(dog), P(cat)]
Заключение
Это руководство было посвящено функциям потерь в Python. Мы рассмотрели различные функции потерь как для задач регрессии, так и для задач классификации.