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

C++ Adaboost影响修剪需要更长的训练时间,c++,opencv,machine-learning,decision-tree,adaboost,C++,Opencv,Machine Learning,Decision Tree,Adaboost,影响修剪的状态可用于“减少增强模型的计算时间,但大大降低精度”。默认情况下,“权重修剪率”参数为0.95。通过将该参数更改为0禁用影响训练后,我实际上实现了很大的加速。使用262144个样本的数据集时,我的速度提高了5倍。当使用十倍大的数据集时,我的速度提高了3倍。这似乎与预期的行为相反。有人能解释为什么会发生这种情况吗?谢谢 下面添加了一些示例数据。这里的基本情况是禁用影响修剪时。准确度为95.03,列车运行时间为10.607。启用“影响修剪”(默认值为0.95)时,精度将如预期的那样降至94

影响修剪的状态可用于“减少增强模型的计算时间,但大大降低精度”。默认情况下,“权重修剪率”参数为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…听起来像是拙劣的实现或普通的几何算法;只有当N足够大时,复杂算法才会更快。对于一个小的N,O(N^2)比O(500n)更可取。你能包含代码吗?代码很标准,但我还是添加了它。