رفتن به مطلب

ارسال های توصیه شده

جهت طبقه­ بندی تصاویر می­توان از طبقه ­بندی­­ کننده­ های متفاوتی استفاده نمود. یک دسته از طبقه­ بند­ی کننده­ ها براساس شیوه­ ی یادگیری کار می­کنند. در این روش­ها ابتدا تعدادی نمونه به عنوان داده­ های آموزش به طبقه ­بند داده می­شود و جدا­کننده به وسیله­ ی این داده ­ها آموزش می­بیند. پس از آن نمونه­ های تست به طبق ه­بند داده می­شود و طبقه­ بند در مورد گروهی که این داده ­ها به آن تعلق دارند، تصمیم­ گیری می­کند.

دو طبقه بندی که بیشتر در روش­های نهان­کاوی مورد استفاده قرار گرفته­اند Fisher’s Linear Discriminate(FLD) و Support Vector Machine(SVM) هستند. SVM قوی­تر از FLD می باشد.

SVM ابزار یادگیری قوی­ ای در حل مسائل طبقه­ بندی، با دو کلاس است. هدف SVM ایجاد مدلی است که با داشتن ویژگی­های نمونه­ های داده در مجموعه داده­های آموزشی مقدار هدف آنها را حدس بزند. در این روند بردار­های آموزشی نمونه­ های آموزشی XI از تصویر I به فضای با ابعاد بیشتر نگاشت می­شود. سپس یک SVM یک ابر­صفحه­ ی جدا کننده­ ی خطی را پیدا می­کند که بیشترین حاشیه را در این فضای با ابعاد بیشتر داشته باشد.

شکل 1 مسأله­ ی جدا کردن دو کلاس که بصورت خطی جدایی­ پذیر هستند را نشان می­دهد. همانطور که در شکل دیده می­شود، برای جدا کردن این دو کلاس، ابر­صفحه­ های بیشماری وجود دارد که بعضی از آنها به کلاس­ها بسیار نزدیکند. SVM تلاش می­کند تا ابر­صفحه­ ای را بیابد که در بیشترین فاصله نسبت به دو کلاس قرار داشته باشد. انتخاب این ابرصفحه باعث می­شود که طبقه­ بندی کننده قابلیت تعمیم بهتری داشته باشد.

ycardhi4rb95oa1g202w_thumb.jpg

 

شکل 1- دو کلاس خطی جدایی ­پذیر و ابر صفحه­ های طبقه­ بندی کننده

 

به این منظور دو ابر صفحه­ ی موازی که نقاط سرحدی را در دو کلاس تعیین می­کنند در­نظر گرفته می­شوند، سپس ابر­صفحه­ ای که در فاصله­ ی مساوی از این دو ابر­صفحه قرار گرفته می­گیرد به عنوان ابر صفحه­ ی طبقه­ بندی کننده تعیین می­شود. شکل 2 دو کلاس خطی جدایی ­پذیر و طبقه ­بندی کننده­ی SVM را نشان می­دهد.

1zh8pppb9e0qdchy1m63_thumb.jpg

شکل 2- دو کلاس خطی جدایی­ پذیر و طبقه­ بندی کننده­ ی SVM

 

شکل3 یک SVM را نشان می­دهد که برای حل یک مسأله با دو کلاس مورد آموزش قرار گرفته است. نمونه­ هایی که بر روی حاشیه قرار گرفته­ اند بردار پشتیبان نام دارند. بردار­های پشتیبان (زیر مجموعه­ ای از نمونه­ های آموزشی) نزدیکترین نقاط به سطح تصمیم­ گیری هستند و طبقه­ بندی آنها از سایر نمونه­ ها مشکل­تر است.

um0n4w3wn862jr87caf.jpg

شکل 3- SVM آموزش داده شده با نمونه­ های دو کلاس. دو بردار پشتیبان(نقاط داده) با دایره­ های سیاه­رنگ با اندازه ­ی بزرگتر از بقیه­ ی دایره ­ها بر­روی خطوط مرزی چپ و راست نشان داده می­شوند.

  • Like 6
لینک به دیدگاه
  • 1 ماه بعد...

سلام

کسی کد svm رو برای طبقه بندی مسائل دو کلاسه داره؟

من برای شروع کارم نیاز دارم که از svm برای طبقه بندی تصاویر استفاده کنم.

  • Like 4
لینک به دیدگاه
سلام

