Klasyfikacja - wprowadzenie

Wprowadzenie do klasyfikacji

Klasyfikację można zdefiniować jako proces przewidywania klasy lub kategorii na podstawie obserwowanych wartości lub określonych punktów danych. Skategoryzowane dane wyjściowe mogą mieć postać, na przykład „Czarny” lub „Biały”, „Spam” lub „Brak spamu”.

Matematycznie, klasyfikacja to zadanie przybliżenia funkcji odwzorowującej (f) ze zmiennych wejściowych (X) do zmiennych wyjściowych (Y). Zasadniczo należy do nadzorowanego uczenia maszynowego, w którym cele są również dostarczane wraz z zestawem danych wejściowych.

Przykładem problemu klasyfikacyjnego może być wykrywanie spamu w wiadomościach e-mail. Mogą istnieć tylko dwie kategorie wyników, „spam” i „brak spamu”; stąd jest to klasyfikacja typu binarnego.

Aby zaimplementować tę klasyfikację, musimy najpierw przeszkolić klasyfikator. W tym przykładzie wiadomości e-mail „spam” i „bez spamu” zostaną użyte jako dane szkoleniowe. Po pomyślnym przeszkoleniu klasyfikatora można go użyć do wykrycia nieznanej wiadomości e-mail.

Typy uczniów w klasyfikacji

Mamy dwa typy uczniów w odniesieniu do problemów klasyfikacyjnych -

Leniwi uczniowie

Jak sama nazwa wskazuje, tego typu uczniowie czekają na pojawienie się danych testowych po zapisaniu danych treningowych. Klasyfikacji dokonuje się dopiero po uzyskaniu danych testowych. Spędzają mniej czasu na treningu, ale więcej czasu na przewidywanie. Przykłady leniwych uczniów to najbliższy sąsiad K i rozumowanie oparte na przypadkach.

Chętni uczniowie

W przeciwieństwie do leniwych uczniów, chętni uczący się konstruują model klasyfikacji bez czekania na pojawienie się danych testowych po ich zapisaniu. Spędzają więcej czasu na treningu, ale mniej na przewidywaniu. Przykładami chętnych do nauki są drzewa decyzyjne, naiwne Bayes i sztuczne sieci neuronowe (ANN).

Budowanie klasyfikatora w Pythonie

Scikit-learn, biblioteka Pythona do uczenia maszynowego, może zostać użyta do zbudowania klasyfikatora w Pythonie. Kroki tworzenia klasyfikatora w Pythonie są następujące -

Krok 1: Importowanie niezbędnego pakietu Pythona

Aby zbudować klasyfikator przy użyciu scikit-learn, musimy go zaimportować. Możemy go zaimportować za pomocą następującego skryptu -

import sklearn

Krok 2: Importowanie zbioru danych

Po zaimportowaniu niezbędnego pakietu potrzebujemy zbioru danych do zbudowania modelu predykcyjnego klasyfikacji. Możemy zaimportować go z zestawu danych sklearn lub użyć innego, zgodnie z naszymi wymaganiami. Zamierzamy korzystać z Diagnostycznej Bazy Danych Sklearn Breast Cancer Wisconsin. Możemy go zaimportować za pomocą następującego skryptu -

from sklearn.datasets import load_breast_cancer

Poniższy skrypt załaduje zestaw danych;

data = load_breast_cancer()

Musimy również uporządkować dane i można to zrobić za pomocą następujących skryptów -

label_names = data['target_names']
   labels = data['target']
   feature_names = data['feature_names']
   features = data['data']

Następujące polecenie wydrukuje nazwę etykiet, 'malignant' i 'benign'w przypadku naszej bazy danych.

print(label_names)

Wynikiem powyższego polecenia są nazwy etykiet -

['malignant' 'benign']

Te etykiety są mapowane na wartości binarne 0 i 1. Malignant rak jest reprezentowany przez 0 i Benign rak jest reprezentowany przez 1.

