در قسمت قبل تکنیکهای پیش پردازش داده ها معرفی شدند. پس از پاکسازی مجموعهداده، مرحله بعدی تقسیم داده به دو قسمت داده های آموزش و تست است. بسیار مهم است که مدل را با همان دادههایی که آموزش دادهاید، آزمایش نکنید.
. . . .
تقسیم داده های آموزش و تست
در تقسیم داده های آموزش و تست نسبت دو دسته تقسیم شده باید حدود 70/30 یا 80/20 باشد یعنی داده آموزشی باید شامل 70 تا 80 درصد ردیفهای مجموعهداده باشد و بقیه 20 تا 30 درصد از ردیفها، داده آزمایشی باشد. نکته مهم تقسیم داده از ردیفها است-نه از ستونها.
دیتاست رایگان یادگیری ماشین: در کانال تلگرام پرشین دیتا، به دیتاست رایگان برای پروژههای یادگیری ماشین و هوش مصنوعی دسترسی داشته باشید.
قبل از تقسیم داده های آموزش و تست، باید ترتیب ردیفهای مجموعهداده را به شکل تصادفی جابهجا (Randomize) کنید. این کار از سوگیری (Bias) مدل جلوگیری میکند، چون ممکن است بسته به زمان جمعآوری دادهها یا هر معیار دیگری، ردیفها به شکل ترتیبی (Sequentially) مرتب شده باشند. با انجام ندادن چنین کاری، ممکن است بهصورت تصادفی از واریانس مهم دادهی آموزشی غافل شوید. در نتیجه در زمان اعمال مدل آموزشدیده بر روی داده آزمایشی، ممکن است نتایج عجیب و ناخواسته تولید شود.
پس از تغییر دادن ترتیب ردیفها بهصورت تصادفی، آماده خواهید بود تا ساخت مدل را شروع کرده و آن را بر روی داده آموزشی اعمال کنید. 30 درصد داده باقیمانده، بهصورت جداگانه، برای آزمایش دقت مدل نگهداری میشود.
در یادگیری با نظارت، مدل با داشتن داده آموزشی و خروجی مطلوب (y)، توسعه داده میشود. ماشین برای محاسبه خروجی نهایی (y)، رابطههای بین ویژگیها (X) در مجموعه آموزشی را تحلیل میکند.
اندازه گیری دقت مدل یادگیری ماشین
قدم بعدی، اندازهگیری عملکرد مدل است. یک روش رایج برای بررسی دقت پیشبینیها، معیار میانگین خطای مطلق (Mean Absolute Error) است که هر پیشبینی در مدل را بررسی میکند و یک امتیاز میانگین خطا برای هر پیشبینی ارائه میدهد.
در کتابخانه Scikit-learn، میانگین خطا مطلق به کمک تابع model.predict و اعمال آن بر روی X (ویژگیها) محاسبه میشود. این تابع به این شکل کار میکند که ابتدا yهای مجموعهداده آموزشی وارد میشود و سپس برای هر ردیف از مجموعهداده یک پیشبینی تولید میکند. Scikit-learn مقادیر پیشبینی شده توسط مدل را با خروجی صحیح (مقادیر واقعی که از قبل داریم) مقایسه میکند و دقت آن را اندازهگیری میکند. اگر نرخ خطای داده های آموزش و تست پایین باشد پس مدل خوب آموزشدیده و الگوها و ترندهای اساسی و پنهانی مجموعهداده را بهخوبی یاد گرفته است.
وقتی مدل، تعداد کافی از مقادیر داده آزمایشی را بهدرستی پیشبینی کند، برای استفاده در محیط عملیاتی و کاری آماده خواهد بود. اگر مدل در پیشبینی مقادیر داده آزمایشی شکست بخورد، موارد مختلفی را باید چک کنید مثل این که آیا ردیفهای داده های آموزش و تست بهدرستی جابهجایی تصادفی داشتهاند یا خیر. از سوی دیگر، ممکن است نیاز داشته باشید ابرپارامترهای (Hyperparameter) مدل را عوض کنید.
هر الگوریتم ابرپارامترهای خاص خودش را دارد که مربوط به تنظیمات الگوریتم است. به زبان ساده، این تنظیمات موارد مختلفی را کنترل میکند از جمله اینکه مدل چقدر سریع الگوها را یاد بگیرد یا اینکه چه الگوهایی را شناسایی و تحلیل کند.
حال که با داده های آموزش و تست آشنا شدیم، لازم است اعتبارسنجی متقابل را بشناسیم.
دوره آموزشی: می خواهید دادههایتان را خودتان جمع آوری کنید و یک دیتاست برای خودتان بسازید؟ پس دوره آموزش پروژه محور وب اسکرپینگ را در کانال یوتیوب دیتاهاب ببینید.
اعتبارسنجی متقابل (Cross Validation) چیست؟
با اینکه تقسیم داده های آموزش و تست در توسعه مدل از دادههای موجود میتواند مؤثر باشد، این سؤال باقی میماند که آیا مدل بر روی دادههای جدید خوب کار میکند. اگر مجموعهداده موجود برای ساخت یک مدل خیلی کوچک باشد، یا اگر تقسیم دادهها به دو بخش داده های آموزش و تست از نقطهی درست انجام نشده باشد، در نتیجه عملکرد مدل در دنیای واقعی ضعیف میشود.
خوشبختانه، یک راهحل مؤثر برای این مشکل وجود دارد. بهجای تقسیم دادهها به دو قسمت (یکی برای آموزش و یکی برای آزمایش)، از روش اعتبارسنجی متقابل (Cross Validation) استفاده کنیم. این روش دسترسی دادههای آموزشی را با تقسیم دادهها به چندین ترکیب و آزمایش هر ترکیب خاص، بیشینه میکند.
اعتبارسنجی متقابل به دو روش اصلی قابل انجام است. روش اول، اعتبارسنجی متقابل کامل (Exhaustive Cross Validation) است که شامل یافتن و آزمایش تمام ترکیبهای ممکن برای تقسیم نمونه اصلی به مجموعه آموزشی و مجموعه آزمایشی است. روش دیگر و معمولتر اعتبارسنجی متقابل ناکامل (Non-exhaustive Cross Validation) است که بهعنوان اعتبارسنجی k-fold شناخته میشود. این تکنیک شامل تقسیم داده به k سطل معین و نگهداری یکی از سطلها، برای آزمایش مدل، در هر مرحله است.
روش k-fold در یادگیری ماشین
در تقسیم داده های آموزش و تست، برای انجام اعتبارسنجی k-fold، دادهها در ابتدا به طور تصادفی به k سطل با سایز یکسان تقسیم میشوند. پس از آنیکی از سطلها برای آزمایش رزرو میشود و برای اندازهگیری و ارزیابی عملکرد k-1 سطل باقیمانده استفاده میشود. شکل زیر اعتبارسنجی k-fold را نشان میدهد.
فرایند اعتبارسنجی متقابل بهاندازه k بار (fold) تکرار خواهد شد. در هر fold، یک سطل دستنخورده باقی میماند تا مدلی که به کمک دیگر سطلها آموزشدیده را، آزمایش کند. این فرایند تا جایی تکرار خواهد شد که تمام سطلها بهعنوان سطل آموزش و آزمایش مورداستفاده قرار بگیرند. پس از آن نتایج ترکیب میشوند تا یک مدل واحد را فرمولهسازی کنند.
با استفاده از تمام دادهها در هر دو بخش آموزش و تست، تکنیک اعتبارسنجی k-fold خطاهای بالقوه (مثل برازش بیش از حد، Overfitting) که با اتکا بر روی یک تقسیم ثابت از داده آموزشی و آزمایشی اتفاق میافتد را بهشدت کم میکند.
دوره آموزشی: برای یادگیری کار با دیتاستها در پروژههای واقعی یادگیری ماشین، آموزش رایگان یادگیری ماشین را در کانال یوتیوب دیتاهاب ببینید.
چه میزان داده نیاز داریم؟
یک سؤال مشترک برای دانشجویانی که یادگیری ماشین را آغاز میکنند این است که چه تعداد داده برای آموزش مجموعهدادهام نیاز دارم؟ در کل، اگر مجموعهداده آموزشی شامل یک طیف کامل از ترکیب ویژگیها بشود، یادگیری ماشین بهتر عمل میکند. یک طیف کامل از ترکیب ویژگیها به چه شکل خواهد بود؟ فرض کنید که یک مجموعهداده درباره دانشمندان داده با ویژگیهای زیر دارید:
- مدرک دانشگاهی (X)
- تجربه تخصصی بیش از 5 سال (X)
- فرزندان (X)
- حقوق (y)
برای دستیابی به رابطهای که بین سه ویژگی اول (X) با حقوق (y) دانشمندان داده وجود دارد، به مجموعهدادهای نیاز داریم که شامل مقدار y برای هر ترکیب از ویژگیها باشد. برای مثال، باید حقوق دانشمندان داده دارای یک مدرک دانشگاهی، تجربه تخصصی بیش از 5 سال و بدون فرزند، و همینطور دانشمندان داده با یک مدرک دانشگاهی، بیش از 5 سال تجربه تخصصی و دارای فرزند را بدانیم.
هر چهقدر ترکیبهای بیشتری موجود باشند، درک مدل نسبت به تأثیر هر ویژگی روی y (حقوق) بیشتر و بهتر میشود. در نتیجه زمانی که از مدل برای داده آزمایشی یا دادههای دنیای واقعی استفاده میکنیم، اطمینان بیشتری به صحت عملکرد مدل خواهیم داشت. در غیر این صورت مدل در برخورد با ترکیباتی که قبلاً ندیده است سریعاً به مشکل برمیخورد.
معمولاً یک مدل یادگیری ماشین باید حداقل ده برابر تعداد کل ویژگیهایش، داده داشته باشد. در این مثال با سه ویژگی، داده آموزشی حداقل باید سی ردیف داده، داشته باشد.
نکته قابلتوجه دیگر این است که دادههای مرتبط بیشتر برای مدل بهتر است چون باعث میشود تا ترکیبات بیشتری را بررسی کنید و در این صورت پیشبینیهای درست بیشتری تضمین میشود. در برخی حالتها، شاید امکانپذیر یا مقرونبهصرفه نباشد تا برای تمام ترکیبهای ممکن، داده جمعآوری بشود. در چنین حالتهایی، باید با داده های آموزش و تست در دسترس، کار خود را انجام بدهید.
. . . .
و در انتها…
در مقالات اخیر درباره پاکسازی داده و تقسیم داده های آموزش و تست صحبت کردیم. بنابراین مجموعهداده آماده است و میتوان الگوریتمهای یادگیری ماشین را روی آن اعمال کرد. در مقالات پیشرو الگوریتمهای معروف و پراستفاده در یادگیری ماشین بررسی میشوند. لطفاً توجه داشته باشید که بحث در مورد برخی معادلات اجتنابناپذیر بوده ولی تاحدامکان سعی کردهام آنها را ساده نگه دارم. بسیاری از تکنیکهای یادگیری ماشین که در اینجا درباره آنها صحبت میکنیم قبلاً پیادهسازی شده و لازم به پیادهسازی مجدد نیست و بهراحتی میتوان از پیادهسازیهای موجود استفاده کرد.
آشنایی با الگوریتمها را با رگرسیون شروع میکنیم و در مقاله بعد یاد می گیریم رگرسیون چیست و چه انواعی دارد.
دوره آموزشی: هنوز انجام پروژه یادگیری ماشین شروع نکردید، چون برنامهنویسی بلد نیستید؟ اصلا نگران نباشید. دوره آموزش پایتون ویژه هوش مصنوعی را در کانال یوتیوب دیتاهاب ببینید.
2 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
سلام
مطالبتون عالیه
فقط برای دسترسی به مقالات قبلی درخصوص تقسیم داده های اموزش و تست خواستم بدونم؟
چون به مطالب قبلی نیاز دارم لطفا راهنماییم کنید.
سلام وقت بخیر
ممنون از لطف شما
مطلبی که باید در نظر بگیرید این هست که در یادگیری ماشین مرسوم هست داده ها حداقل به دو بخش تست و ترین تقسیم شوند. (البته بهتر هست به سه بخش تقسیم شوند) نسبت تقسیم داده ها معمولا 30 به 70 است. البته 20 به 80 و موارد دیگر هم پر استفاده است. البته یک اصل و باید نیست یعنی ممکن هست کسی به دلخواه نسبت 5 به 95 اعمال کند. پس قانون کلی برای آن وجود ندارد. و باید در نظر گرفت که انتخاب این نسبت به شدت روی نتیجه تاثیر می گذارد.
پ.ن: اگر می خواهید نتایج ثابت بماند باید یک نسبت مشخص مثل 30 به 70 انتخاب کنید و سپس یک Seed تعریف کنید که داده های ترین و تست ثابت بمانند.