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

Оценка производительности модели машинного обучения имеет решающее значение. Чтобы оценить любой, во-первых, нам нужно определить нашу метрику. Существует множество различных показателей. Полезность каждого зависит от того, где он используется. Преимущество, которое он дает в проблеме, может обернуться недостатком при неправильном использовании и ввести нас в заблуждение.

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

Регрессия

  • Среднеквадратическая ошибка
  • Среднеквадратичная ошибка
  • Среднеквадратичная логарифмическая ошибка
  • Средняя абсолютная ошибка
  • Средняя абсолютная ошибка в процентах
  • Средняя псевдоошибка Хубера
  • R в квадрате
  • Скорректированный R в квадрате
  • Объясненная оценка дисперсии

Классификация

  • Матрица путаницы
  • Точность
  • Точность
  • Отзывать
  • Специфика
  • Отрицательное прогностическое значение
  • Мисс Ставка
  • Выпадать
  • Ложная скорость обнаружения
  • Частота ложных пропусков
  • Положительное отношение правдоподобия
  • Отрицательное отношение правдоподобия
  • Распространенность и коэффициент распространенности
  • Оценка F1
  • ОКР и АУК
  • Потеря журнала

Регрессия

Я буду использовать набор данных Boston Housing Dataset от sklearn в демонстрационных целях. Я построю модель линейной регрессии.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression

# dataframe
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['MEDV'] = boston.target

# split
X_train, X_test, y_train, y_test = train_test_split(df[boston.feature_names], df['MEDV'], 
                                                    test_size=0.2, random_state=11)

# model
model = LinearRegression()
model.fit(X_train, y_train)

# predictions
y_pred = model.predict(X_test)

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

  • Среднеквадратическая ошибка
  • Среднеквадратичная ошибка
  • Среднеквадратичная логарифмическая ошибка
  • Средняя абсолютная ошибка
  • Средняя абсолютная ошибка в процентах
  • Средняя псевдоошибка Хубера
  • R в квадрате
  • Скорректированный R в квадрате
  • Объясненная оценка дисперсии

MSE — среднеквадратическая ошибка

Мы измеряем среднеквадратичную разницу между прогнозируемыми значениями и фактическими значениями.

  • n: количество данных
  • yi: фактическое значение
  • y^i: прогнозируемое значение

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

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

from sklearn.metrics import mean_squared_error

# error
error = y_test - y_pred
squared_error = error**2

# MSE
mse = mean_squared_error(y_test, y_pred)
print("MSE:", mse)
#MSE: 26.944812249518126

Мы также можем построить график распределения ошибок.

import matplotlib.pyplot as plt

# plots of error distribution
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12,5))
ax1.hist(error, bins=25)
ax1.set_xlabel("Prediction Error")
ax1.set_ylabel("Count")
ax1.set_title("Error Distribution")
ax2.hist(squared_error, bins=25)
ax2.set_xlabel("Squared Error")
ax2.set_ylabel("Count")
ax2.set_title("Squared Error Distribution")
plt.show()

RMSE — среднеквадратическая ошибка

Это квадратный корень из MSE.

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

import numpy as np

rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print("RMSE:", rmse)
#RMSE: 5.190839262539163

RMSLE — Среднеквадратичная логарифмическая ошибка

Он похож на RMSE, но применяет логарифмическое преобразование к целевому признаку и прогнозируемым значениям перед вычислением ошибки.

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

from sklearn.metrics import mean_squared_log_error
rmsle = np.sqrt(mean_squared_log_error(y_test, y_pred))
print("RMSLE:", rmsle)
#RMSLE: 0.23939203402356873

MAE — Средняя абсолютная ошибка

Он измеряет среднее абсолютное расстояние между прогнозируемыми значениями и фактическими значениями.

Он не устраняет ошибки, поэтому не наказывает за большие ошибки. Таким образом, он менее чувствителен к выбросам, чем MSE или RMSE.

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

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

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

