ساخت یک svm ساده - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

ساخت یک svm ساده

+2 امتیاز
سلام میخاستم یه svmساده تعریف کنم و اونو ترین کنم و در برنامه استفاده کنم.

ممنون میشم با یه مثال ساده اینو توضیح بدین در این زمینه اطلاعات زادی ندارم لطفا راهنمایی کنید .
سوال شده آبان 6, 1393  بوسیله ی mehrdadam (امتیاز 52)   6 10 14

1 پاسخ

+2 امتیاز

کلاسیفیر svm ویژگی ها را به عنوان ورودی از شما دریافت کرده و سپس lable مربوط به هر کلاس یا به عبارت دیگر جواب مطلوب چون svm با ناظر هستش.در نهایت تعیین نوع کلاسیفیر و تنظیمات بهینه سازی.


#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/ml/ml.hpp>

using namespace cv;

void testSVM(){
	// Data for visual representation
	int width = 512, height = 512;
	Mat view_img = Mat::zeros(height, width, CV_8UC3);

	// تنظیم برچسب ها
	float labels[4] = { 1.0, -1.0, -1.0, -1.0 };
	Mat labels_mat(4, 1, CV_32FC1, labels);

	// تنظیم ویژگی های ورودی که در این مثال مختصات است
	float training_data[4][2] = { { 501, 10 }, { 255, 10 }, { 501, 255 }, { 10, 501 } };
	Mat training_data_mat(4, 2, CV_32FC1, training_data);

	// تنظیم پارامترهای کلاسیفیر نوع کلاسیفیر و پارامترهای تکرار برای بهینه سازی را مشخص می کنیم
	CvSVMParams params;
	params.svm_type = CvSVM::C_SVC;
	params.kernel_type = CvSVM::LINEAR;
	params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6);

	// آموزش 
	CvSVM SVM;
	SVM.train(training_data_mat, labels_mat, Mat(), Mat(), params);

	Vec3b green(0, 255, 0), blue(255, 0, 0);

	// نمایش ناحیه مربوط به هر کلاس از طریق تست کل ناحیه
	for (int i = 0; i < view_img.rows; ++i)
	for (int j = 0; j < view_img.cols; ++j)
	{
		Mat sampleMat = (Mat_<float>(1, 2) << j, i);
		float response = SVM.predict(sampleMat);

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

	// نمایش داده های آموزش داده شده
	int thickness = -1;
	int lineType = 8;
	circle(view_img, Point(501, 10), 5, Scalar(0, 0, 0), thickness, lineType);
	circle(view_img, Point(255, 10), 5, Scalar(255, 255, 255), thickness, lineType);
	circle(view_img, Point(501, 255), 5, Scalar(255, 255, 255), thickness, lineType);
	circle(view_img, Point(10, 501), 5, Scalar(255, 255, 255), thickness, lineType);


	imshow("view", view_img); // show it to the user
	waitKey(0);
}



int main()
{
	testSVM();

	return 0;
}

train, svm

پاسخ داده شده آبان 7, 1393 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده دی 30, 1393 بوسیله ی haniye sarbazi
سلام ممنون از پاسخ تون ولی کاش میشد مطلب رو باز تر کنید اخه من تو این قسمت صفرم میشه کد هارو و روندشو باتر کنید ممنون میشم.من باید یه svm بسازم برای تشخیص بطری.منون میشم راهنماییم کنید
تشخیص بطری میشه یه سوال دیگه می تونید سوالی جدید در این زمینه مطرح کنید تا در موردش بحث شه.
ساخت یک svm برای تشخیص بطری
...