Nazwy funkcji i wartości funkcji tych etykiet można zobaczyć za pomocą następujących poleceń -

print(feature_names[0])

Wynikiem powyższego polecenia są nazwy funkcji dla etykiety 0 tj Malignant rak -

mean radius

Podobnie nazwy funkcji dla etykiety mogą być tworzone w następujący sposób -

print(feature_names[1])

Wynikiem powyższego polecenia są nazwy funkcji dla etykiety 1 tj Benign rak -

mean texture

Możemy wydrukować funkcje dla tych etykiet za pomocą następującego polecenia -

print(features[0])

To da następujący wynik -

[
   1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
   1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
   6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
   1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
   4.601e-01 1.189e-01
]

Możemy wydrukować funkcje dla tych etykiet za pomocą następującego polecenia -

print(features[1])

To da następujący wynik -

[
   2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02
   7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01
   5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01
   2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01
   2.750e-01 8.902e-02
]

Krok 3: Organizowanie danych w zestawy szkoleniowe i testowe

Ponieważ musimy przetestować nasz model na niewidocznych danych, podzielimy nasz zbiór danych na dwie części: zbiór uczący i zbiór testowy. Możemy użyć funkcji train_test_split () pakietu sklearn python, aby podzielić dane na zbiory. Następujące polecenie zaimportuje funkcję -

from sklearn.model_selection import train_test_split

Teraz następne polecenie podzieli dane na dane treningowe i testowe. W tym przykładzie wykorzystujemy pobieranie 40 procent danych do celów testowych i 60 procent danych do celów szkoleniowych -

train, test, train_labels, test_labels = train_test_split(
   features,labels,test_size = 0.40, random_state = 42
)

Krok 4: Ocena modelu

Po podzieleniu danych na treningi i testy musimy zbudować model. W tym celu użyjemy algorytmu Naïve Bayes. Następujące polecenia zaimportują moduł GaussianNB -

from sklearn.naive_bayes import GaussianNB

Teraz zainicjuj model w następujący sposób -

gnb = GaussianNB()

Następnie za pomocą następującego polecenia możemy wytrenować model -

model = gnb.fit(train, train_labels)

Teraz, do celów oceny, musimy robić prognozy. Można to zrobić za pomocą funkcji Predict () w następujący sposób -

preds = gnb.predict(test)
print(preds)

To da następujący wynik -

[
   1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1
   0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1
   1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0
   0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1
   1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0 
   1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 
   1

]

Powyższe szeregi zer i jedynek na wyjściu to przewidywane wartości dla Malignant i Benign klasy nowotworów.

Krok 5: Znajdowanie dokładności

Możemy znaleźć dokładność modelu zbudowanego w poprzednim kroku, porównując dwie tablice, mianowicie test_labels i preds. Do określenia dokładności będziemy używać funkcji dokładności_score ().

from sklearn.metrics import accuracy_score
   print(accuracy_score(test_labels,preds))
   0.951754385965

Powyższe dane wyjściowe pokazują, że klasyfikator NaïveBayes jest dokładny w 95,17%.

Wskaźniki oceny klasyfikacji

Zadanie nie jest wykonywane nawet po zakończeniu wdrażania aplikacji lub modelu uczenia maszynowego. Musimy się dowiedzieć, jak skuteczny jest nasz model? Mogą istnieć różne metryki oceny, ale musimy je starannie wybrać, ponieważ wybór metryk wpływa na sposób mierzenia i porównywania wydajności algorytmu uczenia maszynowego.

Poniżej przedstawiono niektóre z ważnych metryk oceny klasyfikacji, spośród których możesz wybrać na podstawie zbioru danych i rodzaju problemu -

Macierz zamieszania

Jest to najłatwiejszy sposób pomiaru wydajności problemu klasyfikacji, w którym wynik może składać się z dwóch lub więcej typów klas. Macierz zamieszania to nic innego jak stół o dwóch wymiarach, a mianowicie. „Rzeczywiste” i „Przewidywane”, a ponadto oba wymiary mają „Prawdziwie pozytywne (TP)”, „Prawdziwie negatywne (TN)”, „Fałszywie dodatnie (FP)”, „Fałszywie negatywne (FN)”, jak pokazano poniżej -

