Я новичок в OpenCV SVM. Есть ли способ построить график или разработать некоторый визуальный контент для обученного набора данных, который разработан OpenCV svm, чтобы я мог проверить, насколько точны мои учебные данные и соответствующим образом настроить мои параметры SVM?Нарисуйте диаграмму визуализации Набор данных OpenCV 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 px и для каждого пикселя проверяет, классифицировалось ли оно как принадлежащее к одному классу или другому (ответ 1 или -1). Вдобавок к этому, точки данных отмечены так, что вы можете увидеть, хорошо ли классифицируется SVM.
// 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)
Спасибо, друг. Я делаю что-то совсем другое сейчас, поэтому не могу попробовать его прямо сейчас. но обязательно проверит, работает ли он. Я приму ответ, даже если это поможет кому-то другому. – molecule
Привет @molecule, вы попробовали это? Если он ответит на ваш вопрос, вы можете принять ответ. –
привет, я принимаю ответ пока пока кто-то не скажет, что он не работает. – molecule
OpenCV не есть встроенные функции для рисования ... Вам лучше сохранить свои данные не csv и построить их в Matlab или аналогичном – Miki
У меня есть yml и xml-файл, который opencv производит .. Но я не мог понять, как его разобрать используя матлаб/октаву. – molecule