Введение
После обучения модели машинного обучения крайне важно оценить ее производительность, чтобы понять, насколько хорошо она обобщается на новые, ранее не встречавшиеся данные. 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для нахождения баланса между точностью и полнотой.
Эти метрики являются фундаментальными инструментами для любого специалиста по данным или инженера машинного обучения. Понимание их позволяет лучше диагностировать сильные и слабые стороны вашей модели и выбирать подходящую модель для вашей конкретной задачи.



