绘制OpenCV SVM数据集可视化图

Draw a visualizing diagram OpenCV SVM data set

我是 OpenCV SVM 的新手。有没有办法为 OpenCV svm 开发的训练数据集绘制图表或开发一些视觉内容,以便我可以检查我的训练数据是否准确并相应地调整我的 SVM 参数?

可以可视化 SVM 响应,并且可以使用 OpenCV 绘图功能来完成。

这个问题已经很老了,但它在 Google 可视化 SVM 的结果中排名靠前。我为可能发现此问题的任何人回答。

这里有一个带有示例代码的 SVM 教程: https://docs.opencv.org/2.4/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html

它包含用于可视化 SVM 所学内容的代码。请注意,此示例显示的是平面上的数据,因此仅当您的数据是 2D 时它才有效。

所以下面的这段代码(它来自链接的 OpenCV 文档)创建了一个 512 x 512 像素的图像,并为每个像素检查它是否被 class 确定为属于一个 class 或另一个(响应 1 或 -1)。最重要的是,数据点已标记,因此您可以查看 SVM classification 是否正常工作。

// Train the SVM
CvSVM SVM;
SVM.train(trainingDataMat, labelsMat, Mat(), Mat(), params);

Vec3b green(0,255,0), blue (255,0,0);
// Show the decision regions given by the SVM
for (int i = 0; i < image.rows; ++i)
    for (int j = 0; j < image.cols; ++j)
    {
        Mat sampleMat = (Mat_<float>(1,2) << j,i);
        float response = SVM.predict(sampleMat);

        if (response == 1)
            image.at<Vec3b>(i,j)  = green;
        else if (response == -1)
             image.at<Vec3b>(i,j)  = blue;
    }

// Show the training data
int thickness = -1;
int lineType = 8;
circle( image, Point(501,  10), 5, Scalar(  0,   0,   0), thickness, lineType);
circle( image, Point(255,  10), 5, Scalar(255, 255, 255), thickness, lineType);
circle( image, Point(501, 255), 5, Scalar(255, 255, 255), thickness, lineType);
circle( image, Point( 10, 501), 5, Scalar(255, 255, 255), thickness, lineType);

如果您的数据点是整数对,这是一个很好的方法。如果您有 float 个数据点,您需要决定您想要的可视化分辨率,并让像素代表的不是 1 x 1 块,而是您要求的最小分辨率(例如 5.0e-27 x 2.0e-24)