Я использую деревья решений opencv для создания классификатора. Я хотел бы знать, возможно ли переобучить эту модель (которую можно сохранить и загрузить в файл .yml), добавив новые данные. Версия Opencv, которую я использую — 2.4.
Я думал о чем-то вроде этого
CvDTree dtree;
dtree.load("existingTree.yml");
dtree.train(newValues, CV_ROW_SAMPLE, newResponses);
newValues содержит только новые образцы, а newResponses содержит классы для этих значений. Это будет генерировать новое дерево решений, обученное со старыми значениями первого процесса обучения и новыми?
Я не нашел никакой информации в документации opencv по этому поводу.
Краткий ответ: нет
Длинный ответ: во время обучения, когда дереву решений передается большой обучающий набор, каждый узел разделения в дереве изучает набор функций и соответствующий порог. Ветви дерева оканчиваются листовыми узлами, которые затем сохраняют значения прогноза. Если вы уже обучили дерево решений, то оно уже изучило из обучающего набора все функции, пороговые значения и значения прогнозирования. Повторное обучение с дополнительными данными сделает бесполезными ранее изученные параметры.
Другой способ взглянуть на это — подумать о Случайном Лесе, который образован ансамблем деревьев. Учитывая, что ваш новый набор данных не слишком отличается от данных, которые модель уже видела ранее. Если вы хотите, вы можете обучить новое дерево и добавить его в группу ранее обученных деревьев. Во время прогнозирования вы можете усреднить прогноз всех деревьев, чтобы получить общий прогноз.
Других решений пока нет …