opencv决策树回归,预测看不见的响应?

时间:2018-09-19 20:48:28

标签: opencv regression decision-tree

我正在Surface Pro(Windows 10 64位)上使用Opencv3 for Visual Studio 2017,以C ++进行编码。

我想训练决策树,以便可以通过回归进行预测。我需要它能够预测介于所代表的训练集中的响应之间。例如,这段代码:

cv::Mat samples(6, 1, CV_32FC1);
samples.at<float>(0, 0) = 1.5;
samples.at<float>(1, 0) = 2.7;
samples.at<float>(2, 0) = 3.8;
samples.at<float>(3, 0) = 4.3;
samples.at<float>(4, 0) = 5.4;
samples.at<float>(5, 0) = 5.2;

cv::Mat responses = samples.clone();

cv::Mat samples2(5, 1, CV_32FC1);
samples2.at<float>(0, 0) = 1.8;
samples2.at<float>(1, 0) = 2.5;
samples2.at<float>(2, 0) = 3.6;
samples2.at<float>(3, 0) = 4.4;
samples2.at<float>(4, 0) = 5.3;

cv::Ptr< cv::ml::DTrees > model = cv::ml::DTrees::create();
model->setMinSampleCount(1);
model->setCVFolds(1);
model->setMaxDepth(10);
model->setRegressionAccuracy(.01f);

model->train(samples, cv::ml::ROW_SAMPLE, responses);

cv::Mat results;
model->predict(samples2, results);
for (int i = 0; i < results.rows; i++) {
    for (int j = 0; j < results.cols; j++)
        cout << results.at<float>(i, j) << ", ";
    cout << endl;
}

输出为:

  

1.5

     

2.7

     

3.8

     

4.3

     

5.2

这是一个简单的身份问题,无论样本是什么,响应都应该如此。但是,从此示例中,它只能预测所看到的响应。据我了解,这是因为每个响应叶都是一个恒定值。决策树完成后,它以恒定的值落在那些叶子之一上。

我的问题是,是否有人知道一种操纵决策树的方法(最好使用OpenCV),以便它可以预测所见之外的响应?例如使用内插和/或外推。

0 个答案:

没有答案