# the distribution of absolute errors
error = np.abs(y_test - y_pred)
plt.hist(error, bins=50)
plt.xlabel('Absolute Error')
plt.ylabel('Frequency')
plt.title('Distribution of Absolute Errors')
plt.show()

MAPE — Средняя абсолютная ошибка в процентах

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

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

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

Обратите внимание, что фактическое значение является знаменателем уравнения. Следовательно, если какое-либо фактическое значение равно нулю, у нас возникнут некоторые проблемы. Чтобы избежать этого, мы можем добавить небольшую константу (например, 0,00001) к знаменателю. Функция mean_absolute_percentage_error из sklearn автоматически избегает ошибки деления на ноль, добавляя 1e-8 к знаменателю.

from sklearn.metrics import mean_absolute_percentage_error
mape = mean_absolute_percentage_error(y_test, y_pred)
print('MAPE: %.3f' % mape)
#MAPE: 0.180

MPHE — средняя псевдоошибка Хубера

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

Он использует гладкую аппроксимацию функции потерь Хубера (тема другого поста).

δ — параметр, управляющий степенью сглаживания. Когда δ велико, функция приближается к среднеквадратической ошибке, а когда δ мало, она приближается к средней абсолютной ошибке.

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

delta = 1.5
mphe = np.mean(delta**2 * (np.sqrt(1 + ((y_test - y_pred)/delta)**2) - 1))
print("MPHE:", mphe)
#MPHE: 3.4066596967683727

R² — R в квадрате

Это статистическая мера, представляющая долю дисперсии зависимой переменной (целевой признак, y), которая объясняется независимыми переменными (X признаками) в регрессионной модели. .

R в квадрате — это сумма квадратов остатков, деленная на общую сумму квадратов.

На самом деле, что мы делаем в R-Square, так это сначала усредняем зависимую переменную и помещаем туда нашу подходящую линию. Таким образом, все наши оценки являются средним значением зависимой переменной. Это наша базовая линия, базовая ошибка. Мы суммируем ошибки в этой оценке для всех точек данных, мы называем это общей суммой квадратов, TTS.

Затем мы суммируем ошибку подобранной линии (линии регрессии) и называем ее остаточной суммой квадратов, RSS. Мы берем отношение RSS к TSS и вычитаем его из 1.

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

Квадрат R находится в диапазоне от 0 до 1, при этом более высокое значение указывает на лучшее соответствие модели данным. Кроме того, он может быть отрицательным, если модель работает хуже, чем горизонтальная линия, представляющая среднее значение зависимой переменной.

Поскольку он не указывает на точность прогнозов, его следует использовать в сочетании с другими показателями, такими как MSE, MAE и т. д.

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

А во-вторых, не учитывается количество независимых переменных в модели. Когда у вас много независимых переменных, значение R в квадрате обычно увеличивается, даже если дополнительные переменные на самом деле не улучшают соответствие модели.

# R-squared manually
r2_manual = 1 - (sum((y_test - y_pred)**2) / ((len(y_test) - 1) * np.var(y_test, ddof=1)))
# we use ddof=1, because we use sample variance, not population variance.

print("R-squared (manual):", r2_manual)
#R-squared (manual): 0.6859495577055563

# R-sqaured Sklearn
from sklearn.metrics import r2_score
r2_sklearn = r2_score(y_test, y_pred)
print("R-squared (sklearn):", r2_sklearn)
#R-squared (sklearn): 0.6859495577055563

Скорректированный R в квадрате

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

from sklearn.metrics import r2_score
n = X_train.shape[0]
p = X_train.shape[1]
r2 = r2_score(y_test, y_pred)
adj_r2 = 1 - ((1 - r2) * (n - 1) / (n - p - 1))
print("Adjusted R-squared:",adj_r2)
#Adjusted R-squared: 0.6754812096290749

EVS — показатель объясненной дисперсии

Он измеряет долю дисперсии зависимой переменной, которая объясняется моделью. Он варьируется от 0 до 1, где 1 — идеальное обстоятельство.

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

