c++ - Opencv 3 SVM trainAuto 是否也缩放标签?

标签 c++ opencv svm opencv3.0

我正在使用 OpenCV 3.0.0。运行 OpenCV 的 SVM 示例时 1我注意到,当自动训练而不是训练时,预测值介于 0 和 1 之间。当我直接使用 libsvm 运行相同的示例时,我没有看到相同的行为。

这是错误还是有意缩放标签以及其他功能?该行为似乎也没有记录。

这是我正在运行的代码:

    // Set up training data
size_t numberOfSamples = 4;
cv::Mat1i labelsMat(numberOfSamples, 1);
labelsMat(0, 0) = 1;
labelsMat(1, 0) = -1;
labelsMat(2, 0) = -1;
labelsMat(3, 0) = -1;

cv::Mat1f trainingDataMat(numberOfSamples, 2);
// Sample 0
trainingDataMat(0, 0) = 501;
trainingDataMat(0, 1) = 10;

// Sample 1
trainingDataMat(1, 0) = 255;
trainingDataMat(1, 1) = 10;

// Sample 2
trainingDataMat(2, 0) = 501;
trainingDataMat(2, 1) = 255;

// Sample 3
trainingDataMat(3, 0) = 10;
trainingDataMat(3, 1) = 501;

// Set up SVM's parameters
cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create();
svm->setType(cv::ml::SVM::C_SVC);
svm->setKernel(cv::ml::SVM::LINEAR);
svm->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, 100, 1e-6));

// Train the SVM with given parameters
cv::Ptr<cv::ml::TrainData> td =
    cv::ml::TrainData::create(trainingDataMat, cv::ml::ROW_SAMPLE, labelsMat);

// train the SVM
// svm->train(td);

// or auto train
svm->trainAuto(td);

// predict
// first point used for training
cv::Mat point1 = (cv::Mat_<float>(1, 2) << 501, 10);
float response1 = svm->predict(point1); 
// second point used for training
cv::Mat point2 = (cv::Mat_<float>(1, 2) << 255, 10);
float response2 = svm->predict(point2);

std::cout << "first point: " << response1 << "\n" <<
          << "second point: " << response2 << std::endl;

如果使用 trainAuto 运行,它将输出 0 和 1 而不是 -1 和 1。

最佳答案

显然这是一个错误,现在已修复:

http://code.opencv.org/issues/4464

关于c++ - Opencv 3 SVM trainAuto 是否也缩放标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42009235/

相关文章:

machine-learning - matlab中的最小二乘SVM

machine-learning - scikit-learn 中的决策函数是否返回到超平面的真实距离?

c++ - int a[] = {1,2,};为什么允许在初始化列表中使用尾随逗号?

c++ - 使用动态对象分配标准 vector 内容

c++ - Rcpp 函数在给定值 vector 及其频率的情况下查找中位数

python - 两个图像相减

c++ - 与 imread 相比,QImage 到 cv::Mat 转换奇怪的行为

r - 线搜索在训练 ksvm prob.model 时失败

c++ - 设置要与无序集一起使用的自定义类 - 在集合中找不到元素

image-processing - 如何用一种纯色填充 OpenCV 图像?