Документация OpenCV состояния, которые влияют на обрезку, могут быть использованы «для уменьшения времени вычислений для модернизированных моделей с существенной потерей точности». По умолчанию параметр weight_trim_rate равен 0,95. После отключения обучения влиянию путем изменения этого параметра на 0, я на самом деле достиг большого ускорения. При использовании набора данных с 262144 выборками я получаю ускорение в 5 раз. При использовании набора данных в десять раз больше ускорения в 3 раза. Это кажется противоположностью ожидаемого поведения. Кто-нибудь может объяснить, почему это может происходить? Спасибо!
Некоторые примеры данных добавлены ниже. Базовый случай здесь, когда отключение влияния отключено. Это дает точность 95,03 и время поезда 10,607. Когда включена подстройка влияния (по умолчанию 0,95), точность падает до 94,94, как и ожидалось, но время тренировки длится в 5 раз больше.
100 weak classifiers with a max depth of 1
Trim Accuracy MSE Training Time Percent Speedup
0 95.03 3.989 10.607
0.6 7.88 86.77 1.252 8.472044728
0.7 15.76 78.21 2.319 4.573954291
0.8 33.35 57.73 52.972 0.200237862
0.9 94.68 4.89 52.484 0.202099688
0.95 94.94 4.189 52.31 0.202771937
0.99 95.03 3.99 47.026 0.225556075
0.999 95.02 3.985 44.432 0.238724343
Пример кода:
CvBoost boost;
CvBoostParams boostingParameters;
boostingParameters.boost_type = CvBoost::REAL;
boostingParameters.weak_count = 100;
boostingParameters.weight_trim_rate = 0.95;
boostingParameters.max_depth = 1;
boostingParameters.use_surrogates = false;
boostingParameters.max_categories = 2;
boostingParameters.min_sample_count = 100;
boost.train(features, CV_ROW_SAMPLE, responses,
cv::Mat(),
cv::Mat(),
cv::Mat(),
cv::Mat(),
boostingParameters,
false);
Задача ещё не решена.