from sklearn.metrics import explained_variance_score
evs = explained_variance_score(y_test, y_pred)
print('Explained Variance Score: %.3f' % evs)
# Explained Variance Score: 0.689

Классификация

По сути, мы сталкиваемся с двумя типами проблем в классификации. Бинарная классификация и многоклассовая классификация. Для обоих типов задач давайте импортируем один набор данных из sklearn и обучаем модели.

from sklearn.datasets import load_breast_cancer, load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# BINARY -

# load breast cancer dataset
data = load_breast_cancer()
X, y = data.data, data.target
X_bi_train, X_bi_test, y_bi_train, y_bi_test = train_test_split(X, y, test_size=0.2, random_state=42)

# train logistic regression model
model_bi = LogisticRegression()
model_bi.fit(X_bi_train, y_bi_train)

# predictions
y_bi_pred = model_bi.predict(X_bi_test)

# MULTICLASS -

# load iris dataset
data = load_iris()
X, y = data.data, data.target
X_mul_train, X_mul_test, y_mul_train, y_mul_test = train_test_split(X, y, test_size=0.2, random_state=42)

# train logistic regression model
model_mul = LogisticRegression(multi_class="multinomial", solver="lbfgs")
model_mul.fit(X_mul_train, y_mul_train)

# predictions
y_mul_pred = model_mul.predict(X_mul_test)

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

  • Матрица путаницы
  • Точность
  • Точность
  • Отзывать
  • Специфика
  • Отрицательное прогностическое значение
  • Мисс Ставка
  • Выпадать
  • Ложная скорость обнаружения
  • Частота ложных пропусков
  • Положительное отношение правдоподобия
  • Отрицательное отношение правдоподобия
  • Распространенность и коэффициент распространенности
  • Оценка F1
  • ОКР и АУК
  • Потеря журнала

Матрица путаницы

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

  • TP — True Positive: количество правильных прогнозов, в которых фактический класс был положительным. Он был положительным, и моя модель говорит, что он положительный.
  • FP — ложноположительный результат: также называется ошибкой I типа. Количество неправильных прогнозов, где фактический класс был отрицательным. Он был отрицательным, а моя модель говорит, что он положительный.
  • FN — False Negative: также называется ошибка типа II. Количество неправильных прогнозов, где фактический класс был положительным. Он был положительным, а моя модель говорит, что он отрицательный.
  • TN — True Negative: количество правильных прогнозов, где фактический класс был отрицательным. Он был отрицательным, и моя модель говорит, что он отрицательный.

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

from sklearn.metrics import confusion_matrix

cm_bi = confusion_matrix(y_bi_test, y_bi_pred)
print("Confusion Matrix for Binary Clf:\n", cm_bi)

cm_mul = confusion_matrix(y_mul_test, y_mul_pred)
print("Confusion Matrix for Multi Clf:\n", cm_mul)

"""
Confusion Matrix for Binary Clf:
 [[39  4]
 [ 1 70]]

Confusion Matrix for Multi Clf:
 [[10  0  0]
 [ 0  9  0]
 [ 0  0 11]]
"""

Точность

Это отношение количества правильно классифицированных экземпляров к общему количеству экземпляров. Он измеряет правильность своих прогнозов.

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

from sklearn.metrics import accuracy_score

acc = accuracy_score(y_bi_test, y_bi_pred)
print("Accuracy Bi Clf:", acc)

acc = accuracy_score(y_mul_test, y_mul_pred)
print("Accuracy Multi Clf:", acc)

"""
Accuracy Bi Clf: 0.956140350877193
Accuracy Multi Clf: 1.0
"""

Точность

Он измеряет правильность положительно предсказанных экземпляров.

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

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

from sklearn.metrics import precision_score

precision = precision_score(y_bi_test, y_bi_pred)
print("Precision Bi Clf:", precision)
precision = precision_score(y_mul_test, y_mul_pred, average='weighted')
print("Precision Multi Clf:", precision)

