Оценка моделей Scikit-learn

scikit-learnBeginner
Практиковаться сейчас

Введение

После обучения модели машинного обучения крайне важно оценить ее производительность, чтобы понять, насколько хорошо она обобщается на новые, ранее не встречавшиеся данные. Scikit-learn, мощная библиотека Python для машинного обучения, предоставляет полный набор инструментов для оценки моделей в своем модуле sklearn.metrics.

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

  • Accuracy Score (Точность)
  • Confusion Matrix (Матрица ошибок)
  • Precision Score (Точность предсказания)
  • Recall Score (Полнота)
  • F1 Score (F1-мера)

К концу этой лабораторной работы вы будете уверенно использовать эти основные функции scikit-learn для оценки производительности ваших классификационных моделей.

Вычисление показателя точности (accuracy_score) с помощью accuracy_score из sklearn.metrics

На этом шаге мы рассчитаем точность предсказаний нашей модели. Точность (accuracy) является одной из самых простых метрик классификации. Она измеряет отношение правильно предсказанных экземпляров к общему количеству экземпляров.

Функция accuracy_score из sklearn.metrics вычисляет это значение. Она принимает истинные метки и предсказанные метки в качестве аргументов.

Сначала откройте файл evaluate.py в файловом проводнике слева. Файл уже содержит списки y_true и y_pred. Теперь добавьте следующий код в конец файла, чтобы импортировать функцию accuracy_score, рассчитать точность и вывести результат.

from sklearn.metrics import accuracy_score

## Calculate accuracy
accuracy = accuracy_score(y_true, y_pred)

print(f"Accuracy: {accuracy}")

Ваш полный файл evaluate.py теперь должен выглядеть следующим образом:

## In this lab, we will use a predefined set of true labels and predicted labels
## to understand different evaluation metrics.

## y_true represents the actual, ground truth labels for our data points.
## For a binary classification, 0 could mean 'negative' and 1 could mean 'positive'.
y_true = [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]

## y_pred represents the labels predicted by our hypothetical classification model.
y_pred = [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]

print("Setup complete. True and predicted labels are defined in evaluate.py.")
print(f"True labels:    {y_true}")
print(f"Predicted labels: {y_pred}")

from sklearn.metrics import accuracy_score

## Calculate accuracy
accuracy = accuracy_score(y_true, y_pred)

print(f"Accuracy: {accuracy}")

Теперь давайте запустим скрипт. Откройте терминал в вашей IDE и выполните следующую команду:

python3 evaluate.py

Вы должны увидеть следующий вывод, который включает показатель точности. Точность 0.8 означает, что 80% предсказаний были верными.

