Оцінювання та візуалізація моделей

End-to-End Machine Learning

Joshua Stapleton

Machine Learning Engineer

Точність

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

Звичайна точність:

  • Звичайна точність = кількість правильних відповідей / кількість відповідей
  • Звичайна точність може бути малокорисною

Приклад:

# дає ~99% точності для незбалансованого набору: 99 «позитивних» і 1 «негативний»
for patient_datapoint in heart_disease_dataset:
    model.prediction(patient_datapoint) = 'positive'
End-to-End Machine Learning

Матриця помилок

Істинні позитиви (TP)

  • Прогноз моделі = фактична класифікація = positive
  • Модель спрогнозувала хворобу серця, пацієнт мав хворобу серця

Хибні позитиви (FP)

  • Прогноз моделі = positive, фактична класифікація = negative
  • Модель спрогнозувала хворобу серця, пацієнт не мав хвороби серця

Хибні негативи (FN)

  • Прогноз моделі = negative, фактична класифікація = positive
  • Модель спрогнозувала відсутність хвороби серця, пацієнт мав хворобу серця

Істинні негативи (TN)

  • Прогноз моделі = фактична класифікація = negative
  • Модель спрогнозувала відсутність хвороби серця, пацієнт не мав хвороби серця
End-to-End Machine Learning

Збалансована точність

  • Краща метрика, ніж проста точність, для більшості моделей бінарної класифікації
  • Дає зважене середнє для обох класів
  • Balanced accuracy = (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
End-to-End Machine Learning

Використання матриці помилок

Матриця помилок

End-to-End Machine Learning

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

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

  • Процедура повторної вибірки
  • Забезпечує надійність результатів

 

k-fold крос-валідація

  • Параметр 'k' = кількість розбиттів набору даних
  • Для кожного запуску моделювання перевибирається новий train/test split

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

End-to-End Machine Learning

Крос-валідація: приклад

  • Просте застосування k-fold крос-валідації в 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')
End-to-End Machine Learning

Підбір гіперпараметрів

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

  • Загальний параметр моделі (не змінюється під час навчання)
  • Налаштовується для поліпшення якості моделі
# 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})")
End-to-End Machine Learning

Приклад підбору гіперпараметрів

Приклад результатів підбору гіперпараметрів:

 

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)
End-to-End Machine Learning

Давайте потренуємось!

End-to-End Machine Learning

Preparing Video For Download...