"""
Precision Bi Clf: 0.9569049312470365
Precision Multi Clf: 1.0
"""

Параметр average указывает, как вычислить показатель точности для задач мультиклассовой классификации. Он может быть установлен как:

  • binary для бинарной классификации.
  • micro вычисляет среднюю точность по всем классам путем подсчета общего количества TP, FN и FP. Подходит для несбалансированных наборов данных.
  • macro вычисляет среднюю точность по всем классам, взяв среднее значение оценки точности для каждого отдельного класса. Не учитывает дисбаланс.
  • weighted вычисляет среднюю точность по всем классам, взяв средневзвешенное значение показателей точности для каждого отдельного класса. Вес пропорционален размеру.
  • Метод samples вычисляет показатель точности для каждого отдельного образца, а затем берет среднее значение по всем образцам. Это имеет смысл только для задач мультиклассовой классификации.

Напомним (чувствительность)

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

from sklearn.metrics import recall_score

recall = recall_score(y_bi_test, y_bi_pred)
print("Recall Bi Clf:", recall)
recall = recall_score(y_mul_test, y_mul_pred, average='macro')
print("Recall Multi Clf:", recall)

"""
Recall Bi Clf: 0.9859154929577465
Recall Multi Clf: 1.0
"""

Специфика

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

Это полезно, когда выявление отрицательных случаев важно. Дополняет чувствительность.

Мы не используем специфичность в задачах мультиклассовой классификации.

tn, fp, fn, tp = confusion_matrix(y_bi_test, y_bi_pred).ravel()
specificity = tn / (tn + fp)
print("Specificity Bi Clf: ", specificity)

"""
Specificity Bi Clf:  0.9069767441860465
"""

Отрицательное прогностическое значение

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

cm = confusion_matrix(y_bi_test, y_bi_pred)
tn, fp, fn, tp = cm.ravel()
npv = tn / (tn + fn)
print("Negative predictive value Bi Clf:", npv)

"""
Negative predictive value Bi Clf: 0.975
"""

Мисс Ставка

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

Частота промахов = ложноотрицательные результаты / (ложноотрицательные результаты + истинные положительные результаты)

cm = confusion_matrix(y_bi_test, y_bi_pred)
tn, fp, fn, tp = cm.ravel()
miss_rate = fn / (fn + tp)
print("Miss Rate Bi Clf:", miss_rate)

"""
Miss Rate Bi Clf: 0.014084507042253521
"""

Выпадать

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

Скорость выпадения = FP / (TN + FP)

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

cm = confusion_matrix(y_bi_test, y_bi_pred)
tn, fp, fn, tp = cm.ravel()
fall_out_rate = fp / (fp + tn)
print("Fall Out Rate Bi Clf:", fall_out_rate)

"""
Fall Out Rate Bi Clf: 0.09302325581395349
"""

Ложная скорость обнаружения

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

Частота ложных открытий = ложноположительные/(ложноположительные + истинноположительные)

Коэффициент ложного обнаружения = 1 — точность

Частота ложных пропусков

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

ЗА = ФН / (ФН + ТН)

FOR = 1 — отрицательное прогностическое значение

LR+ — положительное отношение правдоподобия

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

LR+ = истинно положительный показатель / ложноположительный показатель

LR- — Отрицательное отношение правдоподобия

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

LR- = ложноотрицательный показатель / истинно отрицательный показатель

Распространенность и порог распространенности

Распространенность относится к соотношению положительных образцов. Это априорная вероятность положительного результата до наблюдения за каким-либо тестом. Когда распространенность высока, легче добиться высокой полноты, но за счет низкой точности. Обратное тоже верно.

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

Это точка на кривой ROC, где распространенность положительного класса равна пороговому значению.

Оценка F1

Отзыв и точность дополняют друг друга. Это гармоническое среднее значение точности и полноты, которое объединяет обе метрики в одну оценку.

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

