Оценка и визуализация модели

Сквозное машинное обучение

Joshua Stapleton

Machine Learning Engineer

Точность

  • Правильные метрики точности необходимы для надёжной оценки модели
  • Результаты легко интерпретировать неверно

Стандартная точность:

  • Стандартная точность = число верных ответов / число ответов
  • Стандартная точность может быть бесполезна

Пример:

# achieves ~99% accuracy for imbalanced dataset of 99 positive and 1 negative
for patient_datapoint in heart_disease_dataset:
    model.prediction(patient_datapoint) = 'positive'
Сквозное машинное обучение

Матрица ошибок

Истинно положительные (TP)

  • Предсказание модели = реальный класс = положительный
  • Модель предсказала болезнь сердца — у пациента она есть

Ложно положительные (FP)

  • Предсказание = положительный, реальный класс = отрицательный
  • Модель предсказала болезнь сердца — у пациента её нет

Ложно отрицательные (FN)

  • Предсказание = отрицательный, реальный класс = положительный
  • Модель не предсказала болезнь сердца — у пациента она есть

Истинно отрицательные (TN)

  • Предсказание модели = реальный класс = отрицательный
  • Модель не предсказала болезнь сердца — у пациента её нет
Сквозное машинное обучение

Сбалансированная точность

  • Лучше стандартной точности для большинства задач бинарной классификации
  • Даёт взвешенное среднее по обоим классам
  • Сбалансированная точность = (TP + TN) / 2
from sklearn.metrics import balanced_accuracy_score

# Assume y_test is the true labels and y_pred are the predicted labels
y_pred = model.predict(X_test)
bal_accuracy = balanced_accuracy_score(y_test, y_pred)
print(f"Balanced Accuracy: {bal_accuracy:.2f}")
Balanced Accuracy: 0.85
Сквозное машинное обучение

Применение матрицы ошибок

Матрица ошибок

Сквозное машинное обучение

Кросс-валидация

Кросс-валидация

  • Процедура повторной выборки
  • Обеспечивает надёжность результатов

 

k-кратная кросс-валидация

  • Параметр «k» = число разбиений набора данных
  • Новое разбиение на обучающую/тестовую выборку при каждом запуске

Схема кросс-валидации

Сквозное машинное обучение

Применение кросс-валидации

  • Простая реализация k-кратной кросс-валидации с помощью sklearn
  • Оценка не зависит от типа модели

Использование:

from sklearn.model_selection import cross_val_score, KFold

# split the data into 10 equal parts
kfold = KFold(n_splits=5, shuffle=True, random_state=42)

# get the cross validation accuracy for a given model cv_results = cross_val_score(model, heart_disease_X, heart_disease_y, cv=kfold, scoring='balanced_accuracy')
Сквозное машинное обучение

Подбор гиперпараметров

Гиперпараметр:

  • Глобальный параметр модели (не меняется в процессе обучения)
  • Настраивается для улучшения качества модели
# Hyperparameters to test
C_values = [0.001, 0.01, 0.1, 1, 10, 100, 1000]

# Manually iterate over the hyperparameters
for C in C_values:
    model = LogisticRegression(max_iter=200, C=C)
    model.fit(X_train, y_train)
    accuracy = cross_val_score(model, X, y, cv=kfold, scoring='balanced_accuracy')
    print(f"C = {C}: Bal Acc: {accuracy.mean():.4f} (+/- {accuracy.std():.4f})")
Сквозное машинное обучение

Пример подбора гиперпараметров

Пример вывода при подборе гиперпараметров:

 

C = 0.001: Bal Acc: 0.6200 (+/- 0.0215)
C = 0.01: Bal Acc: 0.7325 (+/- 0.0234)
C = 0.1: Bal Acc: 0.7923 (+/- 0.0202)
C = 1: Bal Acc: 0.8050 (+/- 0.0191)
C = 10: Bal Acc: 0.8034 (+/- 0.0185)
C = 100: Bal Acc: 0.8021 (+/- 0.0187)
C = 1000: Bal Acc: 0.8017 (+/- 0.0188)
Сквозное машинное обучение

Давайте потренируемся!

Сквозное машинное обучение

Preparing Video For Download...