0

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);
4

0 回答 0