Я використовую OpenCV letter_recog.cpp приклад для експерименту над випадковими деревами та іншими класифікаторами. У цьому прикладі є реалізація шести класифікаторів - випадкових дерев, підсилюючих, MLP, kNN, наївних Bayes та SVM. Використовується набір даних розпізнавання листів UCI з 20000 екземплярами та 16 функціями, які я розділив навпіл для тренувань та тестування. У мене є досвід роботи зі SVM, тому я швидко встановив його помилку розпізнавання на 3,3%. Після деяких експериментів я отримав:
Розпізнавання листів UCI:
- RTrees - 5,3%
- Підвищення - 13%
- MLP - 7,9%
- kNN (k = 3) - 6,5%
- Байєс - 11,5%
- SVM - 3,3%
Використовувані параметри:
RTrees - max_num_of_trees_in_the_forrest = 200, max_depth = 20, min_sample_count = 1
Boost - boost_type = РЕАЛЬНІ, слабкий_рахунок = 200, weight_trim_rate = 0,95, max_depth = 7
MLP - метод = BACKPROP, param = 0,001, max_iter = 300 (значення за замовчуванням - занадто повільно для експерименту)
kNN (k = 3) - k = 3
Байєса - жодного
SVM - ядро RBF, C = 10, гамма = 0,01
Після цього я використав ті самі параметри і протестував на наборах даних Digits і MNIST, спочатку витягнувши функції градієнта (розмір вектора 200 елементів):
Цифри:
- RTrees - 5,1%
- Підвищення - 23,4%
- MLP - 4,3%
- kNN (k = 3) - 7,3%
- Байєс - 17,7%
- SVM - 4,2%
МНІСТ:
- RTrees - 1,4%
- Підвищення - поза пам'яттю
- MLP - 1,0%
- kNN (k = 3) - 1,2%
- Байєс - 34,33%
- SVM - 0,6%
Я новачок у всіх класифікаторах, крім SVM та kNN, для цих двох можу сказати, що результати здаються прекрасними. А як щодо інших? Я очікував більше від випадкових дерев, на MNIST kNN дає кращу точність, будь-які ідеї, як зробити його вище? Boost і Bayes дають дуже низьку точність. Зрештою, я хотів би скористатися цими класифікаторами для створення системи декількох класифікаторів. Будь-яка порада?