Zadanie klasyfikacji to najpowszechniejsze z zadań uczenia maszynowego. Polega ono na przypisaniu klasy do każdej z nowych instancji (obiektów). Rozróżniamy klasyfikację binarną, gdzie do wyboru mamy dwie klasy oraz klasyfikację wieloklasową. Przykładem klasyfikacji binarnej może być określanie występowania pewnej choroby. Proces polega na przypisaniu do danych medycznych klasy ‘chory’, bądź ‘zdrowy’. Zastosowaniem klasyfikacji wieloklasowej może być rozpoznawanie liter, gdzie instancją jest opisany przez atrybuty (np. wartości pikseli) obrazek z literą. Klasą dla tak rozpoznanych liter jest po prostu znak reprezentujący tę literę.
Rozwiązanie zadanie klasyfikacji umożliwia szereg technik i algorytmów uczących. Algorytmy takie nazywamy klasyfikatorami. Wyróżniamy klasyfikatory oparte o: drzewa decyzyjne (J48, LMT, M5P, DecisionStump), regresje liniową, regresje logistyczną, maszynę wektorów wspierających (SVM, SMO), generację reguł (JRipper, M5Rules, OneR, PART) oraz metody łączone (AdaBoostM1, Bagging, LogitBoost, MultiBoostAB, Stacking, CostSensitiveClassifier).
W przykładzie użyjemy dobrze znany nam zbiór danych iris. Stworzymy model klasyfikujący gatunki irysów. Do budowy modelu wykorzystamy algorytm uczący J48. Wynikiem działania algorytmu jest drzewo decyzyjne:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# uruchamiamy algorytm uczący J48, wskazujemy klasę na gatunek 'Species' > klasyfikator <- J48(Species ~ . , data = iris) # zbudowany model w postaci drzewa decyzyjnego (zhierarchizowane reguły) > klasyfikator J48 pruned tree ------------------ Petal.Width <= 0.6: setosa (50.0) Petal.Width > 0.6 | Petal.Width <= 1.7 | | Petal.Length <= 4.9: versicolor (48.0/1.0) | | Petal.Length > 4.9 | | | Petal.Width <= 1.5: virginica (3.0) | | | Petal.Width > 1.5: versicolor (3.0/1.0) | Petal.Width > 1.7: virginica (46.0/1.0) Number of Leaves : 5 Size of the tree : 9 |
Następnie dokonamy ewaluacji stworzonego modelu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
> summary(klasyfikator) === Summary === Correctly Classified Instances 147 98 % Incorrectly Classified Instances 3 2 % Kappa statistic 0.97 Mean absolute error 0.0233 Root mean squared error 0.108 Relative absolute error 5.2482 % Root relative squared error 22.9089 % Coverage of cases (0.95 level) 98.6667 % Mean rel. region size (0.95 level) 34 % Total Number of Instances 150 === Confusion Matrix === a b c <-- classified as 50 0 0 | a = setosa 0 49 1 | b = versicolor 0 2 48 | c = virginica |
Według powyższych danych udało nam się poprawnie zaklasyfikować 98% instancji. Niestety wykonana przed chwilą ewaluacja wykorzystała ten sam zbiór do testowania co do uczenia. Postępowanie takie może prowadzić do wielu błędów i nie daje nam obiektywnej informacji o tym jak model będzie sobie radzić na nowych danych uczących. Dlatego też teraz wykorzystamy ewaluację typu “ten fold cross validation”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
> evaluate_Weka_classifier(klasyfikator, numFolds = 10, complexity = FALSE, seed = 1, class = TRUE) === 10 Fold Cross Validation === === Summary === Correctly Classified Instances 144 96 % Incorrectly Classified Instances 6 4 % Kappa statistic 0.94 Mean absolute error 0.035 Root mean squared error 0.1586 Relative absolute error 7.8705 % Root relative squared error 33.6353 % Coverage of cases (0.95 level) 96.6667 % Mean rel. region size (0.95 level) 33.7778 % Total Number of Instances 150 === Detailed Accuracy By Class === TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class 0,980 0,000 1,000 0,980 0,990 0,985 0,990 0,987 setosa 0,940 0,030 0,940 0,940 0,940 0,910 0,952 0,880 versicolor 0,960 0,030 0,941 0,960 0,950 0,925 0,961 0,905 virginica Weighted Avg. 0,960 0,020 0,960 0,960 0,960 0,940 0,968 0,924 === Confusion Matrix === a b c <-- classified as 49 1 0 | a = setosa 0 47 3 | b = versicolor 0 2 48 | c = virginica |
Jak widać teraz poprawnie klasyfikujemy 96% instancji. Mamy przy tym większe prawdopodobieństwo, że z tak dobrym wynikiem nasz model będzie sobie radzić z klasyfikacją nowych instancji.