Adaboost影响修剪需要更长时间训练

时间:2014-05-28 16:46:06

标签: c++ opencv machine-learning decision-tree adaboost

可以使用影响修剪的OpenCV documentation状态"减少增强模型的计算时间,同时显着降低精度"。默认情况下,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);

0 个答案:

没有答案