from sklearn.metrics import f1_score
f1_bi = f1_score(y_bi_test, y_bi_pred, average='weighted')
print("F1 Score Bi Clf: ", f1_bi)
f1_mul = f1_score(y_mul_test, y_mul_pred, average='weighted')
print("F1 Score Mul Clf: ", f1_mul)
"""
F1 Score Bi Clf:  0.9558014271241044
F1 Score Mul Clf:  1.0
"""

ОКР и АУК

Кривая рабочих характеристик приемника представляет собой графическое представление производительности модели бинарной классификации при изменении ее порога различения. Это график зависимости TPR (истинно положительных результатов) от FPR (ложноположительных результатов) для различных пороговых значений.

Предположим, что у нас есть данные 8 пациентов из больницы. Зеленые точки обозначают Covid-положительные, а красные - Covid-отрицательные. Наша модель оценивает вероятность того, что пациент болен.

В этот момент у нас есть вероятности, но мы стремимся получить бинарную классификацию этих вероятностей. Поэтому мы устанавливаем порог 0,5 и классифицируем всех пациентов с вероятностью заболевания более 0,5 как Covid-положительных, а всех пациентов с вероятностью ниже 0,5 классифицируем как Covid-отрицательных.

Мы можем заполнить матрицу путаницы в соответствии с пороговым значением 0,5.

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

Отзыв = TP / (TP + FN) = 0,75

Специфичность = TN / (TN + FP) = 0,5

Кроме того, мы можем изменять пороговые значения и пересчитывать метрики снова и снова.

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

На графике ROC оси y представляют частоту истинных положительных результатов (отзыв или чувствительность), а оси x представляют частоту ложных срабатываний (1 — специфичность). Для каждого порогового значения мы вычисляем TPR и FPR и наносим точки на ROC-кривую.

График ROC суммирует все матрицы путаницы для каждого порогового значения.

Площадь под кривой (AUC) — это площадь под кривой ROC :). AUC позволяет легко сравнивать ROC-кривые. Чем больше AUC, тем лучше.

from sklearn.metrics import plot_roc_curve

plot_roc_curve(model_bi, X_bi_test, y_bi_test)
plt.show()

# AUC
from sklearn.metrics import roc_auc_score

auc = roc_auc_score(y_bi_test, y_bi_pred)
print('AUC:', auc)
#AUC: 0.9464461185718965

Лог-потери

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

log-loss = -(y*log(p) + (1-y)*log(1-p))

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

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

from sklearn.metrics import log_loss
loss = log_loss(y_bi_test, y_bi_pred)
print("Log Loss: ", loss)
#Log Loss:  1.5148866698620551

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

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

Заключение

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

Читать далее















Источники

https://www.freecodecamp.org/news/machine-learning-mean-squared-error-regression-line-c7dde9a26b93/

https://www.simplilearn.com/tutorials/statistics-tutorial/mean-squared-error

https://www.codingprof.com/3-ways-to-calculate-the-mean-absolute-error-mae-in-r-examples/

https://www.forex.academy/how-to-measure-your-trading-strategy-with-r-square/

https://vitalflux.com/r-squared-explained-machine-learning/

https://medium.com/analytics-vidhya/adjusted-r-squared-formula-explanation-1ce033e25699

https://www.oreilly.com/library/view/machine-learning-algorithms/9781789347999/49c4b96f-a567-4513-8e91-9f41b0b4dab0.xhtml

https://lindevs.com/calculate-huber-loss-using-tensorflow-2

https://medium.com/nerd-for-tech/what-loss-function-to-use-for-machine-learning-project-b5c5bd4a151e

https://en.wikipedia.org/wiki/Confusion_matrix

https://www.mydatamodels.com/learn/how-good-is-your-machine-learning-algorithm/

https://en.wikipedia.org/wiki/Sensitivity_and_specificity#Prevalence_threshold

https://en.wikipedia.org/wiki/F-оценка

https://www.youtube.com/watch?v=4jRBRDbJemM

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.