کسی کد svm رو برای طبقه بندی مسائل دو کلاسه داره؟

من برای شروع کارم نیاز دارم که از svm برای طبقه بندی تصاویر استفاده کنم.

 

سلام

خود متلب SVM داره، از همون نمی تونین استفاده کنین؟

 

اینجا هم یه تعداد کد هست، شاید رو سایت هم بذارمشون:

برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید.

  • Like 4
لینک به دیدگاه
سلام

کسی کد svm رو برای طبقه بندی مسائل دو کلاسه داره؟

من برای شروع کارم نیاز دارم که از svm برای طبقه بندی تصاویر استفاده کنم.

 

سلام،

اگر می خواید از کدهای آماده ی متلب استفاده کنید برای پیاده سازی،

این لینک حاویه فیلم بسیار مفیدی برای کد نویسی svm دو کلاسه هست:

یعنی در اون به صورت مرحله مرحله، حتی تفکیک داده ها با استفاده از تابع Crossvalind و سپس کلاس بندیشون با svm توضیح داده شده.

 

 

(البته باید از ف ی ل تر شکن استفاده کنید.)

  • Like 4
لینک به دیدگاه
  • 7 ماه بعد...

سلام

من میخوام با svm داده هامو طبقه بندی کنم، از کد SVM متلب استفاده کردم! اما نمیدونم چطور داده هامو اول انتخاب کنم و به svmtrain بدم!


Xtrain=Data(41:end,:);
Xgroup=Group(41:end);
svmStruct = svmtrain(Xtrain,Xgroup);
Xtest=Data(1:40,:);
Ygroup=Group(1:40);
OutPut = svmclassify(svmStruct,Xtest);

ماتریس Data ای من شامل 200 ردیف اطلاعات استخراج شده از تصاویره، 100 تای اولی تصاویر پوشش و 100 تای بعدی تصاویر گنجانه هس که اطلاعاتش توی Group اومده. من اینارو با تابع cat به هم متصلشون کردم! حالا من میخوام بدونم چه روش هایی واسه انتخاب داده از این مجموعه برای svmtrain و svmclassify وجود داره؟

  • Like 3
لینک به دیدگاه
سلام

من میخوام با svm داده هامو طبقه بندی کنم، از کد SVM متلب استفاده کردم! اما نمیدونم چطور داده هامو اول انتخاب کنم و به svmtrain بدم!


Xtrain=Data(41:end,:);
Xgroup=Group(41:end);
svmStruct = svmtrain(Xtrain,Xgroup);
Xtest=Data(1:40,:);
Ygroup=Group(1:40);
OutPut = svmclassify(svmStruct,Xtest);

ماتریس Data ای من شامل 200 ردیف اطلاعات استخراج شده از تصاویره، 100 تای اولی تصاویر پوشش و 100 تای بعدی تصاویر گنجانه هس که اطلاعاتش توی Group اومده. من اینارو با تابع cat به هم متصلشون کردم! حالا من میخوام بدونم چه روش هایی واسه انتخاب داده از این مجموعه برای svmtrain و svmclassify وجود داره؟

خب عزیز الان ترین برنامه رو انجام میدی اول با یه سری داده.

 

بعد قراره برنامه رو باهاش تست کنی تا ببینی چقدر آموزش دیده و یاد گرفته دیگه.

پس باید دیتاهات غیر از دیتای آموزش دادت باشن دیگه.اینطوری overfit میشه اصطلاحا.

یعنی فقط همونا رو یاد می گیره.

  • Like 3
لینک به دیدگاه
خب عزیز الان ترین برنامه رو انجام میدی اول با یه سری داده.

 

بعد قراره برنامه رو باهاش تست کنی تا ببینی چقدر آموزش دیده و یاد گرفته دیگه.

پس باید دیتاهات غیر از دیتای آموزش دادت باشن دیگه.اینطوری overfit میشه اصطلاحا.

یعنی فقط همونا رو یاد می گیره.

عزیزم اینارو میدونم، سوال من تو چگونگی انتخاب داده برای ترین و تست هستش.

همنوظر که گفتم من یه ماتریس دارم که 100 تای اولش تصاویر بدون داده سری هیتن، و 100 تای بعدی تصاویری هستن که داده ی سری توشون ذخیره شده. اگه کدمو نیگا کرده باشی اومدم گفتم 160 تای آخر بشه واسه آموزش و 40 تای اول بشه واسه تست!

