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