قبل از اینکه بگی یک مدل بهتره، فقط نپرس Accuracy اون چقدره، بپرس این Accuracy چطور و روی چه دادههایی بهدست اومده. اینجاست که آمار به ما کمک میکنه بفهمیم یک عدد ممکنه کاملاً درست محاسبه شده باشه، اما هنوز تصویر کاملی از مسئله بهمون نده.
یکی از دانشجوهای عزیزم، پروژهای برای تشخیص خرابی تجهیزات صنعتی انجام داده بود، اسم دادههاش رو گذاشته بود MachineFailureDataset
دو مدل روی این دادهها آموزش داده بود: - Model A، یک مدل مبتنی بر درخت تصمیم - Model B، یک مدل مبتنی بر رگرسیون لجستیک
دادهها شامل اطلاعاتی مثل اینها بودن: - دمای دستگاه - میزان لرزش - فشار کاری - ساعت کارکرد - وضعیت خرابی یا سلامت دستگاه
ایشون دادهها رو به دو گروه تقسیم کرده بود: - Easy Cases، نمونههایی که الگوی خرابی توشون واضح بود - Difficult Cases، نمونههایی که علائم خرابیشون شباهت زیادی به وضعیت عادی داشت
بعد نتیجهی ارزیابی رو برام فرستاد و گفت: دکتر شیرافکن، Model A بهتره، چون Accuracy کلی اون ۹۲٫۵ درصده، در حالی که Accuracy کلی Model B فقط ۸۱٫۹ درصد شده
ازش پرسیدم: عملکرد دو مدل رو برای هر گروه هم جداگانه بررسی کردی؟ گفت: نه استاد، فقط Accuracy نهایی رو گزارش کردم
با هم جزئیات رو بررسی کردیم. نتیجه جالب بود، Model B توی هر دو گروه عملکرد بهتری داشت، اما Accuracy کلی Model A بیشتر شده بود.
دلیلش چی بود؟ ترکیب دادههایی که برای محاسبهی Accuracy کلی استفاده شده بود، برای دو مدل یکسان نبود: - توی ارزیابی Model A، حدود ۹۰ درصد نمونهها ساده بودن - توی ارزیابی Model B، حدود ۷۰ درصد نمونهها دشوار بودن پس Accuracy کلی فقط عملکرد مدل رو نشون نمیداد، بلکه از ترکیب دادهها هم تأثیر میگرفت. به ایشون گفتم: اینجا تو فقط دو مدل رو با هم مقایسه نکردی، بلکه عملکرد دو مدل رو روی دو توزیع متفاوت از دادهها مقایسه کردی. در چنین شرایطی، نتیجهی نهایی میتونه گمراهکننده باشه، ممکنه یک مدل توی همهی گروهها عملکرد بهتری داشته باشه، اما چون سهم بیشتری از نمونههای دشوار رو دیده، Accuracy کلی پایینتری نشون بده.
موقع ارزیابی مدل فقط به یک عدد کلی نگاه نمیکنیم، باید بپرسیم: ۱. هر مدل روی چه دادههایی ارزیابی شده؟ ۲. سهم هر گروه توی مجموعهداده چقدره؟ ۳. عملکرد مدل توی هر زیرگروه چطوره؟ ۴. آیا هر دو مدل روی یک مجموعهدادهی مشترک آزمایش شدن؟ ۵. آیا معیار انتخابشده با هدف واقعی پروژه هماهنگه؟
یک نکتهی مهم اینه که اگه دو مدل رو روی یک مجموعهدادهی مشترک با توزیع یکسان ارزیابی کنیم، مقایسهی Accuracy کلی منصفانهتر میشه. اما حتی اون موقع هم بهتره عملکرد مدل رو توی گروههای مختلف بررسی کنیم، چون یک میانگین کلی ممکنه ضعف مدل رو توی یک گروه خاص پنهان کنه.
چند روز پیش یکی از دانشجوهای گلم 🌷 که تازه کاره، نتیجهی تحلیل دادههش رو برام فرستاد و گفت: دکتر شیرافکن، بین سرعت خودرو و مصرف سوخت تقریباً هیچ رابطهای وجود نداره، چون Pearson Correlation نزدیک صفر شده! از او پرسیدم: قبل از محاسبهی Correlation، نمودار Scatter را رسم کردی؟ گفت: نه، فقط ضریب همبستگی را محاسبه کردم.
نمودار را رسم کردم. الگوی دادهها تقریباً شبیه یک منحنی U شکل بود: - در سرعتهای پایین، مصرف سوخت زیاد بود(چون خودرو در شرایط شهری، توقف و حرکت و دندههای پایین کار میکرد.) - در سرعتهای متوسط، مصرف سوخت کاهش پیدا میکرد. - در سرعتهای بالا، مصرف دوباره افزایش داشت(بهدلیل مقاومت هوا و افزایش دور موتور.)
پس بین سرعت و مصرف سوخت رابطه وجود داشت، اما این رابطه خطی نبود.
در بخش اول، با افزایش سرعت، مصرف کاهش پیدا میکرد و در بخش دوم، با افزایش سرعت، مصرف افزایش. این دو روند میتوانستن اثر یکدیگر را خنثی کنن و مقدار Pearson Correlation را به صفر نزدیک کنن.
به دانشجوی عزیزم گفتم: مقدار Pearson Correlation اشتباه محاسبه نشده. این ضریب فقط به سؤال متفاوتی پاسخ میده: آیا بین دو متغیر یک رابطهی خطی وجود داره؟ بنابراین مقدار نزدیک به صفر لزوماً به این معنا نیست که بین دو متغیر هیچ رابطهای وجود نداره. ممکنه رابطهای غیرخطی، مانند رابطهی U شکل، وجود داشته باشه که Pearson آن را بهخوبی نشان نمیده.
===
در تحلیل داده، یک روند ساده میتونه جلوی یک نتیجهگیری اشتباه را بگیره: 1. ابتدا دادهها را با Scatter Plot بررسی کنیم. 2. شکل رابطه را ببینیم. 3. سپس معیار آماری مناسب را انتخاب کنیم. 4. در صورت وجود رابطهی غیرخطی، از روشهایی مانند رگرسیون چندجملهای، مدلهای درختی یا مدلهای غیرخطی استفاده کنیم.
همچنین باید توجه داشت که Spearman Correlation هم برای هر رابطهی غیرخطی مناسب نیست. این ضریب بیشتر رابطههای یکنواخت را اندازهگیری میکنه، درحالیکه یک رابطهی U شکل لزوماً یکنواخت نیست.
نکتهی اصلی: قبل از اینکه از یک عدد نتیجهگیری کنیم، باید بدانیم آن عدد دقیقاً چه چیزی را اندازهگیری میکنه. مقدار Correlation نزدیک به صفر همیشه نمیگه: بین دو متغیر رابطهای وجود نداره. گاهی فقط میگه: رابطهای که پیدا کردی، خطی نیست.
===
در ضمن امروز کلاس ریاضیات برای ماشین لرنینگ شروع میشه. (۳ جلسه دو ساعتی - نهصد هزار تومان)(فعلا ۵۰ نفر ثبت نام کردند شاید تا ۳ نفر دیگه هم ثبت نام کنم!)
⭐ پرمخاطبترین آموزش های دکتر فرشید شیرافکن در فرادرس
دکتر فرشید شیرافکن از مدرسین باسابقه و شناختهشده فرادرس در حوزههای برنامهنویسی، علوم کامپیوتر، دادهکاوی و یادگیری ماشین هستند و از سال ۱۳۷۵ در زمینه آموزش، برنامهنویسی و علم داده فعالیت دارند.
اگر به دنبال یادگیری برنامهنویسی و مباحث تخصصی علوم کامپیوتر هستید، این آموزشها از پرمخاطبترین آموزشهای ایشان در فرادرس هستند:
چند وقت پیش یکی از دانشجوهای مستعد و پرتلاشم گفت: استاد، دیگه کلافه شدم! یک دیتاست سنگین دارم، یک Fold Cross-Validation با cv=10 روی Random Forest زدم، لپتاپم چند ساعته داره پردازش میکنه و داغ کرده... تازه هر هایپرپارامتری رو که میخوام تست کنم، دوباره باید کل این پروسهی سنگین تکرار بشه! وقتم داره تلف میشه، راهی نیست که بدون فدا کردن دقت اعتبارسنجی، اینقدر سیستمم زیر بار نره؟
گفتم: شما داری برای ورود به خانهای که درش بازه، دنبال کلیدساز میگردی! میدونستی خود رندوم فارست، توی ذاتش یک سیستم اعتبارسنجی خودکار، بینقص و مجانی داره که نیازی به حتی یک ثانیه پردازش اضافی نداره؟
رندوم فارست برای ساختن هر درختی در دل جنگلش، از دادههات نمونهبرداری با جایگذاری (Bootstrap) میکنه. ریاضیات به ما ثابت میکنه وقتی از یک مجموعه داده تصادفی با جایگذاری نمونه برمیداری، بر اساس حد شگفتانگیز ... هر درخت به طور میانگین حدود ۳۷ درصد از دادهها رو اصلاً در فرآیند آموزش خودش نمیبینه! به این دادههای انتخابنشده میگن Out-of-Bag یا همون OOB.»
فکر کنم چشمهایش برقی زد(من که ندیدم!) و گفت: خب این یعنی چی؟
گفتم: یعنی یک گنج پنهان! هر دادهای که در دیتاست داری، برای یکسری از درختها دادهی غریبه و دستنخوردهست. رندوم فارست میاد برای هر نمونه، فقط از درختهایی که در ساختنش اون نمونه رو ندیدن نظرخواهی میکنه و بینشون رأیگیری راه میندازه. این یعنی یک تست واقعی، دقیق و کاملاً Unbiased درست در حین ساختهشدن مدل!
----
چرا به جای کراس ولیدیشن باید از OOB Score استفاده کنی؟ ۱- سرعت مافوق تصور: به جای اینکه مدل رو ۱۰ بار از اول روی فولدها آموزش بدی، یکبار آموزش میدی و همزمان اعتبارسنجی هم انجام میشه.
۲- بدون نیاز به سوزاندن دادهها: نیازی نیست بخشی از دادههای باارزشت رو بذاری کنار فقط برای ولیدیشن؛ از ۱۰۰٪ دادهها برای یادگیری جنگل استفاده میکنی.
۳- همگرایی فوقالعاده: وقتی تعداد درختهات به حد مناسبی برسه، خطای OOB عملاً منطبق بر خطای Test واقعی کار میکنه.
گفتم فقط کافی بنویسی : oob_score=True
----
علم یادگیری ماشین پر از این ظرافتهای مهندسیه. گاهی اوقات تفاوت یک برنامهنویس عادی با یک متخصص داده در همینه؛ متخصص دنبال اجرای کورکورانهی کدها نیست، منطق پشت الگوریتمها رو میشناسه و از منابعش هوشمندانه استفاده میکنه.»
کدش رو تغییر داد، اجرا کرد و در عرض چند ثانیه دقیقترین تخمین خطا روی صفحهی مانیتورش نشست. رضایتش، بهترین پاداش بود. ✨
---
یک نکته برای همراهان اهل فن: اگر با رندوم فارست کار میکنید و دیتاست سنگینی دارید، انرژی سیستمتان را پای فولدبندیهای زمانبر هدر ندهید؛ به OOB اعتماد کنید، چون ریاضیات هرگز دروغ نمیگوید!
--- این موضوع را دیشب در کلاس آنلاین ماشین لرنینگ تکمیلی آموزش دادم. توی کلاسهام از صفر شروع میکنم و به سطحی بالاتر از هر دوره دیگه میرسونم. این حاصل سالها تجربه در تدریس و البته عشق 💗به تدریس و دانشجویانم هست.
How can I read @aiwithdrshirafkan without a Telegram account?
TGViewer shows the public web preview Telegram publishes for ماشین لرنینگ و دیپ لرنینگ با شیرافکن: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does ماشین لرنینگ و دیپ لرنینگ با شیرافکن have?
ماشین لرنینگ و دیپ لرنینگ با شیرافکن (@aiwithdrshirafkan) has 3.53K subscribers on Telegram, refreshed roughly every 30 minutes.
Does ماشین لرنینگ و دیپ لرنینگ با شیرافکن know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.