احساس میکنم اینجوری درس نیس! چون توی تست من فقط تصاویر پاک رو بهش تغذیه کردم! میخوام ببینم روشی هس که بشه یه جور دیگه انتخابشون کرد مثلا رندونم یا یه چیز که تو موقع تست از هر دوتاشون داشته باشم!

  • Like 2
لینک به دیدگاه
عزیزم اینارو میدونم، سوال من تو چگونگی انتخاب داده برای ترین و تست هستش.

همنوظر که گفتم من یه ماتریس دارم که 100 تای اولش تصاویر بدون داده سری هیتن، و 100 تای بعدی تصاویری هستن که داده ی سری توشون ذخیره شده. اگه کدمو نیگا کرده باشی اومدم گفتم 160 تای آخر بشه واسه آموزش و 40 تای اول بشه واسه تست!

احساس میکنم اینجوری درس نیس! چون توی تست من فقط تصاویر پاک رو بهش تغذیه کردم! میخوام ببینم روشی هس که بشه یه جور دیگه انتخابشون کرد مثلا رندونم یا یه چیز که تو موقع تست از هر دوتاشون داشته باشم!

 

دیتای پاک رو تغذیه کردم رو متوجه نمیشم.چون رو مبحث شما کار نکردم اما اگر میخوای که با هم قاطی نشن و تست و ترین کاملا جدا باشن از هم:

 

اول یه متغیر تعریف می کنیم که به تعداد این عناصر باشه:

 

idx = randperm(dataSize);

 

فکر کن دیتای اصلیت ورودیش x

هست و خروجی y.

 

 

