CNTK - Model klasyfikacji

Ten rozdział pomoże ci zrozumieć, jak mierzyć wydajność modelu klasyfikacyjnego w CNTK. Zacznijmy od macierzy zamieszania.

Macierz zamieszania

Macierz nieporozumień - tabela z przewidywanym wynikiem w porównaniu z oczekiwanym wynikiem jest najłatwiejszym sposobem pomiaru wydajności problemu klasyfikacji, gdzie wynik może obejmować dwa lub więcej typów klas.

Aby zrozumieć, jak to działa, stworzymy macierz nieporozumień dla binarnego modelu klasyfikacji, który przewiduje, czy transakcja kartą kredytową była normalna, czy oszustwo. Jest to pokazane w następujący sposób -

Rzeczywiste oszustwo Rzeczywiste normalne

Predicted fraud

Prawdziwie pozytywne

Fałszywie pozytywny

Predicted normal

Fałszywie negatywny

Prawdziwie negatywny

Jak widać, powyższa przykładowa macierz pomyłek zawiera 2 kolumny, jedną dla oszustwa klasowego, a drugą dla klasy normalnej. W ten sam sposób mamy 2 wiersze, jeden jest dodawany dla oszustwa klasowego, a drugi dla klasy normalnej. Poniżej znajduje się wyjaśnienie terminów związanych z macierzą nieporozumień -

  • True Positives - Gdy zarówno aktualna klasa, jak i przewidywana klasa punktu danych to 1.

  • True Negatives - Gdy zarówno aktualna klasa, jak i przewidywana klasa punktu danych to 0.

  • False Positives - Gdy aktualna klasa punktu danych to 0, a przewidywana klasa punktu danych to 1.

  • False Negatives - Gdy aktualna klasa punktu danych to 1, a przewidywana klasa punktu danych to 0.

Zobaczmy, jak możemy obliczyć liczbę różnych rzeczy z macierzy nieporozumień -

  • Accuracy- Jest to liczba prawidłowych prognoz dokonanych przez nasz model klasyfikacji ML. Można to obliczyć za pomocą następującego wzoru -

  • Precision- Mówi nam, ile próbek zostało poprawnie przewidzianych ze wszystkich próbek, które przewidywaliśmy. Można to obliczyć za pomocą następującego wzoru -

  • Recall or Sensitivity- Przypomnijmy to liczba pozytywów zwróconych przez nasz model klasyfikacji ML. Innymi słowy, mówi nam, ile przypadków oszustw w zbiorze danych zostało faktycznie wykrytych przez model. Można to obliczyć za pomocą następującego wzoru -

  • Specificity- W przeciwieństwie do przypomnienia, podaje liczbę negatywów zwróconych przez nasz model klasyfikacji ML. Można to obliczyć za pomocą następującego wzoru -

Miara F.

Możemy użyć miary F jako alternatywy dla macierzy zamieszania. Głównym powodem tego jest to, że nie możemy jednocześnie maksymalizować Przypominania i Precyzji. Istnieje bardzo silny związek między tymi metrykami i można to zrozumieć na podstawie następującego przykładu:

Załóżmy, że chcemy użyć modelu DL do sklasyfikowania próbek komórek jako nowotworowych lub normalnych. Tutaj, aby osiągnąć maksymalną precyzję, musimy zmniejszyć liczbę prognoz do 1. Chociaż może to dać nam około 100% precyzji, ale zapamiętywanie będzie naprawdę niskie.

Z drugiej strony, jeśli chcemy osiągnąć maksymalne zapamiętanie, musimy dokonać jak największej liczby prognoz. Chociaż może to dać nam około 100 procent przywołania, ale precyzja będzie naprawdę niska.

W praktyce musimy znaleźć sposób na balansowanie między precyzją a pamięcią. Metryka F-miara pozwala nam to zrobić, ponieważ wyraża średnią harmoniczną między precyzją a przywołaniem.

Formuła ta nazywana jest miarą F1, gdzie dodatkowy składnik o nazwie B jest ustawiany na 1, aby uzyskać równy stosunek dokładności i powtarzalności. Aby podkreślić przywołanie, możemy ustawić współczynnik B na 2. Z drugiej strony, aby podkreślić precyzję, możemy ustawić współczynnik B na 0,5.

Używanie CNTK do pomiaru wydajności klasyfikacji

W poprzedniej sekcji stworzyliśmy model klasyfikacji na podstawie zbioru danych kwiatu tęczówki. Tutaj będziemy mierzyć jego wydajność za pomocą macierzy pomyłki i miernika F.

Tworzenie macierzy zamieszania

Stworzyliśmy już model, więc możemy rozpocząć proces walidacji, który obejmuje confusion matrix, na takim samym. Najpierw utworzymy macierz pomyłki za pomocąconfusion_matrix funkcja z scikit-learn. W tym celu potrzebujemy prawdziwych etykiet dla naszych próbek testowych i przewidywanych etykiet dla tych samych próbek testowych.

Obliczmy macierz zamieszania, używając następującego kodu Pythona -

from sklearn.metrics import confusion_matrix
y_true = np.argmax(y_test, axis=1)
y_pred = np.argmax(z(X_test), axis=1)
matrix = confusion_matrix(y_true=y_true, y_pred=y_pred)
print(matrix)

Wynik

[[10 0 0]
[ 0 1 9]
[ 0 0 10]]

Możemy również użyć funkcji Heatmap do wizualizacji macierzy pomyłki w następujący sposób -

import seaborn as sns
import matplotlib.pyplot as plt
g = sns.heatmap(matrix,
     annot=True,
     xticklabels=label_encoder.classes_.tolist(),
     yticklabels=label_encoder.classes_.tolist(),
     cmap='Blues')
g.set_yticklabels(g.get_yticklabels(), rotation=0)
plt.show()

Powinniśmy również mieć jeden numer wydajności, którego możemy użyć do porównania modelu. W tym celu musimy obliczyć błąd klasyfikacji przy użyciuclassification_error funkcji z pakietu metryk w CNTK, tak jak zostało to zrobione podczas tworzenia modelu klasyfikacji.

Teraz, aby obliczyć błąd klasyfikacji, wykonaj metodę testową na funkcji straty z zestawem danych. Następnie CNTK weźmie próbki, które dostarczyliśmy jako dane wejściowe dla tej funkcji i dokona prognozy na podstawie cech wejściowych X_test.

loss.test([X_test, y_test])

Wynik

{'metric': 0.36666666666, 'samples': 30}

Wdrażanie środków F.

W celu realizacji F-Measures, CNTK zawiera również funkcję zwaną fmeasures. Możemy skorzystać z tej funkcji podczas treningu NN poprzez wymianę komórkicntk.metrics.classification_error, z wezwaniem do cntk.losses.fmeasure podczas definiowania funkcji fabrycznej kryterium w następujący sposób -

import cntk
@cntk.Function
def criterion_factory(output, target):
   loss = cntk.losses.cross_entropy_with_softmax(output, target)
metric = cntk.losses.fmeasure(output, target)
   return loss, metric

Po użyciu funkcji cntk.losses.fmeasure otrzymamy inne dane wyjściowe dla loss.test wywołanie metody podane w następujący sposób -

loss.test([X_test, y_test])

Wynik

{'metric': 0.83101488749, 'samples': 30}