Setup complete. True and predicted labels are defined in evaluate.py.
True labels:    [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8

Генерация матрицы ошибок (confusion matrix) с помощью confusion_matrix из sklearn.metrics

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

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

  • Истинно отрицательные (TN - True Negatives): Модель правильно предсказала отрицательный класс.
  • Ложноположительные (FP - False Positives): Модель неправильно предсказала положительный класс.
  • Ложноотрицательные (FN - False Negatives): Модель неправильно предсказала отрицательный класс.
  • Истинно положительные (TP - True Positives): Модель правильно предсказала положительный класс.

Мы будем использовать функцию confusion_matrix из sklearn.metrics. Добавьте следующий код в конец вашего файла evaluate.py.

from sklearn.metrics import confusion_matrix

## Generate confusion matrix
cm = confusion_matrix(y_true, y_pred)

print("Confusion Matrix:")
print(cm)

Теперь снова запустите скрипт из терминала:

python3 evaluate.py

Вывод теперь будет включать матрицу ошибок.

Setup complete. True and predicted labels are defined in evaluate.py.
True labels:    [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
 [1 4]]

Эта матрица говорит нам:

  • TN = 4 (верхний левый угол)
  • FP = 1 (верхний правый угол)
  • FN = 1 (нижний левый угол)
  • TP = 4 (нижний правый угол)

Расчет показателя точности (precision score) с помощью precision_score из sklearn.metrics

На этом шаге мы рассчитаем показатель точности (precision). Precision отвечает на вопрос: "Из всех экземпляров, которые модель предсказала как положительные, какая доля на самом деле была положительной?" Это мера точности классификатора.

Precision рассчитывается как: Precision = Истинно положительные / (Истинно положительные + Ложноположительные)

Низкая точность указывает на большое количество ложноположительных срабатываний. Мы будем использовать функцию precision_score из sklearn.metrics.

Добавьте следующий код в конец вашего файла evaluate.py, чтобы рассчитать и вывести точность.

from sklearn.metrics import precision_score

## Calculate precision
precision = precision_score(y_true, y_pred)

print(f"Precision: {precision}")

Запустите скрипт из терминала:

python3 evaluate.py

Вы увидите, что показатель точности добавлен к выводу. Исходя из нашей матрицы ошибок (TP=4, FP=1), точность составляет 4 / (4 + 1) = 0.8.

Setup complete. True and predicted labels are defined in evaluate.py.
True labels:    [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
 [1 4]]
Precision: 0.8

Расчет показателя полноты (recall score) с помощью recall_score из sklearn.metrics

На этом шаге мы вычислим показатель полноты (recall). Полнота, также известная как чувствительность или истинно положительный коэффициент (true positive rate), отвечает на вопрос: "Из всех фактических положительных экземпляров, какую долю модель правильно определила?" Это мера полноты классификатора.

Полнота рассчитывается как: Recall = Истинно положительные / (Истинно положительные + Ложноотрицательные)

Низкая полнота указывает на большое количество ложноотрицательных срабатываний. Мы будем использовать функцию recall_score из sklearn.metrics.

Добавьте следующий код в конец вашего файла evaluate.py.

from sklearn.metrics import recall_score

## Calculate recall
recall = recall_score(y_true, y_pred)

print(f"Recall: {recall}")

Запустите скрипт из терминала:

python3 evaluate.py

Вывод теперь будет включать показатель полноты. Исходя из нашей матрицы ошибок (TP=4, FN=1), полнота составляет 4 / (4 + 1) = 0.8.

Setup complete. True and predicted labels are defined in evaluate.py.
True labels:    [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
 [1 4]]
Precision: 0.8
Recall: 0.8

Вычисление F1-меры (F1 score) с помощью f1_score из sklearn.metrics

На этом заключительном шаге мы рассчитаем показатель F1 (F1 score). Показатель F1 является гармоническим средним между точностью (precision) и полнотой (recall). Он стремится найти баланс между этими двумя метриками. В то время как точность фокусируется на минимизации ложноположительных срабатываний, а полнота — на минимизации ложноотрицательных, показатель F1 предоставляет единую метрику, учитывающую оба аспекта.

Показатель F1 рассчитывается как: F1 Score = 2 * (Precision * Recall) / (Precision + Recall)

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

Добавьте финальный фрагмент кода в ваш файл evaluate.py.

from sklearn.metrics import f1_score

## Calculate F1 score
f1 = f1_score(y_true, y_pred)

print(f"F1 Score: {f1}")

Запустите скрипт в последний раз из терминала:

python3 evaluate.py

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

Setup complete. True and predicted labels are defined in evaluate.py.
True labels:    [0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
Predicted labels: [0, 1, 0, 0, 1, 1, 0, 1, 0, 1]
Accuracy: 0.8
Confusion Matrix:
[[4 1]
 [1 4]]
Precision: 0.8
Recall: 0.8
F1 Score: 0.8

Резюме

Поздравляем с завершением лабораторной работы! Вы успешно научились оценивать классификационную модель, используя несколько ключевых метрик из библиотеки scikit-learn.

В этой лабораторной работе вы практиковались в:

  • Расчете точности (accuracy) с помощью accuracy_score для получения общего представления о производительности модели.
  • Генерации матрицы ошибок (confusion matrix) с помощью confusion_matrix для получения детального представления об истинно/ложно положительных и отрицательных срабатываниях.
  • Вычислении точности (precision) с помощью precision_score для измерения корректности модели.
  • Вычислении полноты (recall) с помощью recall_score для измерения полноты модели.
  • Расчете показателя F1 (F1 score) с помощью f1_score для нахождения баланса между точностью и полнотой.

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