X_new=x(idx(

y_new=y(idx);

 

الان به این شکل اومدیم دو تا ماتریس درست کردیم برای ورودی و خروجیت که به ازای اون idxای که داشتیم و ایندکس به هم ریخته و رندمی از ماتریس اولی بود حالا این عناصر ماتریس ورودی و خروجیمون هم به ازای اون اندیس ها جابه جا شد یعنی دقیقا همون ماتریسه فقط جای سطر امون کاملا به هم ریخته و جابه جا شده.

حالا یه تعدادش رو میشه برای تست برداری و یه تعداد ترین.

مثلا بگی تو این ماتریس جدیده از یک تا مثلا 40تای اول بشه تست بقیه بشه ترین.

 

حالا باز اگه درست متوجه نشدم سوالت رو بگو تا دوباره توضیح بدم خانومی.

  • Like 3
لینک به دیدگاه
دیتای پاک رو تغذیه کردم رو متوجه نمیشم.چون رو مبحث شما کار نکردم اما اگر میخوای که با هم قاطی نشن و تست و ترین کاملا جدا باشن از هم:

 

اول یه متغیر تعریف می کنیم که به تعداد این عناصر باشه:

 

idx = randperm(dataSize);

 

فکر کن دیتای اصلیت ورودیش x

هست و خروجی y.

 

 

X_new=x(idx(

y_new=y(idx);

 

الان به این شکل اومدیم دو تا ماتریس درست کردیم برای ورودی و خروجیت که به ازای اون idxای که داشتیم و ایندکس به هم ریخته و رندمی از ماتریس اولی بود حالا این عناصر ماتریس ورودی و خروجیمون هم به ازای اون اندیس ها جابه جا شد یعنی دقیقا همون ماتریسه فقط جای سطر امون کاملا به هم ریخته و جابه جا شده.

حالا یه تعدادش رو میشه برای تست برداری و یه تعداد ترین.

مثلا بگی تو این ماتریس جدیده از یک تا مثلا 40تای اول بشه تست بقیه بشه ترین.

 

حالا باز اگه درست متوجه نشدم سوالت رو بگو تا دوباره توضیح بدم خانومی.

 

راستش متوجه نشدم!:ws52:

  • Like 2
لینک به دیدگاه
راستش متوجه نشدم!:ws52:

 

خب شما گفتی میخوای رندم داده هات انتخاب بشن منم یه اندیس گذاشتم که اینا رو رندم بگیره دیگه.

اونوقت وقتی خواست دیتاهاتو برداری از این ماتریس ورودی و خروجی جدید برداری.

  • Like 2
لینک به دیدگاه

زهرا جان متوجه شدی؟

 

ببخش من خوب منظور رو نمیرسونم یا شاید اشتباه متوجه شدم.

خواستی بگو مجدد توضیح میدم یا توضیح بیشتری نیاز بود اضافه کنم.

  • Like 3
لینک به دیدگاه
زهرا جان متوجه شدی؟

 

ببخش من خوب منظور رو نمیرسونم یا شاید اشتباه متوجه شدم.

خواستی بگو مجدد توضیح میدم یا توضیح بیشتری نیاز بود اضافه کنم.

مرسی خواهر گلم از این همه توجهت.

راستش من همون اول که توضییح دادم، من از بین 200 تا دادم که 100 تای اولش تصاویر بدون پیام سری بودن و صدتای دومش تصاویر هستی که توشون پیام سری جاسازی کردم. حالا که من میخوام ترین کنم اومدم چهار پنجم داده ها رو به ترتیب از اول یا از آخر انتخاب کردم. بعد تو مرحله تست من فقط یا تصاویر بدون پیام دارم یا تصاویر با پیام. حالا حس می کنم این روش من درست نیست! میخوام بدونم شما چه روشهایی پیشنهاد می کنین؟ حالا خودم یه پیشنهاد که دادم این بود که برای آموزش بصورت رندوم چهارپنجم داده ها رو انتخاب کنم و اون بقیه هم بمونه واسه آموزش! اما نمیدونم چه شکلی این کارو انجام بدم.

یه روش دیگه که به ذهنم اومد اینه که اول بیام داده هامو به دسته cover و stego نقسیم کنم، بعدش چهار پنجم هر کدوم رو انتخاب کنم، بعدش این دوتا رو به هم وصل کنم. آخرسرم اون یک پنجم باقی مونده رو به اون یکی یک پنجم متصل کنم!

نظر شما چیه؟ بنظرتون درستن؟

  • Like 3
لینک به دیدگاه
مرسی خواهر گلم از این همه توجهت.

راستش من همون اول که توضییح دادم، من از بین 200 تا دادم که 100 تای اولش تصاویر بدون پیام سری بودن و صدتای دومش تصاویر هستی که توشون پیام سری جاسازی کردم. حالا که من میخوام ترین کنم اومدم چهار پنجم داده ها رو به ترتیب از اول یا از آخر انتخاب کردم. بعد تو مرحله تست من فقط یا تصاویر بدون پیام دارم یا تصاویر با پیام. حالا حس می کنم این روش من درست نیست! میخوام بدونم شما چه روشهایی پیشنهاد می کنین؟ حالا خودم یه پیشنهاد که دادم این بود که برای آموزش بصورت رندوم چهارپنجم داده ها رو انتخاب کنم و اون بقیه هم بمونه واسه آموزش! اما نمیدونم چه شکلی این کارو انجام بدم.

یه روش دیگه که به ذهنم اومد اینه که اول بیام داده هامو به دسته cover و stego نقسیم کنم، بعدش چهار پنجم هر کدوم رو انتخاب کنم، بعدش این دوتا رو به هم وصل کنم. آخرسرم اون یک پنجم باقی مونده رو به اون یکی یک پنجم متصل کنم!

نظر شما چیه؟ بنظرتون درستن؟

خواهش می کنم.

 

اینم یه راهیه اما وقتی میتونی با رنذم گرفتن داده هات کامل اونا رو به هم بریزی و بعد از داخلشون دیتاهاتو جدا کنی دیگه اینکار به نظر من لازم نیست.

اون ایندکسی که اول براتون گذاشتم(idx) کار ی که میکنه همونطور که توضیح دادم اینه که قد همین دیتاهات یه ماتریس درست میکنه که اعداد داخلش پراکنده هستن.

مثلا اولین عنصرت 1000 هست بعدیش 2 هست و ... .

اینا یه سری عدد به هم ریخته هستن که فقط تعدادشون با تعداد داده هات برابره.

بعد میایم برای ورودیا میگیم ورودی رو که اندیسش الان مساوی با این عدد داخل idx اونو تو خونه های جدید قرار بده.

یعنی میاد عنصر 1000ام رو میذاره تو ماتریس جدیدت عنصر اولی بعدش عنصر دومی رو میذاره و ... .

همونطور که میبینی این ورودیات کاملا طبق اون اعداد تصادفی که اندیسات هستن به هم ریخته و به ترتیب بر حسب اون اندیس چیده میشن.

حالا اگر بیای 4/5 همینو برداری در واقع به منظورت رسیدی دیگه، هم از با پیام ها و هم بدون پیام ها داری برمیداری.

  • Like 3
لینک به دیدگاه
×
×
  • اضافه کردن...