Korzystam z przykładu OpenCV letter_recog.cpp do eksperymentowania na losowych drzewach i innych klasyfikatorach. Ten przykład zawiera implementacje sześciu klasyfikatorów - losowe drzewa, boosting, MLP, kNN, naiwne Bayesa i SVM. Używany jest zestaw danych do rozpoznawania liter UCI z 20000 wystąpieniami i 16 funkcjami, które podzieliłem na pół na szkolenia i testy. Mam doświadczenie z SVM, więc szybko ustawiłem błąd rozpoznawania na 3,3%. Po eksperymentach otrzymałem:
Rozpoznawanie liter UCI:
- RTree - 5,3%
- Zwiększenie - 13%
- MLP - 7,9%
- kNN (k = 3) - 6,5%
- Bayes - 11,5%
- SVM - 3,3%
Zastosowane parametry:
RTrees - max_num_of_trees_in_the_forrest = 200, max_depth = 20, min_sample_count = 1
Boost - boost_type = REAL, poor_count = 200, weight_trim_rate = 0,95, max_depth = 7
MLP - metoda = BACKPROP, parametr = 0,001, max_iter = 300 (wartości domyślne - zbyt wolno, aby eksperymentować)
kNN (k = 3) - k = 3
Bayes - brak
Jądro SVM - RBF, C = 10, gamma = 0,01
Następnie użyłem tych samych parametrów i przetestowałem zestawy danych Digits i MNIST, najpierw wyodrębniając cechy gradientu (elementy wektorowe o rozmiarze 200):
Cyfry:
- RTree - 5,1%
- Zwiększenie - 23,4%
- MLP - 4,3%
- kNN (k = 3) - 7,3%
- Bayes - 17,7%
- SVM - 4,2%
MNIST:
- RTree - 1,4%
- Boost - brak pamięci
- MLP - 1,0%
- kNN (k = 3) - 1,2%
- Bayes - 34,33%
- SVM - 0,6%
Jestem nowy we wszystkich klasyfikatorach oprócz SVM i kNN, dla tych dwóch mogę powiedzieć, że wyniki wydają się dobre. Co z innymi? Spodziewałem się więcej po losowych drzewach, na MNIST kNN daje lepszą dokładność, jakieś pomysły, jak ją zwiększyć? Zwiększenie i Bayesa dają bardzo niską celność. Na koniec chciałbym użyć tych klasyfikatorów do stworzenia systemu wielu klasyfikatorów. Jakakolwiek rada?