Wyjaśnienie terminów związanych z macierzą nieporozumień jest następujące:

  • True Positives (TP) - Dzieje się tak, gdy zarówno aktualna klasa, jak i przewidywana klasa punktu danych to 1.

  • True Negatives (TN) - Dzieje się tak, gdy zarówno aktualna klasa, jak i przewidywana klasa punktu danych to 0.

  • False Positives (FP) - Tak jest w przypadku, gdy aktualna klasa punktu danych to 0, a przewidywana klasa punktu danych to 1.

  • False Negatives (FN) - Tak jest w przypadku, gdy aktualna klasa punktu danych to 1, a przewidywana klasa punktu danych to 0.

Macierz pomyłki możemy znaleźć za pomocą funkcji confusion_matrix () funkcji sklearn. Za pomocą poniższego skryptu możemy znaleźć macierz pomyłki powyższego klasyfikatora binarnego -

from sklearn.metrics import confusion_matrix

Wynik

[
   [ 73   7]
   [  4 144]
]

Precyzja

Można to zdefiniować jako liczbę poprawnych prognoz wykonanych przez nasz model ML. Możemy go łatwo obliczyć za pomocą macierzy pomyłki za pomocą następującego wzoru -

$$ = \ frac {+} {+++} $$

Dla wyżej zbudowanego klasyfikatora binarnego TP + TN = 73 + 144 = 217 i TP + FP + FN + TN = 73 + 7 + 4 + 144 = 228.

Stąd Dokładność = 217/228 = 0,951754385965, czyli to samo, co obliczyliśmy po utworzeniu naszego klasyfikatora binarnego.

Precyzja

Precyzja wykorzystywana przy pobieraniu dokumentów może być zdefiniowana jako liczba poprawnych dokumentów zwróconych przez nasz model ML. Możemy go łatwo obliczyć za pomocą macierzy pomyłki za pomocą następującego wzoru -

$$ = \ frac {} {+ FP} $$

Dla powyższego klasyfikatora binarnego TP = 73 i TP + FP = 73 + 7 = 80.

Stąd Precyzja = 73/80 = 0,915

Przypomnienie lub wrażliwość

Recall można zdefiniować jako liczbę pozytywów zwróconych przez nasz model ML. Możemy go łatwo obliczyć za pomocą macierzy pomyłki za pomocą następującego wzoru -

$$ = \ frac {} {+ FN} $$

Dla wyżej zbudowanego klasyfikatora binarnego TP = 73 i TP + FN = 73 + 4 = 77.

Stąd Precyzja = 73/77 = 0,94805

Specyficzność

Specyficzność, w przeciwieństwie do przypominania, można zdefiniować jako liczbę negatywów zwróconych przez nasz model ML. Możemy go łatwo obliczyć za pomocą macierzy pomyłki za pomocą następującego wzoru -

$$ = \ frac {N} {N + FP} $$

Dla powyższego klasyfikatora binarnego TN = 144 i TN + FP = 144 + 7 = 151.

Stąd Precyzja = 144/151 = 0,95364

Różne algorytmy klasyfikacji ML

Poniżej przedstawiono kilka ważnych algorytmów klasyfikacji ML -

  • Regresja logistyczna

  • Maszyna wektorów wsparcia (SVM)

  • Drzewo decyzyjne

  • Naïve Bayes

  • Losowy las

W dalszych rozdziałach szczegółowo omówimy wszystkie te algorytmy klasyfikacji.

Aplikacje

Oto niektóre z najważniejszych zastosowań algorytmów klasyfikacyjnych -

  • Rozpoznawanie mowy

  • Rozpoznawanie pisma odręcznego

  • Identyfikacja biometryczna

  • Klasyfikacja dokumentów