![]() |
ارزیابی یک مجموعه قانون با استفاده از مجموعه داده تست
با سلام
من می خوام یک مساله دسته بندی رو حل کنم. برای این کار، یک مجموعه قانون رو با استفاده از الگوریتمی به صورت ماتریسی ایجاد می کنم. برای مثال ماتریس 0 1 2 3 3 1 4 0 4 6 دو رول مختلف رو نشون میده. برای مثال، سطر دوم نشون می ده که اگر متغیر اول مقدار 6، متغیر دوم مقدار 4 و متغیر چهارم هم مقدار 4 را گرفت (متغیر سوم در این قانون تاثیری ندارد)، آنگاه نمونه به کلاس 1 تعلق دارد. در مرحله تست، یک مجموعه داده که به شکل ماتریس هست بر روی این قانون ها اعمال می شود و دقت دسته بندی محاسبه می شود. آیا تابعی در متلب برای این کار، یعنی مقایسه هر سطر از یک ماتریس با هر سطر از ماتریس دیگه وجود داره؟ بدون اینکه حلقه for نوشته بشه؟ ممنون |
نقل قول:
سلام دوست من شما دنبال تابع آماده برای این کار نباشید. بهتره از classifier هایی مثل درخت تصمیم یا شبکه عصبی و... برای این کار استفاده کنید. موفق باشید |
با سلام
ممنون از جواب تون من در واقع می خوام از الگوریتم ژنتیک یا یک متاهیوریستیک دیگه برای انجام دسته بندی استفاده کنم. در این صورت برای اعمال عملگرها روی یک جواب، باید قانون ها را به صورت یک ماتریس بسازم. برای مثال هر ماتریس می تونه معادل یک درخت تصمیم باشه که هر قانون اون در یک سطر از ماتریس آورده شده. حالا سوال من اینه که در این صورت چطور می تونم مجموعه داده تست رو با این مجموعه قانون ها مقایسه کنم؟ در واقع لازمه تا هر سطر از ماتریس تست با هر سطر از ماتریس قانون ها مقایسه بشه . از طرفی هر دو ماتریس دارای ابعاد بزرگی هستند (ماتریس تست شامل 12 هزار سطر و 17 ستون است) و استفاده از حلقه for روش مناسبی برای این کار نیست. آیا راه دیگه ای برای انجام مرحله ارزیابی قانون های ساخته شده وجود داره؟ خیلی ممنون |
نقل قول:
معمولا از الگوریتم ژنتیک برای دسته بندی استفاده نمیشه. ذات این الگوریتم ها بهینه سازی هست و بیشتر برای ایجاد خود مدل یا آموزش آن کاربرد داره. به طور مثال برای آموزش یک شبکه عصبی یا سایر کاربرد های مشابه. برای تست مجموعه داده مجبور هستین از حلقه استفاده کنید و دلیلی برای استفاده نکردن وجود نداره. درضمن اگرچه داده های شما زیاده ولی ابعاد داده شما کم هستش و دلیلی برای نگرانی وجود نداره. اگر این مورد رو هم درنظر بگیرید استفاده از حلقه مشکلی برای برنامه شما ایجاد نمیکنه. یک نکته دیگه این که در هوش مصنوعی زمان آموزش یا تست خیلی مهم نیست. این پردازش ها معمولا به صورت offline انجام میشن و دلیلی برای realtime بودن وجود نداره شما به عنوان محقق هوش مصنوعی نباید نگران زمان آموزش یا تست باشید. اینگونه موارد مربوط به حوزه نرم افزار هستن و دوستان نرم افزاری معمولا این مشکلات رو حل میکنن. موفق باشید |
سلام
من تصمیم گرفتم که از یک الگوریتم جستجو برای پیدا کردن یک مجموعه خوب از قانون ها استفاده کنم. با به دست آوردن این مجموعه قانون در واقع یک مدل دسته بندی ساخته می شه. با استفاده از بقیه روش ها مثل شبکه عصبی یا درخت تصمیم در متلب خیلی جای مانور وجود نداره. داده های من شامل 17 مشخصه یا فیچر هستند و به طور متوسط هر فیچر 10 مقدار اسمی رو به خودش اختصاص داده. در واقع کل فضای جستجو من شامل حدود 17 به توان 10 قانون می شه. از طرفی مجموعه داده آموزش من که برای پیدا کردن مجموعه بهینه از این قانون ها استفاده می شه یک ماتریس با 28 هزار رکورد و 17 مشخصه است. درختی که با نرم افزار متلب ساختم شامل 1900 گره پایانی هست که با در نظر گرفتن اینکه بعضی از گره ها چند حالت یک متغیر رو به گره تخصیص دادند، می شه گفت تعداد کل قانون چند برابر 1900 می شه. به نظر شما چنین کاری رو می شه تو متلب انجام داد؟ لب تاپم هنگ نمی کنه؟! اگر بشه که خیلی عالی می شه |
نقل قول:
اگرچه ممکنه اجرا یکم طولانی باشه ولی با پدیده هنگ کردن مواجه نمیشید. پیشنهاد میکنم از سایر نرم افزار هایی که در این زمینه وجود دارن مانند clementine یا weka استفاده کنید و درخت بدست آمده را با درختی که در متلب ساختید مقایسه کنید. همچنین شما میتونید با استفاده از تکنیک های هرس کردن درخت خودتون رو کوچکتر کنید تا پیچیدگی محاسباتی کاهش پیدا کنه. موفق باشید |
شما برای این کار با فرض اینکه هر سطر از ماتریستون نشان دهنده یک قانون باشد که مقدار صفر نشان دهنده این است که مقدار آن ویژکی برایتان مهم نیست. خیلی راحت میتونین داده تست (که یک سطر می باشد) را با تک تک سطرها مقایسه کنین. برای اینکه سرعت اجرا بره بالا هرجا دیدید یکی از ویژگیها با یکدیگر متفاوت است برید سراغ سطر بعدی. شما نیاز به حلقه دارین و مجبور هستین ازش استفاده کنین!!!
هرجا قانون با اون داده تست منطبق شد و شماره کلاس پیدا شد دیگر نیازی نیست بقیه قوانین مقایسه شوند. فقط مشکلی که هست این است که برای هر داده تست نیاز است به صورت خطی عمل مقایسه انجام شود که در بدترین حالت برابر با تعداد قوانین * تعداد ویژگیها خواهد بود که مقدار قابل توجهی است. برای این کار شما میتونین یکبار عمل مرتب سازیو انجام بدین . به این صورت که ابتدا بر اساس مقادیر ویژگی اول قوانین مرتب شوند . سپس بر اساس ویژگی دوم و.... . مثلا مثل زیر: 1 3 4 5 6 1 4 2 3 5 1 4 3 5 5 2 1 3 3 2 و ... با این کار می تونین از جستجوی دودویی استفاده کنین. به این صورت که ابتدا بر اساس ویژگی اول داده تست به دنبال قوانینی میگردین که با اون منطبق هست. ابتدا از اندیس وسط قوانین شروع میکنین (مثلا 1000 تا قانون دارین از اندیس 500) و ویژگی اولشو با هم مقایسه میکنین بر اساس اون می فهمین باید برین سراغ زیر بازه اول یا دوم . بعد از اینکه اولین و آخرین قانون با این مقدار ویژگی پیدا شد، میرید سراغ ویژگی دوم و همین کارو با این مجموعه قوانین به دست اومده انجام میدید تا بالاخره قانون منطبق شده به دست بیاد. |
ضمن تایید فرمایشات دوستان mahdiii و babak_1234، اطلاع ندارم که در نرم افزار Matlab تابع، تولباکس یا هر چیز دیگری از قبل برای اینکار آماده کردند یا خیر.
قطع به یقین اگر 17 ستون و برای هر ستون 10 مقدار اسمی داشته باشیم 10 به توان 17 حالت داریم. با توجه به 1900 گره پایانی در درخت شما اگر از درخت تصمیم گیری استفاده می کنید در تبدیل درخت به ماتریس همون 1900 سطر در احیانا 18 ستون کفایت می کنه (یکی برای کلاس مورد نظر). حالا ما اگر یک بار به ازای یکی از 1900 سطر کل 12 هزار سطر داده های تست شما رو جستجو کنیم ممکنه چند مورد از داده ها با اون قانون همخوانی داشته باشند که اگر این داده ها رو به فضای دیگری از حافظه انتقال بدیم برای جستجو در گام بعدی فضای کمتری از حافظه رو خواهیم گشت و لذا سرعت هر بار جستجو افزایش پیدا می کنه و با توجه به اینکه هر انتقال زمان کمی میبره (به خصوص اگر از لیست پیوندی استفاده کرده باشید) این فرآیند اضافی توجیه پذیر هستش. (البته اگر بخواهید از روش جستجوی باینری استفاده کنید کار با لیست پیوندی کمی مشکل هستش) داده های تست شما به نظر، زیاد نسیت. ولی با این شرایط هم توصیه دارم در شرایط مسئله خودتون بازنگری کنید و تعداد مشخصه ها رو حتی المقدور کمتر کنید. |
زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۰۵:۱۱ بعد از ظهر ميباشد. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.