فرآیند ساخت، استفاده و نگهداری مدلهای یادگیری ماشین و دادههایی که از آنها استفاده میکنند، بسیار متفاوت از بسیاری از جریانهای کاری توسعه دیگر است. در این درس، این فرآیند را روشن میکنیم و تکنیکهای اصلی که باید بدانید را توضیح میدهیم. شما:
فرآیند ساخت، استفاده و نگهداری از مدلهای یادگیری ماشین و دادههایی که استفاده میکنند، فرآیندی بسیار متفاوت از بسیاری دیگر از جریانهای کاری توسعه است. در این درس، فرآیند را رمزگشایی میکنیم و تکنیکهای اصلی که باید بدانید را مشخص میکنیم. شما:
- فرآیندهای پایهای یادگیری ماشین را در سطح بالا درک خواهید کرد.
- مفاهیم پایهای مانند «مدلها»، «پیشبینیها» و «دادههای آموزشی» را بررسی خواهید کرد.
## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/)
[](https://youtu.be/4NGM0U2ZSHU "یادگیری ماشین برای مبتدیان - تکنیکهای یادگیری ماشین")
> 🎥 روی تصویر بالا کلیک کنید تا ویدیوی کوتاهی درباره این درس مشاهده کنید.
> 🎥 روی تصویر بالا کلیک کنید برای ویدئویی کوتاه که این درس را مرور میکند.
## مقدمه
در سطح بالا، هنر ایجاد فرآیندهای یادگیری ماشین (ML) شامل چندین مرحله است:
در سطح کلی، هنر ساخت فرآیندهای یادگیری ماشین (ML) شامل چندین مرحله است:
1. **تصمیمگیری درباره سؤال**. بیشتر فرآیندهای ML با پرسیدن یک سؤال شروع میشوند که نمیتوان آن را با یک برنامه شرطی ساده یا موتور مبتنی بر قوانین پاسخ داد. این سؤالات اغلب حول پیشبینیهایی بر اساس مجموعهای از دادهها میچرخند.
2. **جمعآوری و آمادهسازی دادهها**. برای پاسخ به سؤال خود، به داده نیاز دارید. کیفیت و گاهی اوقات کمیت دادههای شما تعیین میکند که چقدر میتوانید به سؤال اولیه خود پاسخ دهید. تجسم دادهها جنبه مهمی از این مرحله است. این مرحله همچنین شامل تقسیم دادهها به گروههای آموزشی و آزمایشی برای ساخت مدل است.
3. **انتخاب روش آموزشی**. بسته به سؤال شما و ماهیت دادههایتان، باید انتخاب کنید که چگونه میخواهید مدلی را آموزش دهید که بهترین بازتاب دادههای شما باشد و پیشبینیهای دقیقی بر اساس آن انجام دهد. این بخش از فرآیند ML شما نیاز به تخصص خاص و اغلب مقدار قابل توجهی آزمایش دارد.
4. **آموزش مدل**. با استفاده از دادههای آموزشی خود، از الگوریتمهای مختلفی برای آموزش مدل استفاده میکنید تا الگوهای موجود در دادهها را شناسایی کند. مدل ممکن است از وزنهای داخلی استفاده کند که میتوان آنها را تنظیم کرد تا بخشهای خاصی از دادهها را نسبت به دیگران ترجیح دهد و مدل بهتری بسازد.
5. **ارزیابی مدل**. از دادههایی که قبلاً دیده نشدهاند (دادههای آزمایشی شما) از مجموعه جمعآوریشده خود استفاده میکنید تا ببینید مدل چگونه عمل میکند.
6. **تنظیم پارامترها**. بر اساس عملکرد مدل خود، میتوانید فرآیند را با استفاده از پارامترها یا متغیرهای مختلفی که رفتار الگوریتمهای استفادهشده برای آموزش مدل را کنترل میکنند، دوباره انجام دهید.
7. **پیشبینی**. از ورودیهای جدید برای آزمایش دقت مدل خود استفاده کنید.
1. **تصمیمگیری درباره سؤال**. اکثر فرآیندهای ML با پرسیدن سؤالی شروع میشوند که نمیتوان به آن با برنامه شرطی ساده یا موتور قوانین مبتنی بر قاعده پاسخ داد. اغلب این سؤالات حول محور پیشبینیها بر اساس مجموعهای از دادهها میچرخند.
2. **جمعآوری و آمادهسازی داده**. برای پاسخ به سؤال خود، به داده نیاز دارید. کیفیت و گاهی کمیت دادههای شما تعیین میکند که چقدر میتوانید به سؤال اولیه خود پاسخ دهید. مصورسازی داده بخش مهمی از این مرحله است. این مرحله همچنین شامل تقسیم دادهها به گروههای آموزشی و آزمایشی برای ساخت مدل است.
3. **انتخاب روش آموزش**. بسته به سؤال شما و ماهیت دادههایتان، باید انتخاب کنید که چگونه میخواهید یک مدل را آموزش دهید تا بهترین بازتاب دادهها باشد و پیشبینیهای دقیقی انجام دهد. این بخش از فرآیند ML شما نیازمند تخصص خاص و اغلب میزان قابل توجهی آزمایش و خطا است.
4. **آموزش مدل**. با استفاده از دادههای آموزشی، از الگوریتمهای مختلف برای آموزش مدل و شناسایی الگوها در داده استفاده میکنید. مدل ممکن است از وزنهای داخلی بهره ببرد که قابل تنظیم هستند تا بخشهای خاصی از داده را برای ساخت مدلی بهتر اولویتبندی کنند.
5. **ارزیابی مدل**. از دادههایی که قبلاً دیده نشده (دادههای آزمایشی) از مجموعه جمعآوریشده خود استفاده میکنید تا ببینید مدل چگونه عمل میکند.
6. **تنظیم پارامترها**. بر اساس عملکرد مدل، میتوانید فرآیند را با پارامترها یا متغیرهای متفاوت که رفتار الگوریتمهای آموزش مدل را کنترل میکنند، از نو انجام دهید.
7. **پیشبینی**. از ورودیهای جدید برای آزمایش دقت مدل استفاده کنید.
## چه سؤالی باید پرسید؟
## چه سؤالی بپرسیم
کامپیوترها بهطور خاص در کشف الگوهای پنهان در دادهها مهارت دارند. این قابلیت برای محققانی که سؤالاتی درباره یک حوزه خاص دارند که نمیتوان بهراحتی با ایجاد یک موتور مبتنی بر قوانین شرطی پاسخ داد، بسیار مفید است. برای مثال، در یک وظیفه بیمهای، یک دانشمند داده ممکن است بتواند قوانین دستی درباره مرگومیر افراد سیگاری در مقابل غیرسیگاریها ایجاد کند.
رایانهها در کشف الگوهای پنهان در دادهها بسیار ماهر هستند. این ویژگی برای پژوهشگرانی که سؤالاتی درباره یک حوزه مشخص دارند و نمیتوان به سادگی با ایجاد موتور قوانین مبتنی بر شرط به آنها پاسخ داد بسیار مفید است. به عنوان مثال، در یک وظیفه بیمهای، یک دانشمند داده ممکن است بتواند قوانین دستی درباره مرگ و میر سیگاریها در مقابل غیرسیگاریها بسازد.
با این حال، وقتی متغیرهای زیادی وارد معادله میشوند، یک مدل ML ممکن است کارآمدتر باشد تا نرخ مرگومیر آینده را بر اساس تاریخچه سلامت گذشته پیشبینی کند. یک مثال شادتر ممکن است پیشبینی آبوهوا برای ماه آوریل در یک مکان خاص باشد، بر اساس دادههایی که شامل عرض جغرافیایی، طول جغرافیایی، تغییرات اقلیمی، نزدیکی به اقیانوس، الگوهای جریان جت و موارد دیگر است.
با این حال، وقتی بسیاری از متغیرهای دیگر وارد معادله میشوند، یک مدل یادگیری ماشین ممکن است در پیشبینی نرخ مرگ و میر آینده، بر اساس تاریخچه سلامت گذشته، کارآمدتر باشد. مثال خوشحالکنندهتر میتواند پیشبینی هوای ماه آوریل در یک مکان مشخص با استفاده از دادههایی شامل عرض جغرافیایی، طول جغرافیایی، تغییرات اقلیمی، نزدیکی به اقیانوس، الگوهای جت استریم و غیره باشد.
✅ این [اسلایدها](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) درباره مدلهای آبوهوا، دیدگاه تاریخی برای استفاده از ML در تحلیل آبوهوا ارائه میدهند.
✅ این [ارائه اسلاید](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) درباره مدلهای آب و هوا دیدگاه تاریخی برای استفاده از ML در تحلیل آب و هوا ارائه میدهد.
## وظایف پیش از ساخت
## وظایف پیش از ساخت مدل
قبل از شروع به ساخت مدل خود، چندین وظیفه وجود دارد که باید انجام دهید. برای آزمایش سؤال خود و تشکیل یک فرضیه بر اساس پیشبینیهای مدل، باید چندین عنصر را شناسایی و پیکربندی کنید.
قبل از شروع به ساخت مدل خود، چند وظیفه وجود دارد که باید آنها را انجام دهید. برای آزمایش سؤال خود و تشکیل فرضیه بر اساس پیشبینیهای مدل، باید چند عنصر را شناسایی و پیکربندی کنید.
### دادهها
### داده
برای پاسخ به سؤال خود با هر نوع قطعیتی، به مقدار مناسبی از دادههای درست نیاز دارید. در این مرحله دو کار باید انجام دهید:
برای اینکه بتوانید با هر نوع اطمینانی به سؤال خود پاسخ دهید، نیاز به مقدار مناسبی از دادههای درست دارید. در این مرحله باید دو کار انجام دهید:
- **جمعآوری دادهها**. با توجه به درس قبلی درباره انصاف در تحلیل دادهها، دادههای خود را با دقت جمعآوری کنید. از منابع این دادهها، هرگونه تعصب ذاتی که ممکن است داشته باشد، آگاه باشید و منشأ آن را مستند کنید.
- **آمادهسازی دادهها**. فرآیند آمادهسازی دادهها شامل چندین مرحله است. ممکن است نیاز باشد دادهها را جمعآوری و نرمالسازی کنید اگر از منابع متنوعی آمده باشند. میتوانید کیفیت و کمیت دادهها را از طریق روشهای مختلفی مانند تبدیل رشتهها به اعداد (همانطور که در [خوشهبندی](../../5-Clustering/1-Visualize/README.md) انجام میدهیم) بهبود دهید. ممکن است دادههای جدیدی بر اساس دادههای اصلی تولید کنید (همانطور که در [طبقهبندی](../../4-Classification/1-Introduction/README.md) انجام میدهیم). میتوانید دادهها را پاکسازی و ویرایش کنید (همانطور که قبل از درس [برنامه وب](../../3-Web-App/README.md) انجام خواهیم داد). در نهایت، ممکن است نیاز باشد دادهها را تصادفیسازی و مخلوط کنید، بسته به تکنیکهای آموزشی شما.
- **جمعآوری داده**. با در نظر گرفتن درس قبلی درباره عدالت در تحلیل دادهها، دادههای خود را با دقت جمعآوری کنید. از منابع این دادهها آگاه باشید، از هرگونه تعصب ذاتی آنها مطلع باشید و منشأ آنها را مستندسازی کنید.
- **آمادهسازی داده**. چند مرحله در فرآیند آمادهسازی داده وجود دارد. ممکن است نیاز باشد دادهها را جمعآوری و نرمالسازی کنید اگر از منابع مختلف آمدهاند. میتوانید کیفیت و کمیت داده را با روشهای مختلفی مانند تبدیل رشتهها به عدد (همانطور که در [خوشهبندی](../../5-Clustering/1-Visualize/README.md) انجام میدهیم) بهبود بخشید. همچنین ممکن است دادههای جدیدی بر اساس دادههای اصلی تولید کنید (همانطور که در [دستهبندی](../../4-Classification/1-Introduction/README.md) انجام میدهیم). میتوانید دادهها را تمیز و ویرایش کنید (همانطور که قبل از درس [وب اپ](../../3-Web-App/README.md) انجام میدهیم). در نهایت، بسته به تکنیکهای آموزش، ممکن است نیاز باشد آنها را بهصورت تصادفی مرتب کنید و جابجا کنید.
✅ پس از جمعآوری و پردازش دادههای خود، لحظهای وقت بگذارید تا ببینید آیا شکل آنها به شما اجازه میدهد سؤال مورد نظر خود را پاسخ دهید. ممکن است دادهها در وظیفه مورد نظر شما عملکرد خوبی نداشته باشند، همانطور که در درسهای [خوشهبندی](../../5-Clustering/1-Visualize/README.md) کشف میکنیم!
✅ پس از جمعآوری و پردازش دادهها، کمی وقت بگذارید تا ببینید شکل دادهها آیا به شما امکان میدهد به سؤال هدف خود پاسخ دهید یا خیر. ممکن است دادهها در وظیفهٔ مورد نظر عملکرد خوبی نداشته باشند، همانطور که در درسهای [خوشهبندی](../../5-Clustering/1-Visualize/README.md) میبینیم!
### ویژگیها و هدف
یک [ویژگی](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) یک خاصیت قابل اندازهگیری از دادههای شماست. در بسیاری از مجموعه دادهها، بهعنوان عنوان ستونهایی مانند «تاریخ»، «اندازه» یا «رنگ» بیان میشود. متغیر ویژگی شما، که معمولاً در کد بهصورت `X` نشان داده میشود، متغیر ورودی است که برای آموزش مدل استفاده خواهد شد.
[ویژگی](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) خصوصیتی قابل اندازهگیری از دادههای شمااست. در بسیاری از مجموعه دادهها، به شکل عنوان ستونهایی مانند 'تاریخ'، 'اندازه' یا 'رنگ' بیان میشود. متغیر ویژگی شما، که معمولاً در کد به صورت `X` نمایش داده میشود، متغیر ورودی است که برای آموزش مدل استفاده میشود.
هدف چیزی است که شما سعی دارید پیشبینی کنید. هدف که معمولاً بهصورت `y` در کد نشان داده میشود، پاسخ به سؤالی است که شما سعی دارید از دادههای خود بپرسید: در ماه دسامبر، کدوهای **چه رنگی** ارزانتر خواهند بود؟ در سانفرانسیسکو، کدام محلهها بهترین **قیمت** املاک را خواهند داشت؟ گاهی هدف بهعنوان ویژگی برچسب نیز شناخته میشود.
هدف چیزی است که قصد دارید پیشبینی کنید. هدف که معمولاً به صورت `y` در کد نمایش داده میشود، پاسخی است به سؤالی که از دادهها میپرسید: در دسامبر، کدوهای ما ارزانترین کدام رنگ خواهند بود؟ در سانفرانسیسکو، کدام محلهها بهترین قیمت املاک را خواهند داشت؟ گاهی اوقات هدف به عنوان برچسب (label) نیز نامیده میشود.
### انتخاب متغیر ویژگی
🎓 **انتخاب ویژگی و استخراج ویژگی** چگونه میدانید کدام متغیر را هنگام ساخت مدل انتخاب کنید؟ احتمالاً فرآیندی از انتخاب ویژگی یا استخراج ویژگی را طی خواهید کرد تا متغیرهای مناسب برای بهترین مدل را انتخاب کنید. با این حال، آنها یکسان نیستند: «استخراج ویژگی ویژگیهای جدیدی از توابع ویژگیهای اصلی ایجاد میکند، در حالی که انتخاب ویژگی یک زیرمجموعه از ویژگیها را بازمیگرداند.» ([منبع](https://wikipedia.org/wiki/Feature_selection))
🎓 **انتخاب ویژگی و استخراج ویژگی** چگونه میدانید هنگام ساخت مدل کدام متغیر را انتخاب کنید؟ احتمالاً از فرایند انتخاب ویژگی یا استخراج ویژگی عبور خواهید کرد تا متغیرهای مناسب را برای مدل با بهترین عملکرد انتخاب کنید. اما این دو یکسان نیستند: «استخراج ویژگی ویژگیهای جدیدی از توابع ویژگیهای اصلی ایجاد میکند، در حالی که انتخاب ویژگی زیرمجموعهای از ویژگیها را بازمیگرداند.» ([منبع](https://wikipedia.org/wiki/Feature_selection))
### تجسم دادههای خود
### مصورسازی دادههایتان
یکی از جنبههای مهم ابزارهای دانشمند داده، قدرت تجسم دادهها با استفاده از چندین کتابخانه عالی مانند Seaborn یا MatPlotLib است. نمایش دادههای خود بهصورت بصری ممکن است به شما اجازه دهد تا همبستگیهای پنهانی را کشف کنید که میتوانید از آنها بهرهبرداری کنید. تجسمهای شما ممکن است به شما کمک کنند تا تعصب یا دادههای نامتعادل را کشف کنید (همانطور که در [طبقهبندی](../../4-Classification/2-Classifiers-1/README.md) کشف میکنیم).
جنبه مهمی از جعبه ابزار دانشمند داده توانایی مصورسازی دادهها با استفاده از چندین کتابخانه عالی مانند Seaborn یا MatPlotLib است. نمایش دادهها به صورت بصری ممکن است اجازه دهد همبستگیهای پنهان را کشف کنید که میتوانید از آن بهره ببرید. مصورسازی شما همچنین ممکن است به کشف تعصب یا دادههای نامتقارن کمک کند (همانطور که در [دستهبندی](../../4-Classification/2-Classifiers-1/README.md) میبینیم).
### تقسیم مجموعه داده خود
### تقسیم مجموعه داده
قبل از آموزش، باید مجموعه داده خود را به دو یا چند بخش با اندازههای نابرابر تقسیم کنید که همچنان دادهها را بهخوبی نمایندگی کنند.
قبل از آموزش، باید مجموعه داده خود را به دو یا چند بخش با اندازههای نامساوی تقسیم کنید که هنوز نماینده دادهها هستند.
- **آموزشی**. این بخش از مجموعه داده به مدل شما برای آموزش آن اختصاص داده میشود. این مجموعه بخش عمدهای از مجموعه داده اصلی را تشکیل میدهد.
- **آزمایشی**. مجموعه داده آزمایشی یک گروه مستقل از دادههاست، که اغلب از دادههای اصلی جمعآوری شده است، که برای تأیید عملکرد مدل ساختهشده استفاده میکنید.
- **اعتباریابی**. مجموعه اعتباریابی یک گروه کوچکتر مستقل از نمونههاست که برای تنظیم پارامترهای مدل یا معماری آن برای بهبود مدل استفاده میکنید. بسته به اندازه دادههای شما و سؤالی که میپرسید، ممکن است نیازی به ساخت این مجموعه سوم نداشته باشید (همانطور که در [پیشبینی سری زمانی](../../7-TimeSeries/1-Introduction/README.md) اشاره میکنیم).
- **آموزش**. این بخش از مجموعه داده برای آموزش مدل استفاده میشود. این مجموعه بخش عمدهای از داده اصلی را تشکیل میدهد.
- **آزمون**. مجموعه داده آزمایشی گروه مستقلی از دادهها است که معمولاً از داده اصلی گرفته شده و برای تأیید عملکرد مدل ساختهشده استفاده میشود.
- **اعتبارسنجی**. مجموعه اعتبارسنجی گروه کوچکتری از نمونهها است که برای تنظیم ابرپارامترهای مدل یا ساختار آن جهت بهبود مدل استفاده میکنید. بسته به اندازه داده و سؤال مطرحشده، ممکن است نیازی به ساخت این مجموعه سوم نداشته باشید (همانطور که در [پیشبینی سریهای زمانی](../../7-TimeSeries/1-Introduction/README.md) اشاره شده است).
## ساخت مدل
با استفاده از دادههای آموزشی خود، هدف شما ساخت یک مدل یا نمای آماری از دادههای شماست، با استفاده از الگوریتمهای مختلف برای **آموزش** آن. آموزش یک مدل آن را در معرض دادهها قرار میدهد و به آن اجازه میدهد تا فرضیاتی درباره الگوهای درکشده کشف کند، تأیید کند و بپذیرد یا رد کند.
با استفاده از دادههای آموزشی، هدف شما ساخت مدلی یا نمایش آماری دادهها با استفاده از الگوریتمهای مختلف برای **آموزش** آن است. آموزش مدل آن را در معرض دادهها قرار میدهد و به آن اجازه میدهد بر اساس الگوهای درکشده فرضیهسازی کند، آنها را ارزیابی کند و بپذیرد یا رد کند.
### تصمیمگیری درباره روش آموزشی
### انتخاب روش آموزش
بسته به سؤال شما و ماهیت دادههای شما، روش آموزشی را انتخاب خواهید کرد. با مرور [مستندات Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - که در این دوره استفاده میکنیم - میتوانید روشهای زیادی برای آموزش مدل را بررسی کنید. بسته به تجربه شما، ممکن است مجبور شوید چندین روش مختلف را امتحان کنید تا بهترین مدل را بسازید. احتمالاً فرآیندی را طی خواهید کرد که در آن دانشمندان داده عملکرد مدل را با تغذیه دادههای دیدهنشده ارزیابی میکنند، دقت، تعصب و سایر مسائل کاهشدهنده کیفیت را بررسی میکنند و مناسبترین روش آموزشی را برای وظیفه مورد نظر انتخاب میکنند.
بسته به سؤال و ماهیت دادهها، روشی برای آموزش انتخاب میکنید. با مرور مستندات [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - که در این دوره استفاده میکنیم - میتوانید روشهای زیادی برای آموزش مدل کشف کنید. بسته به تجربهتان، ممکن است مجبور شوید چندین روش مختلف را برای ساخت مدل بهتر امتحان کنید. احتمالاً در فرایندی قرار میگیرید که دادهکاوان عملکرد مدل را با تغذیه داده ندیده، بررسی دقت، تعصب و مشکلات کاهشدهنده کیفیت میسنجند و مناسبترین روش آموزش را برای کار انتخاب میکنند.
### آموزش مدل
با دادههای آموزشی خود آماده هستید تا آن را «تناسب» دهید و یک مدل ایجاد کنید. متوجه خواهید شد که در بسیاری از کتابخانههای ML کد 'model.fit' وجود دارد - در این زمان است که متغیر ویژگی خود را بهصورت آرایهای از مقادیر (معمولاً 'X') و یک متغیر هدف (معمولاً 'y') ارسال میکنید.
مجهز به دادههای آموزشی، آماده «تناسب» دادن مدل هستید. در بسیاری از کتابخانههای ML کد 'model.fit' را خواهید دید - این زمانی است که متغیر ویژگی خود را به صورت آرایهای از مقادیر (معمولاً 'X') و متغیر هدف (معمولاً 'y') ارسال میکنید.
### ارزیابی مدل
پس از تکمیل فرآیند آموزش (ممکن است برای آموزش یک مدل بزرگ چندین تکرار یا «دوره» طول بکشد)، میتوانید کیفیت مدل را با استفاده از دادههای آزمایشی برای سنجش عملکرد آن ارزیابی کنید. این دادهها زیرمجموعهای از دادههای اصلی هستند که مدل قبلاً آنها را تحلیل نکرده است. میتوانید جدولی از معیارهای کیفیت مدل خود چاپ کنید.
پس از تکمیل فرآیند آموزش (ممکن است برای آموزش یک مدل بزرگ چندین تکرار یا 'اپک' لازم باشد)، میتوانید کیفیت مدل را با استفاده از دادههای آزمون که قبلاً مدل آنها را ندیده است ارزیابی کنید. این دادهها زیرمجموعهای از داده اصلی هستند که مدل قبلاً تحلیل نکرده است. میتوانید جدولی از معیارهای کیفیت مدل خود چاپ کنید.
🎓 **تناسب مدل**
در زمینه یادگیری ماشین، تناسب مدل به دقت عملکرد زیرین مدل اشاره دارد که تلاش میکند دادههایی را که با آنها آشنا نیست تحلیل کند.
در زمینه یادگیری ماشین، تناسب مدل به دقت تابع پایه مدل اشاره دارد هنگامی که سعی میکند دادههایی را تحلیل کند که با آنها آشنا نیست.
🎓 **تناسب کم** و **تناسب بیشازحد** مشکلات رایجی هستند که کیفیت مدل را کاهش میدهند، زیرا مدل یا بهاندازه کافی خوب تناسب ندارد یا بیشازحد تناسب دارد. این باعث میشود مدل پیشبینیهایی انجام دهد که یا بیشازحد با دادههای آموزشی هماهنگ هستند یا بیشازحد از آنها فاصله دارند. یک مدل تناسب بیشازحد دادههای آموزشی را بیشازحد خوب پیشبینی میکند زیرا جزئیات و نویز دادهها را بیشازحد خوب یاد گرفته است. یک مدل تناسب کم دقیق نیست زیرا نمیتواند دادههای آموزشی خود یا دادههایی که هنوز «ندیده» است را بهدرستی تحلیل کند.
🎓 **کمبرازش** و **بیشبرازش** مشکلات رایجی هستند که کیفیت مدل را کاهش میدهند، زیرا مدل یا به اندازه کافی مناسب نیست یا بیش از حد مناسب. این باعث میشود مدل پیشبینیهایی انجام دهد که یا خیلی نزدیک به دادههای آموزشی است یا بسیار دور از آن. مدل بیشبرازش دادههای آموزشی را خیلی خوب پیشبینی میکند چون جزئیات و نویز دادهها را خیلی خوب یاد گرفته است. مدل کمبرازش دقیق نیست چون نه میتواند دادههای آموزشی را درست تحلیل کند و نه دادههایی که قبلاً «ندیده» است.
> اینفوگرافیک توسط [Jen Looper](https://twitter.com/jenlooper)
## تنظیم پارامترها
پس از تکمیل آموزش اولیه، کیفیت مدل را مشاهده کنید و بهبود آن را با تنظیم «پارامترهای فرا» در نظر بگیرید. درباره این فرآیند بیشتر بخوانید [در مستندات](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott).
وقتی آموزش اولیه شما کامل شد، کیفیت مدل را مشاهده کنید و در نظر بگیرید که با تنظیم 'ابرپارامترها' آن را بهبود بخشید. درباره این فرآیند بیشتر در [مستندات](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott) بخوانید.
## پیشبینی
این لحظهای است که میتوانید از دادههای کاملاً جدید برای آزمایش دقت مدل خود استفاده کنید. در یک محیط ML «کاربردی»، جایی که شما داراییهای وبی برای استفاده از مدل در تولید میسازید، این فرآیند ممکن است شامل جمعآوری ورودی کاربر (مثلاً فشار دادن یک دکمه) برای تنظیم یک متغیر و ارسال آن به مدل برای استنتاج یا ارزیابی باشد.
این لحظهای است که میتوانید از دادههای کاملاً جدید برای آزمایش دقت مدل خود استفاده کنید. در محیط یادگیری ماشین «کاربردی» که در آن داراییهای وب را برای استفاده مدل در تولید میسازید، این فرآیند ممکن است شامل جمعآوری ورودی کاربر (مثلاً فشار دکمه) برای تنظیم متغیر و ارسال آن به مدل برای استنتاج یا ارزیابی باشد.
در این درسها، شما کشف خواهید کرد که چگونه از این مراحل برای آمادهسازی، ساخت، آزمایش، ارزیابی و پیشبینی استفاده کنید - تمام حرکات یک دانشمند داده و بیشتر، همانطور که در سفر خود برای تبدیل شدن به یک مهندس ML «تمامعیار» پیشرفت میکنید.
در این درسها، خواهید آموخت چگونه با استفاده از این مراحل، آمادهسازی، ساخت، آزمون، ارزیابی و پیشبینی کنید - همه حرکات یک دانشمند داده و فراتر، در مسیر تبدیل شدن به مهندس یادگیری ماشین 'فول استک'.
---
## 🚀چالش
یک نمودار جریان رسم کنید که مراحل یک متخصص ML را نشان دهد. در حال حاضر خود را در کدام مرحله میبینید؟ پیشبینی میکنید کجا با دشواری مواجه شوید؟ چه چیزی برای شما آسان به نظر میرسد؟
یک نمودار جریان رسم کنید که مراحل یک متخصص یادگیری ماشین را نشان دهد. در کجای این فرآیند خود را میبینید؟ پیشبینی میکنید در کجا با مشکل مواجه شوید؟ چه چیزی برایتان آسان به نظر میرسد؟
## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/)
## مرور و مطالعه شخصی
## مرور و مطالعه خودآموز
بهصورت آنلاین جستجو کنید تا مصاحبههایی با دانشمندان داده پیدا کنید که درباره کار روزانه خود صحبت میکنند. اینجا یک [نمونه](https://www.youtube.com/watch?v=Z3IjgbbCEfs) است.
بهصورت آنلاین جستجو کنید تا مصاحبههایی با دانشمندان داده که درباره کار روزمره خود صحبت میکنند بیابید. این یکی [مصاحبه](https://www.youtube.com/watch?v=Z3IjgbbCEfs) است.
## تکلیف
## تمرین
[مصاحبه با یک دانشمند داده](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**سلب مسئولیت**:
این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه میشود از ترجمه حرفهای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.
این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در پی دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان بومی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما مسئولیتی در قبال هرگونه سوءتفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه نداریم.
# ساخت یک مدل رگرسیون با استفاده از Scikit-learn: چهار روش رگرسیون
# ساخت مدل رگرسیون با استفاده از Scikit-learn: رگرسیون از چهار دیدگاه مختلف
## نکته مبتدی
## نکته برای مبتدیان
رگرسیون خطی زمانی استفاده میشود که بخواهیم یک **مقدار عددی** پیشبینی کنیم (برای مثال، قیمت خانه، دما یا فروش).
این مدل با یافتن یک خط راست که بهترین نماینده رابطه بین ویژگیهای ورودی و خروجی باشد، کار میکند.
رگرسیون خطی زمانی استفاده میشود که بخواهیم یک **مقدار عددی** پیشبینی کنیم (برای مثال، قیمت خانه، دما یا فروش).
این روش با یافتن یک خط مستقیم که بهترین نمایشدهنده رابطه بین ویژگیهای ورودی و خروجی است، کار میکند.
در این درس، تمرکز ما بر درک مفهوم است قبل از کاوش روشهای پیشرفتهتر رگرسیون.

> اینفوگرافیک توسط [داسانی مادیپالی](https://twitter.com/dasani_decoded)
در این درس، تمرکز ما بر درک مفهوم قبل از بررسی تکنیکهای پیشرفتهتر رگرسیون است.

> اینفوگرافیک توسط [داسانی مادایپالی](https://twitter.com/dasani_decoded)
## [آزمون قبل از درس](https://ff-quizzes.netlify.app/en/ml/)
> ### [این درس در R نیز موجود است!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### مقدمه
> ### [این درس به زبان R نیز در دسترس است!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### معرفی
تا اینجا بررسی کردهاید رگرسیون چیست با داده نمونه جمعآوری شده از مجموعه داده قیمت کدو تنبل که در طول این درس استفاده خواهیم کرد. همچنین آن را با استفاده از Matplotlib مصورسازی کردهاید.
تا به حال بررسی کردهاید که رگرسیون چیست با دادههای نمونهای که از مجموعه داده قیمت کدو تنبل جمعآوری شده و در این درس از آن استفاده خواهیم کرد. همچنین آن را با استفاده از Matplotlib تجسم کردهاید.
اکنون آمادهاید عمیقتر در رگرسیون برای یادگیری ماشین فرو بروید. در حالی که مصورسازی به شما اجازه میدهد دادهها را درک کنید، قدرت واقعی یادگیری ماشین از _آموزش مدلها_میآید. مدلها روی دادههای تاریخی آموزش میبینند تا به طور خودکار وابستگیهای داده را به دست آورند، و به شما اجازه میدهند نتایج دادههای جدید را پیشبینی کنید که مدل قبلا ندیده است.
اکنون آمادهاید تا عمیقتر به رگرسیون برای یادگیری ماشین بپردازید. در حالی که تجسم به شما کمک میکند دادهها را درک کنید، قدرت واقعی یادگیری ماشین از _آموزش مدلها_ناشی میشود. مدلها روی دادههای تاریخی آموزش داده میشوند تا به طور خودکار وابستگیهای داده را شناسایی کنند و به شما امکان پیشبینی نتایج برای دادههای جدید که مدل قبلاً ندیده است را میدهند.
در این درس، شما درباره دو نوع رگرسیون بیشتر خواهید آموخت: _رگرسیون خطی پایه_ و _رگرسیون چندجملهای_، همراه با بخشی از ریاضیات پشت این تکنیکها. این مدلها به ما اجازه میدهند قیمت کدو تنبل را بر اساس دادههای ورودی مختلف پیشبینی کنیم.
در این درس، شما با دو نوع رگرسیون بیشتر آشنا خواهید شد: _رگرسیون خطی پایه_ و _رگرسیون چندجملهای_ به همراه بخشی از ریاضی پشت این تکنیکها. این مدلها به ما امکان میدهند قیمت کدو تنبل را بر اساس دادههای ورودی مختلف پیشبینی کنیم.
[](https://youtu.be/CRxFT8oTDMg "یادگیری ماشین برای مبتدیان - درک رگرسیون خطی")
> 🎥 برای تماشای ویدئوی کوتاه مرور رگرسیون خطی روی تصویر بالا کلیک کنید.
> 🎥 روی تصویر بالا کلیک کنید تا ویدیوی کوتاهی درباره رگرسیون خطی ببینید.
> در طول این دوره، فرض میکنیم دانش ریاضی حداقلی است و تلاش میکنیم برای دانشجویان از رشتههای دیگر قابل دسترس باشد، پس مراقب یادداشتها، اشارههای 🧮، نمودارها و ابزارهای یادگیری دیگر برای کمک به فهم باشید.
> در سراسر این دوره فرض بر دانش حداقلی ریاضی است و تلاش شده است آن را برای دانشجویانی که از رشتههای دیگر میآیند قابل دسترس کنیم، پس به نکات، 🧮 یادداشتها، نمودارها و دیگر ابزارهای آموزشی دقت کنید.
### پیشنیاز
شما باید اکنون با ساختار داده کدو تنبل که بررسی میکنیم آشنا باشید. این داده در فایل _notebook.ipynb_ این درس به صورت پیشبارگذاری و پیشپاکسازی شده موجود است. در این فایل، قیمت کدو تنبل به ازای هر بوشل در یک داده فریم جدید نمایش داده شده است. مطمئن شوید میتوانید این نوتبوکها را در کرنلهای Visual Studio Code اجرا کنید.
حال باید با ساختار دادههای کدو تنبل که بررسی میکنیم آشنا باشید. میتوانید آن را از پیش بارگذاری شده و پاکسازی شده در فایل _notebook.ipynb_ این درس بیابید. در این فایل، قیمت کدو تنبل به ازای هر بشِل (bushel) در یک دیتافریم جدید نمایش داده شده است. اطمینان حاصل کنید میتوانید این نوتبوکها را در هستههای Visual Studio Code اجرا کنید.
### آمادهسازی
به عنوان یادآوری، شما این داده را بارگذاری میکنید تا بتوانید سوالهایی از آن بپرسید.
برای یادآوری، شما این دادهها را بارگذاری میکنید تا بتوانید سوالاتی درباره آن مطرح کنید.
- بهترین زمان خرید کدو تنبل کی است؟
- چه قیمت را انتظار میتوانم برای یک جعبه کدو تنبل مینیاتوری داشته باشم؟
- آیا باید آنها را در سبدهای نیم بوشل بخرم یا در جعبه 1 1/9 بوشل؟
بیایید بیشتر در این دادهها کاوش کنیم.
- بهترین زمان خرید کدو تنبل کی هست؟
- قیمت مورد انتظار برای یک بسته کوچک کدو تنبل چقدر است؟
- باید آنها را در سبدهای نیمبشل یا در جعبههای 1 و 1/9 بشل بخرم؟
بیایید بیشتر به عمق این دادهها بپردازیم.
در درس قبلی، یک داده فریم Pandas ایجاد کردید و آن را با بخشی از مجموعه داده اصلی پر کردید، قیمتگذاری را بر اساس بوشل معیار قرار دادید. اما با این کار تنها توانستید حدود 400 نقطه داده و فقط برای ماههای پاییز به دست آورید.
در درس قبلی، یک دیتافریم Pandas ایجاد کردید و آن را با بخشی از دادههای اصلی پر کردید، قیمتگذاری را بر اساس بشِل استاندارد کردید. اما با این کار تنها توانستید حدود ۴۰۰ داده جمعآوری کنید و فقط برای ماههای پاییز.
نگاهی به دادههایی بیندازید که در نوتبوک همراه این درس پیشبارگذاری شده است. دادهها پیشبارگذاری شدهاند و یک پراکندگی اولیه برای نشان دادن دادههای ماه رسم شده است. شاید بتوانیم با پاکسازی بیشتر، جزئیات بیشتری درباره ماهیت دادهها داشته باشیم.
نگاهی به دادههای از پیش بارگذاری شده در نوتبوک همراه این درس بیندازید. دادهها بارگذاری شده و یک نمودار پراکندگی اولیه کشیده شده که دادههای ماه را نشان میدهد. شاید بتوانیم با پاکسازی بیشتر جزئیات بیشتری درباره طبیعت دادهها به دست آوریم.
## یک خط رگرسیون خطی
## خط رگرسیون خطی
همانطور که در درس 1 آموختید، هدف یک تمرین رگرسیون خطی این است که بتوانیم یک خط ترسیم کنیم که:
همانطور که در درس اول یاد گرفتید، هدف تمرین رگرسیون خطی این است که بتوانید خطی ترسیم کنید تا:
- **نشاندهنده رابطه متغیرها باشد**. نشان دادن رابطه بین متغیرها
- **پیشبینی انجام دهد**. پیشبینی دقیق جایی که نقطه داده جدید نسبت به آن خط قرار میگیرد.
- **نشان دادن روابط متغیرها**. رابطه بین متغیرها را نشان دهد
- **ساخت پیشبینیها**. پیشبینی دقیق درباره محل قرارگیری یک داده جدید نسبت به آن خط انجام دهد.
معمول است که این نوع خط توسط **رگرسیون کمترین مربعات** رسم شود. اصطلاح "کمترین مربعات" به فرآیند کمینه کردن کل خطا در مدل ما اشاره دارد. برای هر نقطه داده، فاصله عمودی (که به آن باقیمانده میگویند) بین نقطه واقعی و خط رگرسیون ما اندازهگیری میشود.
معمولاً **رگرسیون کمترین مربعات** این نوع خط را رسم میکند. اصطلاح "کمترین مربعات" به فرآیند کمینه کردن مجموع خطاهای مدل اشاره دارد. برای هر نقطه داده، فاصله عمودی (که باقیمانده نامیده میشود) بین نقطه واقعی و خط رگرسیون اندازهگیری میشود.
ما این فاصلهها را دو دلیل اصلی مربع میکنیم:
این فاصلهها به دو دلیل مربع میشوند:
1. **قدر بیش از جهت:** میخواهیم خطای -5 به اندازه خطای +5 حساب شود. مربع گرفتن همه مقادیر را مثبت میکند.
2. **جریمه دادن به نقاط پرت:** مربع کردن وزن بیشتری به خطاهای بزرگ میدهد و خط را مجبور میکند نزدیکتر به نقاط دور شود.
1. **اندازه به جای جهت:** میخواهیم خطای -۵ را مانند خطای +۵ حساب کنیم. مربع گرفتن همه مقادیر را مثبت میکند.
سپس همه این مقادیر مربعی را جمع میکنیم. هدف ما یافتن خط خاصی است که این مجموع نهایی کمترین مقدار ممکن را داشته باشد — بنابراین نام "کمترین مربعات" است.
2. **تنبیه نقاط پرت:** مربع گرفتن به خطاهای بزرگتر وزن بیشتری میدهد و خط را مجبور میکند که به نقاط دورتر نزدیکتر بماند.
سپس همه مقادیر مربعی را جمع میکنیم. هدف ما یافتن خط خاصی است که این مجموع نهایی حداقل (کمترین مقدار ممکن) باشد — از این رو نام "کمترین مربعات".
> **🧮 ریاضی را به من نشان بده**
>
@ -65,71 +66,71 @@
> ```
> Y = a + bX
> ```
>
> `X` متغیر توضیحی است. `Y` متغیر وابسته است. شیب خط `b` است و `a` عرض از مبدأ در محور y است، که مقدار `Y` را وقتی `X = 0` است نشان میدهد.
> ابتدا شیب `b` را محاسبه کنید. اینفوگرافیک توسط [جن لوپر](https://twitter.com/jenlooper)
>
> به عبارت دیگر، و با اشاره به سوال اصلی داده کدو تنبل ما: "پیشبینی قیمت کدو تنبل به ازای هر بوشل بر اساس ماه"، `X` اشاره به قیمت دارد و `Y` به ماه فروش.
> مقدار Y را محاسبه کنید. اگر حدود 4 دلار پرداخت میکنید، باید آوریل باشد! اینفوگرافیک توسط [جن لوپر](https://twitter.com/jenlooper)
>
> ریاضی که خط را محاسبه میکند باید شیب خط را نشان دهد، که همچنین به عرض از مبدأ یا جایی که `Y` وقتی `X = 0` است بستگی دارد.
>
> میتوانید روش محاسبه این مقادیر را در سایت [ریاضیات سرگرمکننده](https://www.mathsisfun.com/data/least-squares-regression.html) مشاهده کنید. همچنین به [این ماشین حساب کمترین مربعات](https://www.mathsisfun.com/data/least-squares-calculator.html) مراجعه کنید تا ببینید چگونه مقادیر اعداد بر خط تاثیر میگذارند.
>
> `X` متغیر «توضیحدهنده» است. `Y` متغیر «وابسته» است. شیب خط `b` است و `a` عرض از مبدا y است، که به مقدار `Y` هنگام `X = 0` اشاره دارد.
> ابتدا شیب `b` را محاسبه کنید. اینفوگرافیک توسط [جن لوپر](https://twitter.com/jenlooper)
>
> به عبارت دیگر، و با اشاره به سوال اصلی دادههای کدو تنبل ما: "پیشبینی قیمت کدو تنبل به ازای هر بشِل بر اساس ماه"، `X` به قیمت اشاره میکند و `Y` به ماه فروش.
> مقدار Y را محاسبه کنید. اگر دارید حدود ۴ دلار میپردازید، باید ماه آوریل باشد! اینفوگرافیک توسط [جن لوپر](https://twitter.com/jenlooper)
>
> ریاضی که خط را حساب میکند باید شیب خط را نشان دهد، که همچنین به عرض از مبدا وابسته است، یا جایی که `Y` قرار دارد وقتی `X = 0`.
>
> میتوانید روش محاسبه این مقادیر را در سایت [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) مشاهده کنید. همچنین از [ماشین حساب کمترین مربعات](https://www.mathsisfun.com/data/least-squares-calculator.html) دیدن کنید تا ببینید چگونه مقادیر عددی روی خط تاثیر میگذارند.
## همبستگی
یک اصطلاح دیگر برای فهمیدن، **ضریب همبستگی** بین متغیرهای X و Y است. با استفاده از نمودار پراکندگی، میتوانید این ضریب را به سرعت مشاهده کنید. نموداری که نقاط داده مرتب در یک خط منظم پخش شدهاند همبستگی بالایی دارند، اما نموداری که نقاط داده در تمام محدوده بین X و Y پراکنده هستند همبستگی کمی دارد.
یک اصطلاح دیگر که باید بدانید ضریب **همبستگی** بین متغیرهای X و Y است. با استفاده از نمودار پراکندگی، میتوانید این ضریب را سریعاً مشاهده کنید. نموداری که نقاط داده روی یک خط مرتب قرار گرفتهاند همبستگی بالایی دارد، اما اگر نقاط داده در همه جا پخش شده باشند، همبستگی پایین است.
یک مدل رگرسیون خطی خوب مدلی است که ضریب همبستگی بالایی (نزدیک به 1 بیشتر از 0) با استفاده از روش کمترین مربعات و خط رگرسیون داشته باشد.
مدل رگرسیون خطی خوب مدلی است که ضریب همبستگی بالایی داشته باشد (نزدیک به ۱ بیشتر از ۰) با استفاده از روش رگرسیون کمترین مربعات با خط رگرسیون.
✅ نوتبوک همراه این درس را اجرا کنید و نمودار پراکندگی ماه به قیمت را نگاه کنید. آیا داده همبستگی بالایی یا پایینی بین ماه و قیمت فروش کدو تنبل دارد بر اساس تفسیر بصری خود از نمودار پراکندگی؟ آیا اگر به جای `Month` از معیار دقیقتری مثل *روز سال* (یعنی تعداد روزها از آغاز سال) استفاده کنید، تغییر میکند؟
✅ نوتبوک همراه این درس را اجرا کنید و به نمودار پراکندگی ماه به قیمت نگاه کنید. آیا دادههای ارتباط ماه و قیمت برای فروش کدو تنبل به نظر همبستگی بالا یا پایینی دارند، بر اساس تفسیر بصری شما از نمودار پراکندگی؟ آیا اگر به جای `ماه` از مقیاس دقیقتری مانند *روز سال* (مثل تعداد روزهای از ابتدای سال) استفاده کنید، این تغییر میکند؟
در کد زیر فرض میکنیم داده را پاکسازی کردهایم و داده فریمی به نام `new_pumpkins` بدست آوردیم، مشابه این:
در کد زیر، فرض میکنیم دادهها پاکسازی شدهاند، و یک دیتافریم به نام `new_pumpkins` بدست آوردهایم، مشابه دادههای زیر:
ID | ماه | روز_سال | نوع | شهر | بستهبندی | قیمت پایین | قیمت بالا | قیمت
> کد پاکسازی داده در [`notebook.ipynb`](notebook.ipynb) موجود است. ما مراحل پاکسازی مشابه درس قبلی را انجام دادهایم، و ستون `DayOfYear` را با استفاده از عبارت زیر محاسبه کردیم:
> کد پاکسازی دادهها در [`notebook.ipynb`](notebook.ipynb) موجود است. ما همان مراحل پاکسازی درس قبلی را انجام دادهایم و ستون `DayOfYear` را با استفاده از عبارت زیر محاسبه کردهایم:
حالا که درک درستی از ریاضی پشت رگرسیون خطی دارید، بیایید یک مدل رگرسیون بسازیم تا ببینیم آیا میتوانیم پیشبینی کنیم کدام بسته کدو تنبل بهترین قیمتها را دارد. کسی که برای یک جشنواره کدو تنبل خرید میکند ممکن است بخواهد این اطلاعات را داشته باشد تا خریدهای خود را بهینه کند.
حالا که درک ریاضی پشت رگرسیون خطی دارید، بیایید یک مدل رگرسیون ایجاد کنیم تا ببینیم آیا میتوانیم پیشبینی کنیم کدام بسته کدو تنبل بهترین قیمتها را خواهد داشت. کسی که کدو تنبل برای باغچه جشن خریداری میکند ممکن است بخواهد این اطلاعات را برای بهینهسازی خریدهایش داشته باشد.
## جستجوی همبستگی
[](https://youtu.be/uoRq-lW2eQo "یادگیری ماشین برای مبتدیان - جستجوی همبستگی: کلید رگرسیون خطی")
> 🎥 برای تماشای ویدئوی کوتاه مرور همبستگی روی تصویر بالا کلیک کنید.
> 🎥 روی تصویر بالا کلیک کنید برای ویدیوی کوتاهی درباره همبستگی.
شما احتمالاً در درس قبلی دیدهاید که میانگین قیمتها برای ماههای مختلف به این صورت است:
احتمالاً در درس قبلی دیدهاید که میانگین قیمتها برای ماههای مختلف اینگونه است:
<imgalt="میانگین قیمت بر اساس ماه" src="../../../../translated_images/fa/barchart.a833ea9194346d76.webp"width="50%"/>
<imgalt="میانگین قیمت به ازای ماه" src="../../../../translated_images/fa/barchart.a833ea9194346d76.webp"width="50%"/>
این نشان میدهد باید نوعی همبستگی وجود داشته باشد، و ما میتوانیم مدل خطی رگرسیون را برای پیشبینی رابطه بین `ماه` و `قیمت`، یا بین `روز سال` و `قیمت` آموزش دهیم. اینجا نمودار پراکندگی که رابطه دوم را نشان میدهد دیده میشود:
این نشان میدهد باید همبستگی وجود داشته باشد و میتوانیم مدل رگرسیون خطی آموزش دهیم تا رابطه بین `Month` و `Price`، یا بین `DayOfYear` و `Price` را پیشبینی کند. این نمودار پراکندگی رابطه اخیر را نشان میدهد:
<imgalt="نمودار پراکندگی قیمت نسبت به روز سال" src="../../../../translated_images/fa/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
<imgalt="نمودار پراکندگی قیمت در برابر روز سال" src="../../../../translated_images/fa/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
بیایید ببینیم آیا همبستگی با استفاده از تابع `corr` وجود دارد:
بیایید بررسی کنیم همبستگی با استفاده از تابع `corr` چگونه است:
به نظر میرسد همبستگی نسبتاً کوچک است، -0.15 نسبت به `ماه` و -0.17 نسبت به `روز ماه`، اما ممکن است رابطه مهم دیگری وجود داشته باشد. به نظر میرسد خوشههای مختلف قیمت مرتبط با انواع مختلف کدو وجود دارد. برای تایید این فرض، اجازه دهید هر دسته کدو را با رنگ متفاوت رسم کنیم. با ارسال آرگومان `ax` به تابع نمودار پراکندگی میتوانیم تمام نقاط را روی یک گراف نشان دهیم:
به نظر میرسد همبستگی بسیار کم است، -۰.۱۵ بر اساس `Month` و -۰.۱۷ بر اساس `DayOfYear`، ولی ممکن است رابطه مهم دیگری وجود داشته باشد. به نظر میرسد خوشههای مختلفی از قیمتها متعلق به انواع مختلف کدو تنبل باشد. برای تایید این فرضیه، هر دسته کدو را با رنگ متفاوت رسم کنیم. با دادن پارامتر `ax` به تابع رسم پراکندگی، میتوانیم همه نقاط را روی یک نمودار رسم کنیم:
```python
ax=None
@ -138,76 +139,75 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<imgalt="نمودار پراکندگی قیمت نسبت به روز سال با رنگهای متفاوت"src="../../../../translated_images/fa/scatter-dayofyear-color.65790faefbb9d54f.webp"width="50%"/>
بررسی ما نشان میدهد که نوع کدو اثر بیشتری بر قیمت کل دارد نسبت به تاریخ فروش واقعی. میتوانیم این را با نمودار میلهای ببینیم:
<imgalt="نمودار پراکندگی قیمت در برابر روز سال با رنگبندی"src="../../../../translated_images/fa/scatter-dayofyear-color.65790faefbb9d54f.webp"width="50%"/>
تحقیق ما نشان میدهد که نوع کدو بر قیمت کلی تاثیر بیشتری از تاریخ فروش دارد. این را میتوانیم با نمودار میلهای مشاهده کنیم:
<imgalt="نمودار پراکندگی قیمت نسبت به روز سال برای کدو نوع پای"src="../../../../translated_images/fa/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
<imgalt="نمودار پراکندگی قیمت در برابر روز سال، نوع پای"src="../../../../translated_images/fa/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
اگر اکنون همبستگی بین `قیمت` و `روز سال` را با تابع `corr` محاسبه کنیم، چیزی حدود `-0.27` بدست میآوریم – که یعنی آموزش یک مدل پیشبینی منطقی است.
اگر حالا همبستگی بین `Price` و `DayOfYear` را با تابع `corr` محاسبه کنیم، چیزی حدود `-0.27` دریافت میکنیم — یعنی آموزش یک مدل پیشبینی منطقی به نظر میرسد.
> قبل از آموزش مدل رگرسیون خطی، مهم است مطمئن شویم دادههای ما تمیز هستند. رگرسیون خطی با مقادیر خالی خوب کار نمیکند، بنابراین بهتر است همه سلولهای خالی حذف شوند:
> قبل از آموزش مدل رگرسیون خطی، مهم است اطمینان حاصل کنیم که دادههای ما تمیز هستند. رگرسیون خطی با مقادیر گمشده خوب کار نمیکند، پس بهتر است همه خانههای خالی را حذف کنیم:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
راه دیگر پر کردن مقادیر خالی با میانگینهای ستون مربوطه است.
رویکرد دیگر پر کردن خانههای خالی با مقادیر میانگین ستون مربوطه است.
## رگرسیون خطی ساده
[](https://youtu.be/e4c_UP2fSjg "یادگیری ماشین برای مبتدیان - رگرسیون خطی و چندجملهای با Scikit-learn")
> 🎥 برای تماشای ویدئوی کوتاه مرور رگرسیون خطی و چندجملهای روی تصویر بالا کلیک کنید.
> 🎥 روی تصویر بالا کلیک کنید تا ویدیوی کوتاهی درباره رگرسیون خطی و چندجملهای ببینید.
برای آموزش مدل رگرسیون خطی خود، از کتابخانه **Scikit-learn** استفاده خواهیم کرد.
برای آموزش مدل رگرسیون خطیمان، از کتابخانه **Scikit-learn** استفاده خواهیم کرد.
```python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
ابتدا با جدا کردن مقادیر ورودی (ویژگیها) و خروجی مورد انتظار (برچسب) به آرایههای numpy جداگانه شروع میکنیم:
ابتدا ورودیها (ویژگیها) و خروجی مورد انتظار (برچسب) را به آرایههای numpy جداگانه تقسیم میکنیم:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> توجه داشته باشید که مجبور شدیم روی داده ورودی `reshape` انجام دهیم تا پکیج رگرسیون خطی آن را به درستی بفهمد. رگرسیون خطی آرایه دو بعدی را به عنوان ورودی انتظار دارد، که هر ردیف آن یک بردار از ویژگیهای ورودی باشد. در مورد ما، چون تنها یک ورودی داریم، به آرایهای با شکل N×1 نیاز داریم که N اندازه داده است.
سپس باید داده را به مجموعههای آموزشی و آزمایشی تقسیم کنیم، تا بتوانیم مدل خود را بعد از آموزش اعتبارسنجی کنیم:
> توجه کنید که مجبور بودیم ورودی را با `reshape` تغییر دهیم تا پکیج رگرسیون خطی بتواند به درستی آن را بفهمد. رگرسیون خطی انتظار آرایه دو بعدی به عنوان ورودی دارد که هر سطر آن یک بردار از ویژگیهای ورودی است. در مورد ما، چون تنها یک ورودی داریم، به آرایهای با شکل N×1 نیاز است، که N اندازه دادهها است.
سپس باید دادهها را به مجموعههای آموزش و آزمون تفکیک کنیم تا پس از آموزش مدل آن را اعتبارسنجی کنیم:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
در نهایت، آموزش مدل رگرسیون خطی واقعی تنها دو خط کد نیاز دارد. شیء `LinearRegression` را تعریف میکنیم و با استفاده از متد `fit` آن را روی دادههای خود تطبیق میدهیم:
در نهایت، آموزش مدل رگرسیون خطی با تنها دو خط کد انجام میشود. ابتدا شیء `LinearRegression` را تعریف میکنیم، سپس آن را با استفاده از متد `fit` روی دادهها میخواهیم:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
شیء `LinearRegression`پس از اجرای `fit` شامل تمام ضرایب رگرسیون است که میتوان به آنها از طریق خاصیت `.coef_` دسترسی داشت. در مورد ما، فقط یک ضریب وجود دارد که باید حدود `-0.017` باشد. این یعنی قیمتها به نظر میرسد که با گذر زمان کمی کاهش مییابند، اما نه خیلی زیاد، حدود ۲ سنت در روز. همچنین میتوانیم نقطه تلاقی رگرسیون با محور Y را با استفاده از `lin_reg.intercept_` بدست آوریم — که در مورد ما حدود `21` خواهد بود و نشاندهنده قیمت در ابتدای سال است.
شیء `LinearRegression`بعد از آموزش (`fit`) شامل تمام ضرایب رگرسیون است که میتوان با استفاده از ویژگی `.coef_` به آنها دسترسی پیدا کرد. در مورد ما، فقط یک ضریب وجود دارد که تقریباً باید حدود `-0.017` باشد. این یعنی قیمتها به نظر میرسد که کمی با گذر زمان کاهش مییابند، اما خیلی زیاد نیست، حدود ۲ سنت در روز. همچنین میتوان نقطه تقاطع رگرسیون با محور Y را با استفاده از `lin_reg.intercept_` مشاهده کرد - در مورد ما این مقدار حدود `21` خواهد بود که نشاندهنده قیمت در آغاز سال است.
برای دیدن دقت مدل، میتوانیم قیمتها را روی دادههای تست پیشبینی کنیم، و سپس بسنجیم چقدر پیشبینیهایمان به مقادیر مورد انتظار نزدیک هستند. این کار را میتوان با استفاده از معیار خطای میانگین مربعات جذر (RMSE) انجام داد، که جذر میانگین تمام اختلافهای مربعی بین مقدار پیشبینی شده و مورد انتظار است.
برای دیدن میزان دقت مدلمان، میتوانیم قیمتها را روی یک مجموعه داده آزمایشی پیشبینی کنیم و سپس میزان نزدیکی پیشبینیهای ما به مقادیر انتظار رفته را اندازهگیری کنیم. این کار با استفاده از معیار خطای ریشه میانگین مربعات خطا (RMSE) انجام میشود، که جذر میانگین تمام اختلافات مربعی میان مقدار مورد انتظار و پیشبینی شده است.
خطای ما حدود ۲ واحد است که تقریباً ~۱۷٪ است، نه چندان خوب. یک شاخص دیگر از کیفیت مدل، **ضریب تعیین** است که میتوان آن را به این صورت به دست آورد:
خطای ما به نظر میرسد حدود ۲ واحد باشد که تقریباً ~۱۷٪ است. زیاد خوب نیست. شاخص دیگر کیفیت مدل، **ضریب تعیین** است که میتوان آن را به این صورت به دست آورد:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
اگر مقدار برابر ۰ باشد، یعنی مدل دادههای ورودی را در نظر نمیگیرد و مانند *بدترین پیشبینیکننده خطی* عمل میکند، که به سادگی مقدار میانگین خروجیها است. مقدار ۱ یعنی میتوانیم دقیقاً همه خروجیهای مورد انتظار را پیشبینی کنیم. در مورد ما، ضریب حدود ۰.۰۶ است که نسبتاً پایین است.
اگر مقدار آن صفر باشد، به این معنا است که مدل دادههای ورودی را در نظر نمیگیرد و به عنوان *بدترین پیشبینیکننده خطی* عمل میکند، که صرفاً مقدار میانگین نتیجه است. مقدار 1 به این معنا است که ما میتوانیم تمام خروجیهای مورد انتظار را به طور کامل پیشبینی کنیم. در مورد ما، ضریب حدود 0.06 است که نسبتاً کم است.
همچنین میتوانیم دادههای تست را همراه با خط رگرسیون رسم کنیم تا بهتر ببینیم رگرسیون در مورد ما چگونه عمل میکند:
ما همچنین میتوانیم دادههای آزمایشی را همراه با خط رگرسیون رسم کنیم تا بهتر ببینیم رگرسیون در مورد ما چگونه عمل میکند:
```python
plt.scatter(X_test,y_test)
@ -235,17 +235,17 @@ plt.plot(X_test,pred)
## رگرسیون چندجملهای
نوع دیگری از رگرسیون خطی، رگرسیون چندجملهای است. در حالی که گاهی بین متغیرها رابطه خطی وجود دارد - هر چه حجم کدو تنبل بیشتر باشد، قیمت بالاتر است - گاهی این روابط قابل ترسیم با یک صفحه یا خط مستقیم نیستند.
نوع دیگری از رگرسیون خطی، رگرسیون چندجملهای است. در حالی که گاهی رابطه خطی بین متغیرها وجود دارد - مثلاً هرچه حجم کدو حلوایی بیشتر باشد، قیمت بالاتر است - اما گاهی این روابط را نمیتوان به صورت یک صفحه یا خط مستقیم رسم کرد.
✅ اینجا [چند مثال دیگر](https://online.stat.psu.edu/stat501/lesson/9/9.8) از دادههایی است که میتوانند از رگرسیون چندجملهای استفاده کنند.
✅ در اینجا [چند مثال بیشتر](https://online.stat.psu.edu/stat501/lesson/9/9.8) از دادهها وجود دارد که میتوانند از رگرسیون چندجملهای استفاده کنند.
دوباره به رابطه بین تاریخ و قیمت نگاه کنید. آیا این نمودار پراکندگی به نظر میرسد که حتما باید با یک خط مستقیم تحلیل شود؟ آیا قیمتها نمیتوانند نوسان کنند؟ در این حالت، میتوانید رگرسیون چندجملهای را امتحان کنید.
یک بار دیگر به رابطه بین تاریخ و قیمت نگاه کنید. آیا این نمودار پراکندگی حتماً باید با یک خط مستقیم تحلیل شود؟ آیا قیمتها نمیتوانند نوسان داشته باشند؟ در این صورت، میتوانید از رگرسیون چندجملهای استفاده کنید.
✅ چندجملهایها عبارتهای ریاضی هستند که ممکن است شامل یک یا چند متغیر و ضرایب باشند.
✅ چندجملهایها عبارات ریاضی هستند که ممکن است از یک یا چند متغیر و ضرایب تشکیل شده باشند.
رگرسیون چندجملهای یک منحنی ایجاد میکند تا دادههای غیرخطی را بهتر تطبیق دهد. در مورد ما، اگر متغیر مربعشده `DayOfYear` را به دادههای ورودی اضافه کنیم، باید بتوانیم دادهها را با یک منحنی سهمی شکل تطبیق دهیم که حداقل آن در نقطهای از سال باشد.
رگرسیون چندجملهای یک منحنی ایجاد میکند تا بهتر به دادههای غیرخطی بپیوندد. در مورد ما، اگر متغیر `DayOfYear` به توان دو را در دادههای ورودی وارد کنیم، باید بتوانیم دادههای خود را با یک منحنی سهمی شکل که حداقل در یک نقطه خاص در طول سال دارد، برازش کنیم.
کتابخانه Scikit-learn شامل یک [رابط برنامهنویسی خط لوله (pipeline API)](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) مفید برای ترکیب مراحل مختلف پردازش دادهها با هم است. یک **خط لوله** زنجیرهای از **برآوردگرها** است. در مورد ما، خط لولهای خواهیم ساخت که ابتدا ویژگیهای چندجملهای را به مدل اضافه میکند و سپس رگرسیون را آموزش میدهد:
کتابخانه Scikit-learn شامل یک API مفید به نام [pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) است که به ما اجازه میدهد مراحل مختلف پردازش داده را ترکیب کنیم. یک **pipeline** زنجیرهای از **برآوردگرها** است. در مورد ما، ما یک pipeline میسازیم که ابتدا ویژگیهای چندجملهای را به مدل اضافه میکند و سپس رگرسیون را آموزش میدهد:
```python
from sklearn.preprocessing import PolynomialFeatures
استفاده از `PolynomialFeatures(2)` به این معناست که همه چندجملهایهای درجه دوم از دادههای ورودی را شامل میشود. در مورد ما فقط به معنای `DayOfYear`<sup>2</sup> است، اما اگر دو متغیر ورودی X و Y داشته باشیم، این شامل X<sup>2</sup>، XY و Y<sup>2</sup> هم خواهد بود. همچنین میتوانیم درجههای بالاتر چندجملهای را استفاده کنیم اگر بخواهیم.
استفاده از `PolynomialFeatures(2)` یعنی اینکه همه چندجملهایهای درجه دوم از دادههای ورودی را شامل میشود. در مورد ما فقط `DayOfYear` به توان دو خواهد بود، اما با داشتن دو متغیر ورودی X و Y، این شامل X به توان ۲، حاصلضرب XY و Y به توان ۲ خواهد بود. اگر بخواهیم میتوانیم چندجملهایهای درجه بالاتر هم استفاده کنیم.
پایپلاینها را میتوان دقیقا به همان روشی که شیء `LinearRegression` اصلی استفاده میشود، بکار برد، یعنی میتوانیم pipeline را `fit` کنیم و سپس از `predict` برای دریافت نتایج پیشبینی استفاده کنیم:
برای رسم منحنی تقریب نرم، از `np.linspace` استفاده میکنیم تا یک بازه یکنواخت از مقادیر ورودی ایجاد کنیم، به جای اینکه مستقیماً روی دادههای نامرتب آزمایشی رسم کنیم (که خطوط زیگزاگی ایجاد میکرد):
خط لولهها میتوانند به همان شیوه شیء اصلی `LinearRegression` استفاده شوند، یعنی میتوانیم `fit` خط لوله را اجرا کنیم و سپس از `predict` برای دریافت نتایج پیشبینی استفاده کنیم. در اینجا نمودار دادههای تست و منحنی تقریب آورده شده است:
در اینجا نموداری است که دادههای آزمایشی و منحنی تقریب را نشان میدهد:
با استفاده از رگرسیون چندجملهای، میتوانیم مقداری کاهش در MSE و افزایش در ضریب تعیین بدست آوریم، اما نه به صورت چشمگیر. باید ویژگیهای دیگر را نیز در نظر بگیریم!
با استفاده از رگرسیون چندجملهای، میتوانیم RMSE کمی پایینتر و ضریب تعیین بالاتری به دست آوریم، اما نه به صورت قابل توجه. باید ویژگیهای دیگر را هم در نظر بگیریم!
> میبینید که حداقل قیمتهای کدو تنبل تقریباً حوالی هالووین مشاهده میشود. چگونه میتوانید این را توضیح دهید؟
> میتوانید ببینید که کمترین قیمت کدو حلوایی تقریباً در اطراف هالووین مشاهده میشود. چگونه میتوانید این را توضیح دهید؟
🎃 تبریک، شما به تازگی یک مدل ساختهاید که میتواند قیمت کدو تنبل پای را پیشبینی کند. احتمالاً میتوانید همین روند را برای تمام انواع کدو تکرار کنید، اما این کار خستهکننده خواهد بود. حالا بیایید یاد بگیریم چگونه تنوع کدو را در مدل خود لحاظ کنیم!
🎃 تبریک! شما به تازگی مدلهایی ساختید که میتواند به پیشبینی قیمت کدو حلوایی پای کمک کند. احتمالا میتوانید همین رویه را برای تمام انواع کدو تکرار کنید، اما این کار خستهکننده است. حالا بیایید یاد بگیریم چگونه تنوع کدو را در مدل خود در نظر بگیریم!
## ویژگیهای دستهای
در دنیای ایدهآل، میخواهیم بتوانیم قیمتها را برای انواع مختلف کدو با استفاده از همان مدل پیشبینی کنیم. اما ستون `Variety` کمی متفاوت از ستونهایی مثل `Month` است، چون حاوی مقادیر غیرعددی است. چنین ستونهایی **دستهای** نامیده میشوند.
در دنیای ایدهآل، میخواهیم قادر باشیم قیمتها را برای گونههای مختلف کدو با استفاده از یک مدل پیشبینی کنیم. با این حال، ستون `Variety` کمی متفاوت از ستونهایی مانند `Month` است، زیرا شامل مقادیر غیرعددی است. چنین ستونهایی را **دستهای** مینامند.
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 برای دیدن یک ویدیوی کوتاه درباره استفاده از ویژگیهای دستهای، روی تصویر بالا کلیک کنید.
> 🎥 برای دیدن ویدیو کوتاه درباره استفاده از ویژگیهای دستهای، روی تصویر بالا کلیک کنید.
در اینجا میبینید که قیمت متوسط چگونه به نوع کدو بستگی دارد:
در اینجا میبینید که قیمت متوسط چطور به تنوع بستگی دارد:
<imgalt="Average price by variety"src="../../../../translated_images/fa/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
برای لحاظ کردن نوع کدو، ابتدا باید آن را به شکل عددی تبدیل کنیم، یا **رمزگذاری** کنیم. چند روش برای این کار وجود دارد:
برای درنظر گرفتن تنوع، ابتدا باید آن را به فرم عددی تبدیل کنیم، یا آن را **کدگذاری** کنیم. چند روش مختلف برای این کار وجود دارد:
* رمزگذاری ساده عددی یک جدول از انواع مختلف ایجاد میکند، و سپس نام نوع را با اندیس آن در آن جدول جایگزین میکند. این ایده بهترین گزینه برای رگرسیون خطی نیست، چون رگرسیون خطی مقدار عددی اندیس را گرفته و با ضریب خاصی ضرب کرده و به نتیجه اضافه میکند. در مورد ما، رابطه بین شماره اندیس و قیمت به وضوح غیرخطی است، حتی اگر مطمئن شویم که اندیسها به ترتیب خاصی مرتب شدهاند.
* **رمزگذاری تکگرمی (one-hot encoding)** ستون `Variety` را با ۴ ستون مختلف جایگزین میکند، یکی برای هر نوع کدو. هر ستون شامل `1` است اگر ردیف مربوطه از آن نوع باشد و `0` در غیر این صورت. این یعنی در رگرسیون خطی چهار ضریب وجود دارد، یکی برای هر نوع کدو، که مسئول "قیمت شروع" (یا به عبارت دقیقتر "قیمت اضافی") برای آن نوع خاص است.
* **کدگذاری عددی ساده** جدولی از انواع مختلف ایجاد میکند و سپس نام تنوع را با یک اندیس در آن جدول جایگزین میکند. این ایده خوبی برای رگرسیون خطی نیست، چون رگرسیون خطی مقدار عددی واقعی اندیس را گرفته و آن را ضرب در ضریبی به نتیجه اضافه میکند. در مورد ما، رابطه بین شماره اندیس و قیمت واضحاً غیرخطی است، حتی اگر مطمئن شویم که اندیسها به روشی خاص مرتب شدهاند.
* **کدگذاری یک داغ (one-hot encoding)** ستون `Variety` را با ۴ ستون مختلف جایگزین میکند، یکی برای هر تنوع. هر ستون شامل `1` خواهد بود اگر سطر مربوطه متعلق به آن تنوع باشد و در غیر این صورت `0` قرار میدهد. این بدان معناست که در رگرسیون خطی چهار ضریب وجود خواهد داشت، یکی برای هر نوع کدو، که مسئول "قیمت شروع" (یا بهتر است بگوییم "قیمت اضافی") برای آن نوع خاص است.
کد زیر نشان میدهد چگونه میتوان یک نوع کدو را با روش one-hot کدگذاری کرد:
کد زیر نشان میدهد چگونه میتوان تنوع را به صورت one-hot کدگذاری کرد:
برای آموزش رگرسیون خطی با استفاده از نوع کدو one-hot، فقط کافی است`X` و `y` را به درستی مقداردهی اولیه کنیم:
برای آموزش رگرسیون خطی با استفاده از تنوع کدگذاری شدهی یک داغ به عنوان ورودی، فقط کافی است دادههای`X` و `y` را به درستی مقداردهی کنیم:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
باقیمانده کد همان است که قبلاً برای آموزش رگرسیون خطی استفاده کردیم. اگر آن را اجرا کنید، خواهید دید که میانگین مربعات خطا مشابه است اما ضریب تعیین خیلی بالاتری (~۷۷٪) بدست میآید. برای دریافت پیشبینیهای حتی دقیقتر، میتوانیم ویژگیهای دستهای بیشتری را به همراه ویژگیهای عددی مانند `Month` یا `DayOfYear` لحاظ کنیم. برای داشتن یک آرایه بزرگ از ویژگیها، میتوانیم از تابع`join` استفاده کنیم:
باقی کد همان است که برای آموزش رگرسیون خطی در بالا استفاده کردیم. اگر آن را امتحان کنید، میبینید که میانگین مربعات خطا تقریباً همان است، اما ضریب تعیین بسیار بالاتر (~۷۷٪) میشود. برای دقت بیشتر پیشبینیها، میتوانیم ویژگیهای دستهای بیشتری را در نظر بگیریم و همچنین ویژگیهای عددی مانند `Month` یا `DayOfYear`. برای بدست آوردن یک آرایه بزرگ ویژگیها، میتوانیم از`join` استفاده کنیم:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -319,68 +341,68 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
y = new_pumpkins['Price']
```
در اینجا ما همچنین `City` و نوع `Package` را نیز در نظر میگیریم، که MSE برابر 2.84 (۱۰٪) و ضریب تعیین 0.94 به ما میدهد!
در اینجا همچنین شهر (`City`) و نوع بستهبندی (`Package`) را در نظر میگیریم که با این کار RMSE برابر ۲.۸۴ (۱۰.۵٪) و ضریب تعیین ۰.۹۴ به دست میآید!
## همه چیز را کنار هم بگذاریم
## جمعبندی همه چیز
برای ساخت بهترین مدل، میتوانیم دادههای ترکیبی (دستهای کدگذاری شده به صورت one-hot + عددی) از مثال بالا را همراه با رگرسیون چندجملهای استفاده کنیم. در اینجا کد کامل برای راحتی شما آمده است:
برای ساخت بهترین مدل، میتوانیم دادههای ترکیبی (کدگذاری یک داغ دستهای + عددی) از مثال بالا را با رگرسیون چندجملهای ترکیب کنیم. در اینجا کد کامل برای راحتی شما قرار دارد:
```python
# تنظیم دادههای آموزشی
# تنظیم دادههای آموزش
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# تقسیمبندی آموزش و آزمون
# تقسیمبندی دادهها به آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
این باید بهترین ضریب تعیین حدود ۹۷٪ و MSE=2.23 (~۸٪ خطای پیشبینی) را به ما بدهد.
این باید بهترین ضریب تعیین، حدود ۹۷٪، و RMSE برابر ۲.۲۳ (~۸٪ خطای پیشبینی) به ما بدهد.
| مدل | MSE | ضریب تعیین |
| مدل | RMSE | ضریب تعیین |
|-------|-----|---------------|
| `DayOfYear` خطی | 2.77 (۱۷.۲٪) | 0.07 |
| `DayOfYear` چندجملهای | 2.73 (۱۷.۰٪) | 0.08 |
| `Variety` خطی | 5.24 (۱۹.۷٪) | 0.77 |
| تمام ویژگیها خطی | 2.84 (۱۰.۵٪) | 0.94 |
| تمام ویژگیها چندجملهای | 2.23 (۸.۲۵٪) | 0.97 |
| `DayOfYear` خطی | 2.77 (17.2%) | 0.07 |
| `DayOfYear` چندجملهای | 2.73 (17.0%) | 0.08 |
| `Variety` خطی | 5.24 (19.7%) | 0.77 |
| همه ویژگیها خطی | 2.84 (10.5%) | 0.94 |
| همه ویژگیها چندجملهای | 2.23 (8.25%) | 0.97 |
🏆 عالی! شما چهار مدل رگرسیون را در یک درس ساختید و کیفیت مدل را تا ۹۷٪ بهبود دادید. در بخش نهایی درباره رگرسیون، با رگرسیون لجستیک برای تعیین دستهها آشنا خواهید شد.
🏆 آفرین! شما چهار مدل رگرسیون را در یک درس ایجاد کردید و کیفیت مدل را تا ۹۷٪ بهبود بخشیدید. در بخش نهایی درباره رگرسیون، درباره رگرسیون لجستیک برای تعیین دستهها خواهید آموخت.
---
## 🚀چالش
تعدادی متغیر مختلف را در این دفترچه تست کنید تا ببینید همبستگی چگونه با دقت مدل مربوط میشود.
چند متغیر مختلف را در این دفترچه امتحان کنید تا ببینید چطور همبستگی به دقت مدل مربوط میشود.
## [کوییز پس از درس](https://ff-quizzes.netlify.app/en/ml/)
## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/)
## مرور و خودآموزی
در این درس درباره رگرسیون خطی یاد گرفتیم. انواع مهم دیگری از رگرسیون وجود دارد. درباره روشهای Stepwise، Ridge، Lasso و Elasticnet مطالعه کنید. یک دوره خوب برای یادگیری بیشتر، دوره [یادگیری آماری دانشگاه استنفورد](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) است.
در این درس درباره رگرسیون خطی یاد گرفتیم. انواع مهم دیگری از رگرسیون وجود دارد. در مورد تکنیکهای Stepwise، Ridge، Lasso و Elasticnet مطالعه کنید. یک دوره خوبی برای یادگیری بیشتر، [دوره آموزش یادگیری آماری دانشگاه استنفورد](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) است.
## تمرین
[ساخت مدل](assignment.md)
[ساخت یک مدل](assignment.md)
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**سلب مسئولیت**:
این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش میکنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نواقصی باشند. سند اصلی به زبان بومی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه میشود از ترجمه حرفهای انسانی استفاده شود. ما مسئول هیچ گونه سوءتفاهم یا تفسیر نادرستی که ناشی از استفاده از این ترجمه باشد، نیستیم.
این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. هرچند ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نواقصی باشند. سند اصلی به زبان اصلی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما مسئول هیچ گونه سوءتفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه نیستیم.
"## رگرسیون خطی و چندجملهای برای قیمتگذاری کدو تنبل - درس ۳\n",
"\n",
"کتابخانههای مورد نیاز و مجموعه داده را بارگذاری کنید. دادهها را به یک دیتافریم تبدیل کنید که شامل زیرمجموعهای از دادهها باشد:\n",
"کتابخانهها و دادههای مورد نیاز را بارگذاری کنید. دادهها را به یک دیتافریم شامل زیرمجموعهای از دادهها تبدیل کنید:\n",
"\n",
"- فقط کدو تنبلهایی را انتخاب کنید که به صورت بوشل قیمتگذاری شدهاند \n",
"- تاریخ را به ماه تبدیل کنید\n",
"- قیمت را به صورت میانگین قیمتهای بالا و پایین محاسبه کنید\n",
"- قیمت را به گونهای تبدیل کنید که منعکسکننده قیمتگذاری بر اساس مقدار بوشل باشد \n"
"- فقط کدو تنبلهایی که بر اساس بوشل قیمتگذاری شدهاند را بگیرید\n",
"- تاریخ را به ماه تبدیل کنید\n",
"- قیمت را به صورت میانگین قیمت بالایی و پایینی محاسبه کنید\n",
"- قیمت را به گونهای تبدیل کنید که قیمتگذاری بر اساس مقدار بوشل را نشان دهد\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"یک نمودار پراکندگی به ما یادآوری میکند که فقط دادههای ماه از آگوست تا دسامبر را داریم. احتمالاً به دادههای بیشتری نیاز داریم تا بتوانیم به صورت خطی نتیجهگیری کنیم.\n"
"یک نمودار پراکنش به ما یادآوری میکند که دادههای ماهانه ما فقط از اوت تا دسامبر است. احتمالاً به دادههای بیشتری نیاز داریم تا بتوانیم به صورت خطی نتیجهگیری کنیم.\n"
]
},
{
@ -474,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"به نظر میرسد همبستگی بسیار کم است، اما یک رابطه مهمتر دیگری وجود دارد - زیرا نقاط قیمت در نمودار بالا به نظر میرسد چندین خوشه متمایز دارند. بیایید نموداری بسازیم که انواع مختلف کدو تنبل را نشان دهد:\n"
"به نظر میرسد همبستگی نسبتاً کم است، اما یک رابطهی مهمتر دیگری وجود دارد - زیرا نقاط قیمت در نمودار بالا به نظر میرسد چندین خوشه متمایز داشته باشند. بیایید نموداری بسازیم که انواع مختلف کدو تنبل را نشان دهد:\n"
]
},
{
@ -537,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"فعلاً بیایید فقط روی یک نوع - **نوع پای** - تمرکز کنیم.\n"
]
},
{
"cell_type": "code",
@ -691,7 +693,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"میتوانیم از مدل آموزشدیده برای پیشبینی قیمت استفاده کنیم:\n"
"ما میتوانیم از مدل آموزشدیده برای پیشبینی قیمت استفاده کنیم:\n"
]
},
{
@ -722,9 +724,9 @@
"source": [
"### رگرسیون چندجملهای\n",
"\n",
"گاهی اوقات رابطه بین ویژگیها و نتایج ذاتاً غیرخطی است. برای مثال، قیمت کدو تنبل ممکن است در زمستان (ماههای ۱ و ۲) بالا باشد، سپس در تابستان (ماههای ۵ تا ۷) کاهش یابد و دوباره افزایش پیدا کند. رگرسیون خطی نمیتواند این رابطه را بهدرستی پیدا کند.\n",
"گاهی رابطه بین ویژگیها و نتایج ذاتاً غیرخطی است. بهعنوان مثال، قیمت کدو تنبل ممکن است در زمستان (ماهها=1،2) بالا باشد، سپس در تابستان (ماهها=5-7) کاهش یابد، و سپس دوباره افزایش پیدا کند. رگرسیون خطی قادر به یافتن دقیق این رابطه نیست.\n",
"\n",
"در این حالت، میتوانیم اضافه کردن ویژگیهای اضافی را در نظر بگیریم. یک روش ساده استفاده از چندجملهایها بر اساس ویژگیهای ورودی است که منجر به **رگرسیون چندجملهای** میشود. در Scikit Learn، میتوانیم بهصورت خودکار ویژگیهای چندجملهای را با استفاده از پایپلاینها پیشمحاسبه کنیم:\n"
"در این حالت، ممکن است در نظر بگیریم که ویژگیهای اضافی اضافه کنیم. راه ساده استفاده از چندجملهایها از ویژگیهای ورودی است، که منجر به **رگرسیون چندجملهای** میشود. در Scikit Learn، ما میتوانیم ویژگیهای چندجملهای را بهطور خودکار با استفاده از خطوط لوله پیشمحاسبه کنیم: \n"
"در دنیای ایدهآل، میخواهیم بتوانیم قیمتهای انواع مختلف کدو تنبل را با استفاده از یک مدل پیشبینی کنیم. برای در نظر گرفتن نوع کدو، ابتدا باید آن را به شکل عددی تبدیل کنیم، یا به عبارت دیگر **کدگذاری** کنیم. چند روش برای انجام این کار وجود دارد:\n",
"در دنیای ایدهآل، میخواهیم بتوانیم قیمتها را برای انواع مختلف کدو تنبل با استفاده از همان مدل پیشبینی کنیم. برای در نظر گرفتن نوع، ابتدا باید آن را به صورت عددی تبدیل کنیم، یا **رمزگذاری** کنیم. راههای مختلفی برای این کار وجود دارد:\n",
"\n",
"* کدگذاری عددی ساده که یک جدول از انواع مختلف ایجاد میکند و سپس نام نوع را با یک شاخص در آن جدول جایگزین میکند. این روش برای رگرسیون خطی بهترین انتخاب نیست، زیرا رگرسیون خطی مقدار عددی شاخص را در نظر میگیرد و احتمالاً مقدار عددی با قیمت به صورت عددی همبستگی ندارد.\n",
"* کدگذاری یکداغ (One-hot encoding)، که ستون `Variety` را با ۴ ستون مختلف جایگزین میکند، یکی برای هر نوع، که اگر ردیف مربوط به نوع خاصی باشد مقدار ۱ و در غیر این صورت مقدار ۰ خواهد داشت.\n",
"* رمزگذاری عددی ساده که جدولی از انواع مختلف میسازد و سپس نام نوع را با یک شاخص در آن جدول جایگزین میکند. این ایده بهترین روش برای رگرسیون خطی نیست، زیرا رگرسیون خطی مقدار عددی شاخص را در نظر میگیرد و احتمالاً مقدار عددی با قیمت به صورت عددی همبستگی ندارد.\n",
"* رمزگذاری تکداغ (one-hot encoding)، که ستون `Variety` را با ۴ ستون مختلف جایگزین میکند، هر کدام برای هر نوع خاص، که در صورت تعلق ردیف مربوطه به آن نوع مقدار ۱ و در غیر این صورت ۰ دارد.\n",
"\n",
"کد زیر نشان میدهد که چگونه میتوان یک نوع را به صورت یکداغ کدگذاری کرد:\n"
"کد زیر نشان میدهد چگونه میتوان یک نوع را به صورت تکداغ رمزگذاری کرد:\n"
]
},
{
@ -942,9 +947,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### رگرسیون خطی بر روی انواع مختلف\n",
"### رگرسیون خطی بر روی واریته\n",
"\n",
"اکنون از همان کدی که در بالا استفاده کردیم بهره میبریم، اما به جای `DayOfYear` از نوعهای کدگذاریشده به صورت یک-داغ به عنوان ورودی استفاده خواهیم کرد:\n"
"اکنون همان کد بالا را استفاده خواهیم کرد، اما به جای `DayOfYear` از کدگذاری یکگرمی واریته به عنوان ورودی استفاده میکنیم:\n"
]
},
{
@ -992,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ما میتوانیم به همین روش از ویژگیهای دیگر نیز استفاده کنیم و آنها را با ویژگیهای عددی مانند `Month` یا `DayOfYear` ترکیب کنیم:\n"
"ما همچنین میتوانیم سعی کنیم از ویژگیهای دیگر به همان شیوه استفاده کنیم و آنها را با ویژگیهای عددی مانند `Month` یا `DayOfYear` ترکیب کنیم:\n"
]
},
{
@ -1025,7 +1030,7 @@
"source": [
"### رگرسیون چندجملهای\n",
"\n",
"رگرسیون چندجملهای میتواند برای ویژگیهای دستهبندیشده که به صورت یک-داغ کدگذاری شدهاند نیز استفاده شود. کدی که برای آموزش رگرسیون چندجملهای استفاده میشود اساساً مشابه چیزی است که در بالا مشاهده کردیم.\n"
"رگرسیون چندجملهای همچنین میتواند با ویژگیهای دستهای که بهصورت one-hot-encoded هستند استفاده شود. کدی که برای آموزش رگرسیون چندجملهای نوشته میشود اساساً مشابه همان چیزی است که در بالا دیدهایم.\n"
]
},
{
@ -1072,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**سلب مسئولیت**: \nاین سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه میشود از ترجمه حرفهای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**سلب مسئولیت**: \nاین سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در پی دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است دارای خطاها یا نادرستیهایی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما مسئول هیچگونه سوءتفاهم یا برداشت نادرستی که ناشی از استفاده از این ترجمه باشد، نیستیم.\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"
مشین لرننگ ماڈلز بنانے، استعمال کرنے، اور ان کے ڈیٹا کو برقرار رکھنے کا عمل دیگر ترقیاتی ورک فلو سے بہت مختلف ہے۔ اس سبق میں، ہم اس عمل کو واضح کریں گے اور وہ اہم تکنیکیں بیان کریں گے جو آپ کو جاننی چاہئیں۔ آپ:
مشین لرننگ ماڈلز بنانے، استعمال کرنے، اور انہیں برقرار رکھنے کا عمل، اور وہ ڈیٹا جو وہ استعمال کرتے ہیں، بہت سے دوسرے ترقیاتی ورک فلو سے بالکل مختلف ہے۔ اس سبق میں، ہم اس عمل کو آسان بنائیں گے، اور آپ کو بنیادی تکنیکیں بتائیں گے جو آپ کو جاننی چاہئیں۔ آپ:
- مشین لرننگ کے بنیادی عمل کو اعلیٰ سطح پر سمجھیں گے۔
- مشین لرننگ کے بنیادی عمل کو ایک اعلی سطح پر سمجھیں گے۔
- بنیادی تصورات جیسے 'ماڈلز'، 'پیش گوئیاں'، اور 'ٹریننگ ڈیٹا' کو دریافت کریں گے۔
## [لیکچر سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## [سبق سے پہلے کوئز](https://ff-quizzes.netlify.app/en/ml/)
[](https://youtu.be/4NGM0U2ZSHU "مشین لرننگ کے ابتدائی اصول - مشین لرننگ کی تکنیکیں")
[](https://youtu.be/4NGM0U2ZSHU "بازوکے لئے ML - مشین لرننگ کی تکنیکیں")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ اس سبق پر ایک مختصر ویڈیو دیکھ سکیں۔
> 🎥 اس سبق کی مختصر ویڈیو دیکھنے کے لیے اوپر تصویر پر کلک کریں۔
## تعارف
## تمہید
اعلیٰ سطح پر، مشین لرننگ (ML) کے عمل کو تخلیق کرنے کا فن کئی مراحل پر مشتمل ہوتا ہے:
اعلی سطح پر، مشین لرننگ (ML) کے عمل بنانے کا کام کئی مراحل پر مشتمل ہوتا ہے:
1. **سوال کا انتخاب کریں**۔ زیادہ تر ML عمل ایک ایسے سوال سے شروع ہوتے ہیں جس کا جواب کسی سادہ شرطی پروگرام یا قواعد پر مبنی انجن سے نہیں دیا جا سکتا۔ یہ سوالات اکثر ڈیٹا کے مجموعے کی بنیاد پر پیش گوئیوں کے گرد گھومتے ہیں۔
2. **ڈیٹا جمع کریں اور تیار کریں**۔ اپنے سوال کا جواب دینے کے لیے آپ کو ڈیٹا کی ضرورت ہوتی ہے۔ آپ کے ڈیٹا کی معیار اور کبھی کبھار مقدار یہ طے کرے گی کہ آپ اپنے ابتدائی سوال کا کتنا اچھا جواب دے سکتے ہیں۔ ڈیٹا کو بصری طور پر دیکھنا اس مرحلے کا ایک اہم پہلو ہے۔ اس مرحلے میں ڈیٹا کو ٹریننگ اور ٹیسٹنگ گروپ میں تقسیم کرنا بھی شامل ہے تاکہ ماڈل بنایا جا سکے۔
3. **ٹریننگ کا طریقہ منتخب کریں**۔ آپ کے سوال اور ڈیٹا کی نوعیت کے مطابق، آپ کو یہ فیصلہ کرنا ہوگا کہ ماڈل کو کس طرح تربیت دی جائے تاکہ وہ آپ کے ڈیٹا کی بہترین عکاسی کرے اور اس کے خلاف درست پیش گوئیاں کرے۔ یہ ML عمل کا وہ حصہ ہے جو مخصوص مہارت اور اکثر کافی تجربے کی ضرورت ہوتی ہے۔
4. **ماڈل کو تربیت دیں**۔ اپنے ٹریننگ ڈیٹا کا استعمال کرتے ہوئے، آپ مختلف الگورتھمز کا استعمال کریں گے تاکہ ماڈل کو ڈیٹا میں موجود پیٹرنز کو پہچاننے کی تربیت دی جا سکے۔ ماڈل اندرونی وزن کا استعمال کر سکتا ہے جو ڈیٹا کے کچھ حصوں کو دوسروں پر ترجیح دینے کے لیے ایڈجسٹ کیے جا سکتے ہیں تاکہ بہتر ماڈل بنایا جا سکے۔
5. **ماڈل کا جائزہ لیں**۔ آپ اپنے جمع کردہ سیٹ سے پہلے کبھی نہ دیکھے گئے ڈیٹا (اپنے ٹیسٹنگ ڈیٹا) کا استعمال کریں گے تاکہ ماڈل کی کارکردگی کو جانچ سکیں۔
6. **پیرامیٹرز کو بہتر بنائیں**۔ اپنے ماڈل کی کارکردگی کی بنیاد پر، آپ مختلف پیرامیٹرز یا متغیرات کا استعمال کرتے ہوئے عمل کو دوبارہ کر سکتے ہیں جو ماڈل کو تربیت دینے کے لیے استعمال کیے گئے الگورتھمز کے رویے کو کنٹرول کرتے ہیں۔
7. **پیش گوئی کریں**۔ نئے ان پٹ کا استعمال کریں تاکہ اپنے ماڈل کی درستگی کو جانچ سکیں۔
1. **سوال کا تعین کریں**۔ زیادہ تر ML عمل ایک ایسے سوال سے شروع ہوتے ہیں جس کا جواب سادہ مشروط پروگرام یا قواعد پر مبنی انجن سے نہیں دیا جا سکتا۔ یہ سوالات اکثر ایک ڈیٹا کے مجموعے پر مبنی پیش گوئیوں کے بارے میں ہوتے ہیں۔
2. **ڈیٹا جمع کریں اور تیار کریں**۔ اپنے سوال کا جواب دینے کے لیے، آپ کو ڈیٹا کی ضرورت ہوتی ہے۔ آپ کے ڈیٹا کا معیار اور بعض اوقات مقدار طے کرے گی کہ آپ اپنے ابتدائی سوال کا کتنا اچھے طریقے سے جواب دے سکتے ہیں۔ ڈیٹا کو بصری طور پر دیکھنا اس مرحلے کا ایک اہم جزو ہے۔ اس مرحلے میں ڈیٹا کو تربیت اور جانچ کے گروپ میں تقسیم کرنا بھی شامل ہے تاکہ ماڈل بنایا جا سکے۔
3. **ٹریننگ طریقہ منتخب کریں**۔ اپنے سوال اور ڈیٹا کی نوعیت کے مطابق، آپ کو یہ منتخب کرنا ہوگا کہ آپ کس طرح ماڈل کو تربیت دینا چاہتے ہیں تاکہ وہ آپ کے ڈیٹا کی بہترین نمائندگی کرے اور اس پر درست پیش گوئیاں کریں۔ یہ آپ کے ML عمل کا وہ حصہ ہے جس کے لیے خاص مہارت اور اکثر کافی تجربہ درکار ہوتا ہے۔
4. **ماڈل کو تربیت دیں**۔ اپنے تربیتی ڈیٹا کا استعمال کرتے ہوئے، آپ مختلف الگورتھمز کا استعمال کر کے ماڈل کو ڈیٹا میں موجود پیٹرنز پہچاننے کے لیے تربیت دیں گے۔ ماڈل اندرونی وزنوں کا استعمال کر سکتا ہے جن کو ایڈجسٹ کیا جا سکتا ہے تاکہ ڈیٹا کے کچھ حصوں کو ترجیح دی جائے اور بہتر ماڈل بنایا جا سکے۔
5. **ماڈل کا جائزہ لیں**۔ آپ اپنے جمع کردہ ڈیٹا کے ایسے حصے (جانچ کے ڈیٹا) کا استعمال کریں گے جو ماڈل نے پہلے کبھی نہیں دیکھا تاکہ ماڈل کی کارکردگی کا جائزہ لیا جا سکے۔
6. **پیرامیٹر ٹیوننگ**۔ ماڈل کی کارکردگی کی بنیاد پر، آپ اس عمل کو مختلف پیرامیٹرز یا متغیرات کے ساتھ دوبارہ کر سکتے ہیں جو ماڈل کو تربیت دینے کے لیے استعمال ہونے والے الگورتھمز کے رویے کو کنٹرول کرتے ہیں۔
7. **پیش گوئی کریں**۔ نئے ان پٹ استعمال کر کے ماڈل کی درستگی کو آزما سکتے ہیں۔
## کون سا سوال پوچھنا ہے
## کس سوال کا پوچھنا ہے
کمپیوٹرز ڈیٹا میں چھپے ہوئے پیٹرنز کو دریافت کرنے میں خاص طور پر ماہر ہیں۔ یہ صلاحیت ان محققین کے لیے بہت مددگار ہے جن کے پاس کسی خاص شعبے کے بارے میں ایسے سوالات ہیں جن کا جواب آسانی سے شرطی قواعد کے انجن بنا کر نہیں دیا جا سکتا۔ مثال کے طور پر، ایک ایکچوریل کام کے لیے، ایک ڈیٹا سائنسدان سگریٹ نوشی کرنے والوں اور نہ کرنے والوں کی اموات کے بارے میں ہاتھ سے بنائے گئے قواعد بنا سکتا ہے۔
کمپیوٹر ڈیٹا میں پوشیدہ نمونوں کو دریافت کرنے میں خاص مہارت رکھتے ہیں۔ یہ صلاحیت ان محققین کے لیے بہت مددگار ہے جن کے پاس کسی مخصوص موضوع کے بارے میں ایسے سوالات ہوتے ہیں جن کا آسانی سے مشروط قواعد پر مبنی انجن بنا کر جواب نہیں دیا جا سکتا۔ مثال کے طور پر، ایک ڈیٹا سائنسدان تعمیری قواعد بنا سکتا ہے کہ سگریٹ نوشوں اور غیر سگریٹ نوشوں میں موت کی شرح کیا ہے۔
تاہم، جب بہت سے دیگر متغیرات کو مساوات میں شامل کیا جاتا ہے، تو ایک ML ماڈل ماضی کی صحت کی تاریخ کی بنیاد پر مستقبل کی اموات کی شرح کی پیش گوئی کرنے میں زیادہ مؤثر ثابت ہو سکتا ہے۔ ایک خوشگوار مثال اپریل کے مہینے میں کسی مخصوص مقام کے لیے موسم کی پیش گوئی کرنا ہو سکتی ہے، جس میں ڈیٹا شامل ہو جیسے عرض البلد، طول البلد، موسمیاتی تبدیلی، سمندر کے قریب ہونے کی وجہ، جیٹ اسٹریم کے پیٹرنز، اور مزید۔
لیکن جب کئی دوسرے متغیرات بھی شامل کیے جاتے ہیں، تو مشین لرننگ ماڈل ماضی کی صحت کی تاریخ کی بنیاد پر مستقبل کی موت کی شرح کی بہتر پیش گوئی کر سکتا ہے۔ ایک خوش آئند مثال یہ ہو سکتی ہے کہ اپریل کے مہینے کے لیے موسم کی پیش گوئی کی جائے، جو اس جگہ کے طول بلد، عرض بلد، موسمی تبدیلی، سمندر کی قربت، جیٹ اسٹریم کے پیٹرنز، اور مزید عوامل پر مبنی ہو۔
✅ یہ [سلائیڈ ڈیک](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) موسم کے ماڈلز میں ML کے استعمال کے لیے ایک تاریخی نقطہ نظر پیش کرتا ہے۔
✅ اس [سلائیڈ ڈیک](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) میں موسم کے ماڈلز پر تاریخی نظر سے مشین لرننگ کے موسم کی تحلیل میں استعمال کو بیان کیا گیا ہے۔
## ماڈل بنانے سے پہلے کے کام
ماڈل بنانے سے پہلے، آپ کو کئی کام مکمل کرنے کی ضرورت ہوتی ہے۔ اپنے سوال کو جانچنے اور ماڈل کی پیش گوئیوں کی بنیاد پر ایک مفروضہ بنانے کے لیے، آپ کو کئی عناصر کی شناخت اور ترتیب دینی ہوگی۔
ماڈل بنانے سے پہلے، آپ کو کئی کام مکمل کرنے ہوتے ہیں۔ سوال کی جانچ کے لیے اور ماڈل کی پیش گوئیوں کی بنیاد پر ایک مفروضہ بنانے کے لیے، آپ کو کئی عناصر کی شناخت اور ترتیب دینی ہوگی۔
### ڈیٹا
اپنے سوال کا کسی بھی قسم کی یقین دہانی کے ساتھ جواب دینے کے لیے، آپ کو صحیح قسم کے ڈیٹا کی مناسب مقدار کی ضرورت ہوتی ہے۔ اس وقت آپ کو دو کام کرنے کی ضرورت ہے:
اپنے سوال کا یقین کے ساتھ جواب دینے کے لیے، آپ کو درست قسم کا کافی ڈیٹا چاہیے۔ اس مرحلے پر دو باتیں ضروری ہیں:
- **ڈیٹا جمع کریں**۔ ڈیٹا کے تجزیے میں انصاف کے بارے میں پچھلے سبق کو ذہن میں رکھتے ہوئے، اپنے ڈیٹا کو احتیاط سے جمع کریں۔ اس ڈیٹا کے ذرائع، اس میں موجود کسی بھی اندرونی تعصب، اور اس کی اصل کو دستاویزی شکل میں رکھیں۔
- **ڈیٹا تیار کریں**۔ ڈیٹا کی تیاری کے عمل میں کئی مراحل شامل ہیں۔ اگر ڈیٹا مختلف ذرائع سے آتا ہے تو آپ کو اسے جمع کرنا اور معمول پر لانا پڑ سکتا ہے۔ آپ مختلف طریقوں سے ڈیٹا کے معیار اور مقدار کو بہتر بنا سکتے ہیں، جیسے کہ اسٹرنگز کو نمبروں میں تبدیل کرنا (جیسا کہ ہم [کلسٹرنگ](../../5-Clustering/1-Visualize/README.md) میں کرتے ہیں)۔ آپ اصل ڈیٹا کی بنیاد پر نیا ڈیٹا بھی تیار کر سکتے ہیں (جیسا کہ ہم [کلاسیفیکیشن](../../4-Classification/1-Introduction/README.md) میں کرتے ہیں)۔ آپ ڈیٹا کو صاف اور ترمیم کر سکتے ہیں (جیسا کہ ہم [ویب ایپ](../../3-Web-App/README.md) سبق سے پہلے کریں گے)۔ آخر میں، آپ کو اسے بے ترتیب اور شفل کرنے کی بھی ضرورت ہو سکتی ہے، جو آپ کی تربیتی تکنیکوں پر منحصر ہے۔
- **ڈیٹا اکٹھا کریں**۔ ڈیٹا تجزیے میں عدل و انصاف کے اس سبق کو ذہن میں رکھتے ہوئے، اپنے ڈیٹا کو احتیاط سے جمع کریں۔ اس ڈیٹا کے ذرائع، اس میں موجود ممکنہ تعصبات، اور اس کی اصلیت کا دستاویزی ریکارڈ رکھیں۔
- **ڈیٹا تیار کریں**۔ ڈیٹا کی تیاری کے کئی مراحل ہوتے ہیں۔ آپ کو مختلف ذرائع سے آئے ہوئے ڈیٹا کو یکجا اور نارملائز کرنا پڑ سکتا ہے۔ آپ مختلف طریقوں سے ڈیٹا کے معیار اور مقدار کو بہتر بنا سکتے ہیں، مثلاً اسٹارنگز کو نمبرز میں تبدیل کرنا (جیسا ہم [کلسٹرنگ](../../5-Clustering/1-Visualize/README.md) میں کرتے ہیں)۔ آپ اصل ڈیٹا کی بنیاد پر نیا ڈیٹا بھی بنا سکتے ہیں (جیسا ہم [کلاسیکیشن](../../4-Classification/1-Introduction/README.md) میں کرتے ہیں). آپ ڈیٹا کو صاف اور ترمیم بھی کر سکتے ہیں (جیسا ہم [ویب ایپ](../../3-Web-App/README.md) سبق سے پہلے کریں گے). آخر میں، آپ کو اپنے تربیتی طریقوں کی مناسبت سے ڈیٹا کو رینڈمائز اور شفل بھی کرنا پڑ سکتا ہے۔
✅ ڈیٹا جمع کرنے اور اس پر عمل کرنے کے بعد، ایک لمحہ نکالیں تاکہ یہ دیکھ سکیں کہ آیا اس کی شکل آپ کے مطلوبہ سوال کو حل کرنے کی اجازت دے گی۔ یہ ممکن ہے کہ ڈیٹا آپ کے دیے گئے کام میں اچھی کارکردگی نہ دکھائے، جیسا کہ ہم اپنے [کلسٹرنگ](../../5-Clustering/1-Visualize/README.md) اسباق میں دریافت کرتے ہیں!
✅ اپنے ڈیٹا کو جمع اور پراسیس کرنے کے بعد، ایک لمحہ لیں اور دیکھیں کہ کیا اس کی شکل آپ کے ارادے والا سوال حل کرنے کے قابل ہے۔ ممکن ہے کہ ڈیٹا آپ کے مخصوص کام میں اچھی کارکردگی نہ دکھائے، جیسا ہم [کلسٹرنگ](../../5-Clustering/1-Visualize/README.md) کے دروس میں دریافت کرتے ہیں!
### فیچرز اور ہدف
ایک [فیچر](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) آپ کے ڈیٹا کی ایک قابل پیمائش خصوصیت ہے۔ بہت سے ڈیٹا سیٹس میں یہ 'تاریخ'، 'سائز' یا 'رنگ' جیسے کالم ہیڈنگ کے طور پر ظاہر ہوتا ہے۔ آپ کا فیچر متغیر، جو عام طور پر کوڈ میں `X` کے طور پر ظاہر ہوتا ہے، ان پٹ متغیر کی نمائندگی کرتا ہے جو ماڈل کو تربیت دینے کے لیے استعمال کیا جائے گا۔
ایک [فیچر](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) آپ کے ڈیٹا کی قابلِ پیمائش خصوصیت ہے۔ بہت سے ڈیٹا سیٹس میں اسے ایک کالم کے عنوان کے طور پر ظاہر کیا جاتا ہے جیسے 'تاریخ'، 'سائز' یا 'رنگ'۔ آپ کا فیچر ویریبل عام طور پر کوڈ میں `X` کے طور پر ظاہر کیا جاتا ہے، جو ان پٹ ویریبل ہے جسے ماڈل کو تربیت دینے کے لیے استعمال کیا جائے گا۔
ایک ہدف وہ چیز ہے جس کی آپ پیش گوئی کرنے کی کوشش کر رہے ہیں۔ ہدف، جو عام طور پر کوڈ میں `y` کے طور پر ظاہر ہوتا ہے، اس سوال کا جواب دیتا ہے جو آپ اپنے ڈیٹا سے پوچھنے کی کوشش کر رہے ہیں: دسمبر میں کون سے **رنگ** کے کدو سب سے سستے ہوں گے؟ سان فرانسسکو میں کون سے محلوں میں بہترین جائیداد کی **قیمت** ہوگی؟ کبھی کبھی ہدف کو لیبل ایٹریبیوٹ بھی کہا جاتا ہے۔
ہدف وہ چیز ہے جس کی آپ پیش گوئی کرنے کی کوشش کر رہے ہیں۔ ہدف، جو عموماً کوڈ میں `y` کے طور پر ظاہر ہوتا ہے، آپ کے سوال کا جواب ہے جو آپ اپنے ڈیٹا سے پوچھنا چاہتے ہیں: دسمبر میں، سب سے سستی کدو کا **رنگ** کیا ہوگا؟ سان فرانسسکو میں، کون سے محلے رہائشی جائیداد کی بہترین **قیمت** رکھیں گے؟ ہدف کو بعض اوقات لیبل وصف بھی کہا جاتا ہے۔
### اپنے فیچر متغیر کا انتخاب
### فیچر ویریبل منتخب کرنا
🎓 **فیچر سلیکشن اور فیچر ایکسٹریکشن** جب آپ ماڈل بناتے وقت متغیر کا انتخاب کرتے ہیں تو آپ کیسے جانتے ہیں کہ کون سا منتخب کرنا ہے؟ آپ شاید فیچر سلیکشن یا فیچر ایکسٹریکشن کے عمل سے گزریں گے تاکہ بہترین ماڈل کے لیے صحیح متغیرات کا انتخاب کیا جا سکے۔ تاہم، یہ دونوں ایک جیسے نہیں ہیں: "فیچر ایکسٹریکشن اصل فیچرز کے فنکشنز سے نئے فیچرز بناتا ہے، جبکہ فیچر سلیکشن فیچرز کے ایک سب سیٹ کو واپس کرتا ہے۔" ([ماخذ](https://wikipedia.org/wiki/Feature_selection))
🎓 **فیچر انتخاب اور فیچر استخراج** آپ کیسے جانیں گے کہ ماڈل بناتے وقت کون سا ویریبل منتخب کرنا ہے؟ آپ غالباً فیچر انتخاب یا فیچر استخراج کے عمل سے گزریں گے تاکہ بہترین کارکردگی والے ماڈل کے لیے درست متغیرات منتخب کر سکیں۔ تاہم یہ ایک جیسے نہیں ہیں: "فیچر استخراج اصل فیچرز کے فنکشنز سے نئے فیچرز بناتا ہے، جبکہ فیچر انتخاب فیچرز کا ایک ذیلی مجموعہ واپس دیتا ہے۔" ([ماخذ](https://wikipedia.org/wiki/Feature_selection))
### اپنے ڈیٹا کو بصری طور پر دیکھیں
### اپنے ڈیٹا کا بصری جائزہ لیں
ڈیٹا سائنسدان کے ٹول کٹ کا ایک اہم پہلو ڈیٹا کو بصری طور پر دیکھنے کی طاقت ہے، جس کے لیے کئی بہترین لائبریریاں موجود ہیں جیسے Seaborn یا MatPlotLib۔ اپنے ڈیٹا کو بصری طور پر پیش کرنا آپ کو چھپے ہوئے تعلقات کو دریافت کرنے کی اجازت دے سکتا ہے جنہیں آپ فائدہ اٹھا سکتے ہیں۔ آپ کے بصری نمائندے آپ کو تعصب یا غیر متوازن ڈیٹا کو بھی ظاہر کر سکتے ہیں (جیسا کہ ہم [کلاسیفیکیشن](../../4-Classification/2-Classifiers-1/README.md) میں دریافت کرتے ہیں)۔
ڈیٹا سائنسدان کے آلے میں ایک اہم خصوصیت مختلف عمدہ لائبریریز جیسے Seaborn یا MatPlotLib کا استعمال کرتے ہوئے ڈیٹا کو بصری طور پر ظاہر کرنے کی طاقت ہے۔ اپنے ڈیٹا کو بصری شکل میں پیش کرنے سے آپ ممکنہ طور پر چھپے ہوئے تعلقات دریافت کر سکتے ہیں جن سے فائدہ اٹھایا جا سکتا ہے۔ آپ کی بصری نمائیشات آپ کو تعصب یا غیر متوازن ڈیٹا کو بھی ظاہر کر سکتی ہیں (جیسا ہم [کلاسیکیشن](../../4-Classification/2-Classifiers-1/README.md) میں دریافت کرتے ہیں)۔
### اپنے ڈیٹا سیٹ کو تقسیم کریں
### اپنا ڈیٹا سیٹ تقسیم کریں
تربیت سے پہلے، آپ کو اپنے ڈیٹا سیٹ کو دو یا زیادہ غیر مساوی حصوں میں تقسیم کرنا ہوگا جو پھر بھی ڈیٹا کی اچھی نمائندگی کرتے ہیں۔
ٹریننگ سے پہلے، آپ کو اپنے ڈیٹا سیٹ کو دو یا زیادہ غیر مساوی حصوں میں تقسیم کرنا ہوگا جو اب بھی ڈیٹا کی اچھی نمائندگی کرتے ہوں۔
- **ٹریننگ**۔ ڈیٹا سیٹ کا یہ حصہ آپ کے ماڈل کو تربیت دینے کے لیے استعمال کیا جاتا ہے۔ یہ سیٹ اصل ڈیٹا سیٹ کا زیادہ تر حصہ ہوتا ہے۔
- **ٹیسٹنگ**۔ ایک ٹیسٹ ڈیٹا سیٹ اصل ڈیٹا سے حاصل کردہ ایک آزاد ڈیٹا گروپ ہے، جسے آپ بنائے گئے ماڈل کی کارکردگی کی تصدیق کے لیے استعمال کرتے ہیں۔
- **ویلیڈیٹنگ**۔ ایک ویلیڈیشن سیٹ ایک چھوٹا آزاد گروپ ہے جسے آپ ماڈل کے ہائپر پیرامیٹرز یا آرکیٹیکچر کو بہتر بنانے کے لیے استعمال کرتے ہیں۔ آپ کے ڈیٹا کے سائز اور آپ کے سوال پر منحصر ہے، آپ کو یہ تیسرا سیٹ بنانے کی ضرورت نہیں ہو سکتی (جیسا کہ ہم [ٹائم سیریز فورکاسٹنگ](../../7-TimeSeries/1-Introduction/README.md) میں نوٹ کرتے ہیں)۔
- **ٹریننگ**۔ ڈیٹا سیٹ کا یہ حصہ آپ کے ماڈل کو تربیت دینے کے لیے استعمال ہوتا ہے۔ یہ سیٹ اصل ڈیٹا سیٹ کی اکثریت پر مشتمل ہوتا ہے۔
- **جانچ**۔ ٹیسٹ ڈیٹا سیٹ ایک خودمختار ڈیٹا کا گروپ ہوتا ہے، جو عموماً اصل ڈیٹا سے لیا جاتا ہے، تاکہ بنائے گئے ماڈل کی کارکردگی کی تصدیق کی جا سکے۔
- **تصدیق**۔ ایک تصدیقی سیٹ چھوٹے خودمختار نمونوں کا گروپ ہوتا ہے جسے آپ ماڈل کے ہائپر پیرامیٹرز یا ساخت کو بہتر بنانے کے لیے استعمال کرتے ہیں۔ آپ کے ڈیٹا کے حجم اور سوال کے مطابق، ممکن ہے کہ آپ کو یہ تیسرا سیٹ بنانے کی ضرورت نہ ہو (جیسا ہم [ٹائم سیریز فورکاسٹنگ](../../7-TimeSeries/1-Introduction/README.md) میں نوٹ کرتے ہیں)۔
## ماڈل بنانا
اپنے ٹریننگ ڈیٹا کا استعمال کرتے ہوئے، آپ کا مقصد ایک ماڈل بنانا ہے، یا اپنے ڈیٹا کی شماریاتی نمائندگی، جسے مختلف الگورتھمز کے ذریعے **ٹرین** کیا جاتا ہے۔ ماڈل کو تربیت دینا اسے ڈیٹا کے سامنے لاتا ہے اور اسے دریافت کیے گئے پیٹرنز کے بارے میں مفروضے بنانے، ان کی تصدیق کرنے، اور قبول یا مسترد کرنے کی اجازت دیتا ہے۔
اپنے تربیتی ڈیٹا کا استعمال کرتے ہوئے، آپ کا ہدف ماڈل بنانا ہے، یا آپ کے ڈیٹا کی شماریاتی نمائندگی، مختلف الگورتھمز کے ذریعے اسے **تربیت دینا**۔ ماڈل کو تربیت دینا اسے ڈیٹا کے سامنے لانا ہے تاکہ وہ دریافت کردہ نمونوں کے بارے میں اندازہ لگا سکے، انہیں تصدیق کرے، اور قبول یا رد کرے۔
### تربیت کا طریقہ منتخب کریں
اپنے سوال اور ڈیٹا کی نوعیت کے مطابق، آپ اسے تربیت دینے کے لیے ایک طریقہ منتخب کریں گے۔ [Scikit-learn کی دستاویزات](https://scikit-learn.org/stable/user_guide.html) کے ذریعے قدم بہ قدم چلتے ہوئے - جسے ہم اس کورس میں استعمال کرتے ہیں - آپ ماڈل کو تربیت دینے کے کئی طریقے دریافت کر سکتے ہیں۔ آپ کے تجربے پر منحصر ہے، آپ کو بہترین ماڈل بنانے کے لیے کئی مختلف طریقے آزمانے پڑ سکتے ہیں۔ آپ ممکنہ طور پر ایک عمل سے گزریں گے جس میں ڈیٹا سائنسدان ماڈل کی کارکردگی کا جائزہ لیتے ہیں، اسے غیر دیکھے گئے ڈیٹا کے ساتھ کھلاتے ہیں، درستگی، تعصب، اور دیگر معیار کو کم کرنے والے مسائل کی جانچ کرتے ہیں، اور دیے گئے کام کے لیے سب سے مناسب تربیتی طریقہ منتخب کرتے ہیں۔
اپنے سوال اور ڈیٹا کی نوعیت کے مطابق، آپ انتخاب کریں گے کہ کس طرح ماڈل کو تربیت دینا ہے۔ [Scikit-learn کی دستاویزات](https://scikit-learn.org/stable/user_guide.html) کو دیکھتے ہوئے - جسے ہم اس کورس میں استعمال کرتے ہیں - آپ بہت سے طریقے تلاش کر سکتے ہیں جن سے ماڈل کو تربیت دیا جا سکتا ہے۔ آپ کو مختلف طریقے آزمانا پڑ سکتے ہیں تاکہ بہترین ماڈل بنایا جا سکے۔ ڈیٹا سائنسدان اکثر ماڈل کی کارکردگی کا جائزہ لیتے ہیں اس کا ڈیٹا اس وقت نہیں دیکھ چکا ہوتا، درستگی، تعصب، اور دیگر مسائل چیک کرتے ہیں، اور سب سے مناسب تربیتی طریقہ منتخب کرتے ہیں۔
### ماڈل کو تربیت دیں
اپنے ٹریننگ ڈیٹا کے ساتھ، آپ 'فٹ' کرنے کے لیے تیار ہیں تاکہ ایک ماڈل بنایا جا سکے۔ آپ دیکھیں گے کہ بہت سی ML لائبریریوں میں آپ کو 'model.fit' کوڈ ملے گا - یہ وہ وقت ہے جب آپ اپنے فیچر متغیر کو ویلیوز کے ایک ارے کے طور پر بھیجتے ہیں (عام طور پر 'X') اور ایک ہدف متغیر (عام طور پر 'y')۔
اپنے تربیتی ڈیٹا کے ساتھ، آپ تیار ہیں کہ اسے 'فٹ' کریں تاکہ ماڈل بنائیں۔ آپ دیکھیں گے کہ بہت سی ML لائبریریز میں آپ کو 'model.fit' کوڈ ملے گا — اسی وقت آپ اپنا فیچر ویریبل بطور قیمتوں والی صف (عام طور پر 'X') اور ہدف ویریبل (عام طور پر 'y') بھیجتے ہیں۔
### ماڈل کا جائزہ لیں
ایک بار تربیتی عمل مکمل ہو جائے (ایک بڑے ماڈل کو تربیت دینے کے لیے کئی تکرار، یا 'epochs' لگ سکتے ہیں)، آپ ٹیسٹ ڈیٹا کا استعمال کرتے ہوئے ماڈل کی کارکردگی کو جانچ کر اس کے معیار کا جائزہ لے سکیں گے۔ یہ ڈیٹا اصل ڈیٹا کا ایک ذیلی سیٹ ہے جسے ماڈل نے پہلے کبھی تجزیہ نہیں کیا۔ آپ اپنے ماڈل کے معیار کے بارے میں میٹرکس کی ایک ٹیبل پرنٹ کر سکتے ہیں۔
جب تربیت کا عمل مکمل ہو جاتا ہے (بڑے ماڈلز کو تربیت دینے میں کئی تکرار یا 'ایپوکس' لگ سکتے ہیں)، تو آپ ٹیسٹ ڈیٹا استعمال کر کے ماڈل کی معیار کا جائزہ لے سکتے ہیں۔ یہ ڈیٹا اصل ڈیٹا کا وہ حصہ ہوتا ہے جسے ماڈل نے پہلے کبھی نہیں دیکھا۔ آپ ماڈل کی کارکردگی کے بارے میں میٹرکس کی ایک جدول پرنٹ کر سکتے ہیں۔
🎓 **ماڈل فٹنگ**
مشین لرننگ کے سیاق و سباق میں، ماڈل فٹنگ اس ماڈل کے بنیادی فنکشن کی درستگی کو ظاہر کرتا ہے کیونکہ یہ ڈیٹا کا تجزیہ کرنے کی کوشش کرتا ہے جس سے یہ واقف نہیں ہے۔
مشین لرننگ کے تناظر میں، ماڈل فٹنگ اس ماڈل کی بنیادی فنکشن کی درستگی کو کہتے ہیں جب وہ ایسے ڈیٹا کا تجزیہ کرتا ہے جس سے وہ واقف نہیں ہوتا۔
🎓 **انڈر فٹنگ** اور **اوور فٹنگ** عام مسائل ہیں جو ماڈل کے معیار کو کم کرتے ہیں، کیونکہ ماڈل یا تو کافی اچھا فٹ نہیں ہوتا یا بہت زیادہ فٹ ہوتا ہے۔ یہ ماڈل کو پیش گوئیاں کرنے کا سبب بنتا ہے جو یا تو اس کے ٹریننگ ڈیٹا کے ساتھ بہت زیادہ یا بہت کم ہم آہنگ ہوتی ہیں۔ ایک اوور فٹ ماڈل ٹریننگ ڈیٹا کو بہت اچھی طرح سے پیش گوئی کرتا ہے کیونکہ اس نے ڈیٹا کی تفصیلات اور شور کو بہت اچھی طرح سے سیکھ لیا ہے۔ ایک انڈر فٹ ماڈل درست نہیں ہے کیونکہ یہ نہ تو اپنے ٹریننگ ڈیٹا کا درست تجزیہ کر سکتا ہے اور نہ ہی اس ڈیٹا کا جو اس نے ابھی تک 'دیکھا' نہیں ہے۔
🎓 **انڈر فٹنگ** اور **اوور فٹنگ** عام مسائل ہیں جو ماڈل کی معیار کو خراب کرتے ہیں، کیونکہ ماڈل یا تو اچھی طرح فٹ نہیں ہوتا یا بہت زیادہ فٹ ہو جاتا ہے۔ اس کی وجہ سے ماڈل کی پیش گوئیاں یا تو تربیتی ڈیٹا کے ساتھ بہت قریب ہوتی ہیں یا بہت دور۔ ایک اوورفٹ ماڈل تربیتی ڈیٹا کو بہت اچھے طریقے سے پیش گوئی کرتا ہے کیونکہ اس نے ڈیٹا کی تفصیلات اور شور کو بہت اچھی طرح سیکھ لیا ہوتا ہے۔ ایک انڈر فٹ ماڈل درست نہیں ہوتا کیونکہ وہ نہ اپنے تربیتی ڈیٹا کو درست تجزیہ کر پاتا ہے اور نہ ایسے ڈیٹا کو جو اس نے ابھی دیکھا نہ ہو۔
> انفرافک آف جن لوپر کی طرف سے ([Jen Looper](https://twitter.com/jenlooper))
## پیرامیٹرز کو بہتر بنانا
## پیرامیٹر ٹیوننگ
ایک بار آپ کی ابتدائی تربیت مکمل ہو جائے، ماڈل کے معیار کا مشاہدہ کریں اور اس کے 'ہائپر پیرامیٹرز' کو ایڈجسٹ کر کے اسے بہتر بنانے پر غور کریں۔ اس عمل کے بارے میں مزید پڑھیں [دستاویزات میں](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)۔
جب آپ کی ابتدائی تربیت مکمل ہو جائے، تو ماڈل کی معیار کو دیکھیں اور اس کی 'ہائپر پیرامیٹرز' کو تبدیل کر کے بہتری پر غور کریں۔ اس عمل کے بارے میں مزید پڑھیں [دستاویزات میں](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)۔
## پیش گوئی
یہ وہ لمحہ ہے جب آپ بالکل نئے ڈیٹا کا استعمال کر کے اپنے ماڈل کی درستگی کو جانچ سکتے ہیں۔ ایک 'اپلائیڈ' ML سیٹنگ میں، جہاں آپ ماڈل کو پروڈکشن میں استعمال کرنے کے لیے ویب اثاثے بنا رہے ہیں، یہ عمل صارف کے ان پٹ (مثال کے طور پر ایک بٹن دبانے) کو متغیر کے طور پر جمع کرنے اور ماڈل کو انفرنس یا جائزے کے لیے بھیجنے میں شامل ہو سکتا ہے۔
یہ وہ لمحہ ہے جب آپ بالکل نئے ڈیٹا کا استعمال کر کے اپنے ماڈل کی درستگی کو آزما سکتے ہیں۔ ایک 'اطلاق شدہ' ML ماحول میں، جہاں آپ ماڈل کو پروڈکشن میں استعمال کے لیے ویب اثاثے بنا رہے ہیں، یہ عمل ممکنہ طور پر صارف کی ان پٹ (مثلاً بٹن دبانا) حاصل کرنے، ایک ویریبل سیٹ کرنے، اور اسے ماڈل کو انفرنس یا تشخیص کے لیے بھیجنے پر مشتمل ہوتا ہے۔
ان اسباق میں، آپ دریافت کریں گے کہ ان مراحل کو کیسے تیار کریں، بنائیں، جانچیں، جائزہ لیں، اور پیش گوئی کریں - ڈیٹا سائنسدان کے تمام اشارے اور مزید، جیسے کہ آپ 'فل اسٹیک' ML انجینئر بننے کے سفر میں ترقی کرتے ہیں۔
ان دروس میں، آپ سیکھیں گے کہ ان مراحل کو کیسے استعمال کریں: تیار کرنا، بنانا، آزمانا، جانچنا، اور پیش گوئی کرنا — یہ سب ڈیٹا سائنسدان کے اشارے اور اس سے بھی زیادہ، جب آپ 'فل اسٹیک' ML انجینئر بننے کے لیے اپنی سفر میں آگے بڑھیں گے۔
---
## 🚀چیلنج
مشین لرننگ کے ماہر کے مراحل کی عکاسی کرنے کے لیے ایک فلو چارٹ بنائیں۔ آپ اس عمل میں ابھی کہاں ہیں؟ آپ کو کہاں مشکل پیش آنے کی توقع ہے؟ آپ کو کیا آسان لگتا ہے؟
ایک فلو چارٹ بنائیں جو ML کے ماہر کے مراحل کی عکاسی کرے۔ آپ خود کو اس عمل کے کس مرحلے پر پاتے ہیں؟ آپ کو کہاں مشکلات کا سامنا ہو سکتا ہے؟ آپ کو کیا آسان لگتا ہے؟
## [لیکچر کے بعد کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## [سبق کے بعد کوئز](https://ff-quizzes.netlify.app/en/ml/)
## جائزہ اور خود مطالعہ
آن لائن تلاش کریں کہ ڈیٹا سائنسدان اپنے روزمرہ کے کام کے بارے میں کیا بات کرتے ہیں۔ یہاں ایک [ویڈیو](https://www.youtube.com/watch?v=Z3IjgbbCEfs) ہے۔
انٹرنیٹ پر ایسے ڈیٹا سائنسدانوں کے انٹرویوز تلاش کریں جو اپنے روزمرہ کے کام کے بارے میں بات کرتے ہوں۔ یہاں [ایک](https://www.youtube.com/watch?v=Z3IjgbbCEfs) موجود ہے۔
## اسائنمنٹ
@ -119,5 +119,7 @@
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**ڈسکلیمر**:
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ اگرچہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم آگاہ رہیں کہ خودکار تراجم میں غلطیاں یا بے دقتیاں ہو سکتی ہیں۔ اصل دستاویز اپنی مادری زبان میں قابلِ اعتبار ماخذ سمجھی جانی چاہیے۔ اہم معلومات کے لیے پیشہ ور انسانی ترجمہ تجویز کیا جاتا ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
> ### [یہ سبق R میں دستیاب ہے!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
> ### [یہ سبق R میں بھی دستیاب ہے!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html)
### تعارف
اب تک آپ نے ریگریشن کیا ہے یہ جانچا ہے مثال کے طور پر کدو کی قیمت کے ڈیٹا سیٹ سے حاصل کردہ نمونہ ڈیٹا کے ساتھ جسے ہم اس سبق میں استعمال کریں گے۔ آپ نے اسے Matplotlib کے ذریعے تصویری شکل میں بھی دیکھا ہے۔
اب تک آپ نے یہ دریافت کیا ہے کہ ریگریشن کیا ہے، ساتھ ہی ہم نے کدو کی قیمتوں کے ڈیٹا سے نمونہ لیا ہوا ڈیٹا استعمال کیا ہے جسے ہم پورے سبق میں استعمال کریں گے۔ آپ نے اسے میٹ پلوٹ لائبراڑی کا استعمال کرتے ہوئے ویژولائز بھی کیا ہے۔
اب آپ مشین لرننگ کے لیے ریگریشن میں مزید گہرائی میں جانے کے لیے تیار ہیں۔ جب کہ بصری نمائندگی آپ کو ڈیٹا سمجھنے میں مدد دیتی ہے، مشین لرننگ کی اصل طاقت _ماڈلز کی تربیت_ میں ہے۔ ماڈلز ماضی کے ڈیٹا پر تربیت دیتے ہیں تاکہ خود بخود ڈیٹا کی انحصاریت کو سمجھ سکیں، اور یہ آپ کو نئے ڈیٹا کے لیے پیش گوئی کرنے کی اجازت دیتے ہیں جو ماڈل نے پہلے نہیں دیکھا۔
اب آپ مشین لرننگ کے لیے ریگریشن میں گہرائی میں جانے کے لیے تیار ہیں۔ جب کہ ویژولائزیشن آپ کو ڈیٹا کو سمجھنے کے قابل بناتی ہے، مشین لرننگ کی اصل طاقت _ماڈلز کی تربیت_ میں ہے۔ ماڈلز تاریخی ڈیٹا پر تربیت دیے جاتے ہیں تاکہ خودکار طریقے سے ڈیٹا کی انحصاریوں کو پکڑ سکیں، اور یہ آپ کو نئے ڈیٹا کے لیے نتائج پیش گوئی کرنے کی اجازت دیتے ہیں، جو ماڈل نے پہلے کبھی نہیں دیکھا۔
اس سبق میں، آپ دو قسم کی ریگریشنز کے بارے میں مزید جانیں گے: _بنیادی لکیری ریگریشن_ اور _کثیر رکنی ریگریشن_، اور ان تکنیکوں کے پیچھے کچھ ریاضی بھی سیکھیں گے۔ یہ ماڈلز ہمیں مختلف انپٹ ڈیٹا کے مطابق کدو کی قیمت کی پیش گوئی کرنے کی اجازت دیں گے۔
اس سبق میں، آپ ریگریشن کی دو اقسام کے بارے میں مزید جانیں گے: _بنیادی لینیئر ریگریشن_ اور _پولینومیئل ریگریشن_، ساتھ ہی ان تکنیکوں کے پیچھے موجود کچھ ریاضی بھی۔ یہ ماڈلز ہمیں مختلف ان پٹ ڈیٹا کے مطابق کدو کی قیمتوں کی پیشنگوئی کرنے کی اجازت دیں گے۔
[](https://youtu.be/CRxFT8oTDMg "مشین لرننگ مبتدیوں کے لیے - لکیری ریگریشن کو سمجھنا")
[](https://youtu.be/CRxFT8oTDMg "مشق کے لیے مشین لرننگ - لینیئر ریگریشن کو سمجھنا")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ لکیری ریگریشن کا مختصر ویڈیو جائزہ دیکھ سکیں۔
> 🎥 اوپر تصویر پر کلک کریں لینیئر ریگریشن کے بارے میں ایک مختصر ویڈیو جائزہ کے لیے۔
> اس نصاب کے دوران، ہم فرض کرتے ہیں کہ ریاضی کی معلومات بہت کم ہیں، اور کوشش کرتے ہیں کہ اسے ان طلباء کے لیے قابل فہم بنایا جائے جو دوسرے شعبوں سے آ رہے ہیں، لہٰذا نوٹسز، 🧮 کال آؤٹس، خاکے، اور دیگر تعلیمی اوزار پر دھیان دیں جو سمجھنے میں مدد دیں۔
> اس نصاب کے دوران، ہم ریاضی کے بارے میں کم از کم معلومات فرض کرتے ہیں، اور اسے دوسرے شعبوں سے آنے والے طلباء کے لیے قابل رسائی بنانے کی کوشش کرتے ہیں، اس لیے نوٹس، 🧮 کالمز، خاکے، اور دیگر تعلیمی اوزار دیکھتے رہیں تاکہ سمجھ بوجھ میں مدد ملے۔
### پیشگی شرائط
### پیشگی شرط
آپ کو اب تک کدو کے ڈیٹا کے ڈھانچے سے واقف ہونا چاہیے جسے ہم جانچ رہے ہیں۔ آپ اسے اس سبق کی _notebook.ipynb_ فائل میں پری لوڈڈ اور پری کلین کیا ہوا پا سکتے ہیں۔ فائل میں، کدو کی قیمت فی بوشل نئے ڈیٹافریم میں دکھائی گئی ہے۔ اس بات کو یقینی بنائیں کہ آپ یہ نوٹ بکس Visual Studio Code کے کرنلز میں چلا سکیں۔
اب تک آپ کو کدو کے ڈیٹا کی ساخت سے واقف ہونا چاہیے جس کا ہم جائزہ لے رہے ہیں۔ آپ اسے اس سبق کے _notebook.ipynb_ فائل میں پہلے سے لوڈ اور صاف شدہ حالت میں پا سکتے ہیں۔ اس فائل میں، کدو کی قیمت فی بشل نئے ڈیٹا فریم میں دکھائی گئی ہے۔ یقینی بنائیں کہ آپ یہ نوٹ بکس ویژول اسٹوڈیو کوڈ کے کرنلز میں چلا سکتے ہیں۔
### تیاری
یاد دہانی کے طور پر، آپ یہ ڈیٹا لوڈ کر رہے ہیں تاکہ اس سے سوالات پوچھ سکیں۔
یاد دہانی کے طور پر، آپ یہ ڈیٹا لوڈ کر رہے ہیں تاکہ اس سے سوالات پوچھ سکیں۔
- کب کدو خریدنا سب سے بہتر وقت ہے؟
- ایک کیس کے منیچر کدو کی قیمت کیا ہوسکتی ہے؟
- کیا مجھے انہیں آدھے بوشل ٹوکریوں میں خریدنا چاہیے یا 1 1/9 بوشل باکس کے حساب سے؟
آئیے اس ڈیٹا میں مزید کھنگالیں۔
- کدو خریدنے کا بہترین وقت کب ہے؟
- منی ایچر کدو کے ایک کیس کی قیمت کیا ہو سکتی ہے؟
- کیا مجھے انہیں آدھے بشل ٹوکریوں میں خریدنا چاہیے یا 1 1/9 بشل کے ڈبے میں؟
آئیے اس ڈیٹا میں مزید کھود کرتے ہیں۔
پچھلے سبق میں، آپ نے پانڈا ڈیٹافریم تخلیق کیا اور اصل ڈیٹا سیٹ کے ایک حصے کے ساتھ اسے بھر دیا، قیمتوں کو بوشل کے لحاظ سے یکساں بنایا۔ اس طرح کرنے سے آپ تقریباً 400 ڈیٹا پوائنٹس جمع کر سکے لیکن صرف خزاں کے مہینوں کے لیے۔
پچھلے سبق میں، آپ نے پانڈاز کا ڈیٹا فریم بنایا اور اسے اصل ڈیٹا سیٹ کے ایک حصے سے بھرا، قیمتوں کو بشل کے اعتبار سے معیاری بنایا۔ تاہم ایسا کرنے سے آپ تقریباً 400 ڈیٹا پوائنٹس تک محدود رہے اور صرف خزاں کے مہینوں کے لیے۔
اس سبق کی ساتھ پیش آنے والی نوٹ بک میں ہم نے جو ڈیٹا پری لوڈ کیا ہے اسے دیکھیں۔ ڈیٹا پری لوڈ ہے اور مہینے کے ڈیٹا کو دکھانے کے لیے ابتدائی اسکیٹر پلاٹ بھی بنایا گیا ہے۔ شاید ہم ڈیٹا کی نوعیت کے بارے میں زیادہ تفصیل حاصل کر سکیں اگر ہم اسے مزید صاف کریں۔
اس سبق کے ساتھ دی گئی نوٹ بک میں پہلے سے لوڈ کیے گئے ڈیٹا کو دیکھیں۔ ڈیٹا پہلے سے لوڈ کیا گیا ہے اور مہینہ کے ڈیٹا کو دکھانے کے لیے ایک ابتدائی سکریٹر پلاٹ بنایا گیا ہے۔ شاید ہم ڈیٹا کی نوعیت کے بارے میں مزید تفصیل حاصل کر سکیں اگر ہم اسے مزید صاف کریں۔
## لکیری ریگریشن لائن
## لینیئر ریگریشن لائن
جیسا کہ آپ نے سبق 1 میں سیکھا، لکیری ریگریشن کا مقصد یہ ہے کہ ایک لائن کھینچی جائے تاکہ:
جیسا کہ آپ نے سبق 1 میں سیکھا، لینیئر ریگریشن مشق کا مقصد یہ ہے کہ ایک لائن پلاٹ کریں تاکہ:
- **متغیرات کے تعلقات دکھائے جائیں**۔ متغیرات کے درمیان تعلق دکھائیں
- **پیش گوئیاں کی جائیں**۔ نئی ڈیٹا پوائنٹ کہاں آ سکتی ہے اس کی ٹھیک پیش گوئی کریں۔
- **متغیرات کے تعلقات دکھائیں۔** متغیرات کے تعلقات کو ظاہر کریں۔
- **پیشگوئیاں کریں۔** اس بات کی درست پیش گوئی کریں کہ کوئی نیا ڈیٹا پوائنٹ اس لائن کے حوالے سے کہاں آئے گا۔
یہ عام طور پر **Least-Squares Regression** کا نامی عمل ہوتا ہے کہ اس قسم کی لائن کشید کی جائے۔ “Least-Squares” اصطلاح ماڈل کی کل غلطی کو کم سے کم کرنے کے عمل کی طرف اشارہ کرتی ہے۔ ہر ڈیٹا پوائنٹ کے لیے، ہم اصل نقطہ اور ریگریشن لائن کے درمیان عمودی فاصلہ ناپتے ہیں (جسے ریزیڈیول کہتے ہیں)۔
**لِیسٹ اسکوائرز ریگریشن** کے لیے عام طور پر اس قسم کی لائن کھینچی جاتی ہے۔ "لِیسٹ اسکوائرز" اصطلاح ماڈل میں کل غلطی کو کم کرنے کے عمل کی طرف اشارہ کرتی ہے۔ ہر ڈیٹا پوائنٹ کے لیے، ہم اصل نقطہ اور ہمارے ریگریشن لائن کے درمیان عمودی فاصلے (جسے بقایا کہتے ہیں) کو ناپتے ہیں۔
ہم ان فاصلات کو دو وجوہات کی بنا پر مربع کرتے ہیں:
ہم ان فاصلات کو دو بنیادی وجوہات کی بناء پر مربع کرتے ہیں:
1. **مقدار کی اہمیت سمت سے زیادہ:** ہم چاہتے ہیں کہ -5 کی غلطی کو +5 کی غلطی کی طرح سمجھا جائے۔ مربع کرنے سے تمام قدر مثبت ہوجاتی ہیں۔
1. **مقدار فوقِ سمت:** ہم چاہتے ہیں کہ -5 کی غلطی کو +5 کی غلطی کی طرح سمجھا جائے۔ مربع کرنے سے تمام اقدار مثبت ہوجاتی ہیں۔
2. **آؤٹ لائرز کو سزا دینا:** مربع کرنے سے بڑی غلطیوں کو زیادہ وزن ملتا ہے، جو لائن کو ان نقاط کے قریب رکھنے پر مجبور کرتا ہے جو دور ہوتے ہیں۔
2. **آؤٹ لائرز کو سزا دینا:** مربع کرنے سے بڑی غلطیوں کو زیادہ وزن ملتا ہے، لائن کو دور کے نقطہ جات کے قریب رکھنے پر مجبور کرتا ہے۔
ہم پھر ان تمام مربعوں کو جمع کرتے ہیں۔ ہمارا ہدف وہ مخصوص لائن تلاش کرنا ہے جہاں یہ مجموعہ کم سے کم ہو (سب سے چھوٹی ممکنہ قیمت)—یعنی "Least-Squares" کا مطلب۔
پھر ہم ان تمام مربع اقدار کو جمع کرتے ہیں۔ ہمارا مقصد خاص لائن تلاش کرنا ہے جہاں یہ مجموعہ اپنی کم سے کم قیمت پر ہو (سب سے چھوٹی ممکنہ قیمت) — اسی لیے اسے "لِیسٹ اسکوائرز" کہتے ہیں۔
> **🧮 مجھے ریاضی دکھائیں**
>
> اس لائن کو، جسے _بہترین فٹ لائن_ کہا جاتا ہے، [ایک مساوات](https://en.wikipedia.org/wiki/Simple_linear_regression) کے ذریعے ظاہر کیا جا سکتا ہے:
>
> **🧮 مجھے ریاضی دکھائیں**
>
> یہ لائن، جسے _بہترین فٹ لائن_ کہتے ہیں، [ایک مساوات](https://en.wikipedia.org/wiki/Simple_linear_regression) سے ظاہر کی جا سکتی ہے:
>
> ```
> Y = a + bX
> ```
>
> `X`وضاحتی متغیر ہے۔ `Y` منحصر متغیر ہے۔ لائن کی ڈھلوان `b` ہے اور `a` y-قاطع ہے، جو اس قدر کی وضاحت کرتا ہے جب `X = 0` ہو۔
> `X`'وضاحتی متغیر' ہے۔ `Y` 'تابع متغیر' ہے۔ لائن کی ڈھلوان `b` ہے اور `a` y-انٹرسیپٹ ہے، جو اس وقت `Y` کی قیمت ظاہر کرتا ہے جب `X = 0` ہو۔
>
>
>
> سب سے پہلے، ڈھلوان `b` کا حساب لگائیں۔ انفوگرافک توسط [Jen Looper](https://twitter.com/jenlooper)
> سب سے پہلے، ڈھلوان `b` کو حساب کریں۔ انفورگرافک بذریعہ [جین لوپر](https://twitter.com/jenlooper)
>
> دوسرے الفاظ میں، اور ہمارے کدو کے ڈیٹا کے آغاز کے سوال کی طرف اشارہ کرتے ہوئے: "ہر ماہ فی بوشل کدو کی قیمت کی پیش گوئی کریں"، `X` قیمت کی طرف اشارہ کرے گا اور `Y` فروخت کے مہینے کی طرف۔
> دوسرے الفاظ میں، اور ہمارے کدو کے ڈیٹا کے اصل سوال کی طرف اشارہ کرتے ہوئے: "مہینے کے حساب سے فی بشل کدو کی قیمت کی پیشنگوئی کریں"، `X` قیمت کی نمائندگی کرے گا اور `Y` فروخت کے مہینے کی نمائندگی کرے گا۔
> Y کی قدر کا حساب لگائیں۔ اگر آپ تقریباً $4 ادا کر رہے ہیں، تو ضرور اپریل ہوگا! انفوگرافک توسط [Jen Looper](https://twitter.com/jenlooper)
> Y کی قیمت کا حساب لگائیں۔ اگر آپ تقریباً $4 ادا کر رہے ہیں، تو یہ یقیناً اپریل ہونا چاہیے! انفورگرافک بذریعہ [جین لوپر](https://twitter.com/jenlooper)
>
> وہ ریاضی جو لائن کا حساب لگاتی ہے، لائن کی ڈھلوان کو ظاہر کرتی ہے، جو اس قطعۂ حاصل ضرب پر بھی منحصر ہے، یا جہاں `Y` واقع ہوتا ہے جب `X = 0`۔
> لائن کا حساب لگانے کے لیے ریاضیات کو ڈھلوان دکھانا چاہیے، جو انٹرسپٹ پر بھی منحصر ہے، یعنی جہاں `Y` اس وقت ہوتا ہے جب `X = 0`۔
>
> آپ اس حساب کا طریقہ کار [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) ویب سائٹ پر بھی دیکھ سکتے ہیں۔ اس کے علاوہ، [یہ Least-squares کیلکولیٹر](https://www.mathsisfun.com/data/least-squares-calculator.html) ملاحظہ کریں تاکہ دیکھیں کہ اعداد کی قدر لائن کو کیسے متاثر کرتی ہے۔
> آپ ان اقدار کے حساب کے طریقہ کار کو [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) ویب سائٹ پر دیکھ سکتے ہیں۔ مزید برآں، [یہ لِیسٹ-اسکوائرز کیلکولیٹر](https://www.mathsisfun.com/data/least-squares-calculator.html) وزٹ کریں تاکہ دیکھیے کہ اعداد کی قیمتیں لائن کو کیسے متاثر کرتی ہیں۔
## ربط
## تعلق
ایک اور اصطلاح جو سمجھنی ضروری ہے وہ ہے **ربط کا گتانک** جو دیے گئے X اور Y متغیرات کے درمیان ہوتا ہے۔ اس کو اسکیٹر پلاٹ کے ذریعے جلدی سمجھا جا سکتا ہے۔ اگر نقاط قطار میں سیدھے ہوتے ہیں تو ربط زیادہ ہوگا، اور اگر نقاط ہر جگہ منتشر ہوں تو ربط کم ہوگا۔
ایک اور اصطلاح جسے سمجھنا ضروری ہے وہ ہے دیے گئے X اور Y متغیرات کے درمیان **تعلق کا کوفی شینٹ**۔ سکریٹر پلاٹ کے ذریعے آپ اس کوفی شینٹ کو جلدی سے دیکھ سکتے ہیں۔ ایک ایسا پلاٹ جس میں ڈیٹا پوائنٹس ایک صاف لائن میں بکھرے ہوتے ہیں تعلق زیادہ ہوتا ہے، لیکن ایک ایسا پلاٹ جس میں ڈیٹا پوائنٹس X اور Y کے درمیان ہر جگہ بکھرے ہوں تعلق کم ہوتا ہے۔
ایک اچھا لکیری ریگریشن ماڈل وہی ہوگا جس کا ربط درصد (0 کے مقابلے میں 1 کے نزدیک) زیادہ ہو، اور جسے Least-Squares Regression طریقہ استعمال کرتے ہوئے ریگریشن لائن کے ساتھ بنایا گیا ہو۔
ایک اچھا لینیئر ریگریشن ماڈل وہ ہوگا جس کا تعلق کا کوفی شینٹ (0 کے مقابلے میں 1 کے قریب تر) زیادہ ہو، اور وہ لِیسٹ اسکوائرز ریگریشن کے تحت ریگریشن لائن کے ساتھ ہو۔
✅ اس سبق کے ساتھ آنے والی نوٹ بک چلائیں اور Month to Price اسکیٹر پلاٹ دیکھیں۔ کیا آپ کے خیال میں مہینے اور کدو کی قیمت کے درمیان ربط زیادہ ہے یا کم، آپ کی بصری تعبیر کے مطابق؟ کیا یہ بدلتا ہے اگر آپ `Month` کی بجائے زیادہ باریک پیمائش استعمال کریں، مثلاً *سال کا دن* (یعنی سال کے آغاز سے دنوں کی تعداد)؟
✅ اس سبق کے ساتھ دی گئی نوٹ بک چلائیں اور ماہ سے قیمت کے سکریٹر پلاٹ کو دیکھیں۔ آپ کی نظر میں ماہ سے قیمت کے تعلق کی کتنی شدت ہے، یہ آپ کی بصری تشریح کے مطابق کیا تعلق زیادہ ہے یا کم؟ کیا یہ بدلتا ہے اگر آپ زیادہ باریک پیمانے مثلاً _سال کا دن_ (یعنی سال کے آغاز سے گزرے دنوں کی تعداد) استعمال کریں؟
نیچے دیے گئے کوڈ میں، ہم فرض کریں گے کہ ہم نے ڈیٹا کو صاف کر لیا ہے، اور ایک ڈیٹافریم حاصل کیا ہے جسے `new_pumpkins` کہا گیا ہے، جیسا کہ درج ذیل:
ذیل میں کوڈ میں فرض کرتے ہیں کہ ہم نے ڈیٹا صاف کر لیا ہے، اور ایک ڈیٹا فریم `new_pumpkins` حاصل کیا ہے، جو درج ذیل کی مماثل ہے:
ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price
> ڈیٹا صاف کرنے کا کوڈ [`notebook.ipynb`](notebook.ipynb) میں دستیاب ہے۔ ہم نے پچھلے سبق کی طرح صفائی کے اقدامات کیے ہیں، اور `DayOfYear` کالم نچے دیے گئے اظہار کے ذریعے حساب کیا ہے:
> ڈیٹا صاف کرنے کا کوڈ [`notebook.ipynb`](notebook.ipynb) میں دستیاب ہے۔ ہم نے پچھلے سبق کی طرح یہی صفائی کے اقدامات کیے ہیں، اور `DayOfYear` کالم کو درج ذیل اظہار سے حساب کیا ہے:
اب جب کہ آپ کو لکیری ریگریشن کے پیچھے کے ریاضی کا فہم حاصل ہے، آئیے ایک ریگریشن ماڈل بنائیں تاکہ دیکھ سکیں کہ آیا ہم پیش گوئی کر سکتے ہیں کہ کدو کے کون سے پیکج کی قیمت سب سے اچھی ہوگی۔ کوئی جو تعطیلات کے لیے کدو خرید رہا ہو، وہ اس معلومات کو حاصل کرنا چاہے گا تاکہ اپنے آرڈر کو بہتر بنا سکے۔
اب جبکہ آپ کو لینیئر ریگریشن کے پیچھے ریاضی کی سمجھ ہے، آئیں ایک ریگریشن ماڈل بنائیں تاکہ دیکھ سکیں کہ ہم پیش گوئی کر سکتے ہیں کہ کس کدو کے پیکیج کی قیمت سب سے بہتر ہوگی۔ کوئی جو تعطیلات کے کدو کی پیٹیچ کے لیے کدو خرید رہا ہو، اسے یہ معلومات اپنی خریداری کو بہتر بنانے کے لیے فائدہ دے سکتی ہے۔
## ربط کی تلاش
## تعلق کی تلاش
[](https://youtu.be/uoRq-lW2eQo "مشین لرننگ مبتدیوں کے لیے - ربط کی تلاش: لکیری ریگریشن کی کنجی")
[](https://youtu.be/uoRq-lW2eQo "مشق کے لیے مشین لرننگ - تعلق کی تلاش: لینیئر ریگریشن کی کنجی")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ ربط کا مختصر ویڈیو جائزہ دیکھ سکیں۔
> 🎥 اوپر تصویر پر کلک کریں تعلق کے بارے میں مختصر ویڈیو جائزہ کے لیے۔
پچھلے سبق میں آپ نے شاید دیکھا ہو کہ مختلف مہینوں کی اوسط قیمت کچھ یوں دکھائی دیتی ہے:
پچھلے سبق میں آپ نے شاید دیکھا ہوگا کہ مختلف مہینوں کے لیے اوسط قیمت اس طرح نظر آتی ہے:
<imgalt="مہینوں کے مطابق اوسط قیمت" src="../../../../translated_images/ur/barchart.a833ea9194346d76.webp"width="50%"/>
<imgalt="مہینے کے اعتبار سے اوسط قیمت" src="../../../../translated_images/ur/barchart.a833ea9194346d76.webp"width="50%"/>
یہ ظاہر کرتا ہے کہ یہاں ربط موجود ہونا چاہیے، اور ہم کوشش کر سکتے ہیں کہ لکیری ریگریشن ماڈل تیار کریں تاکہ `Month` اور `Price` کے درمیان یا `DayOfYear` اور `Price` کے درمیان تعلق کی پیش گوئی کریں۔ یہ اسکیٹر پلاٹ دکھاتا ہے جو بعد والے تعلق کو ظاہر کرتا ہے:
یہ اشارہ دیتا ہے کہ کوئی تعلق ہونا چاہیے، اور ہم لینیئر ریگریشن ماڈل کی تربیت کر کے `Month` اور `Price` یا `DayOfYear` اور `Price` کے درمیان تعلق پیش گوئی کر سکتے ہیں۔ ذیل میں وہ سکریٹر پلاٹ ہے جو بعد والے تعلق کو ظاہر کرتا ہے:
<imgalt="قیمت بمقابلہ دنِ سال کا اسکیٹر پلاٹ" src="../../../../translated_images/ur/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
<imgalt="قیمت بمقابلہ سال کا دن کاسکریٹر پلاٹ" src="../../../../translated_images/ur/scatter-dayofyear.bc171c189c9fd553.webp"width="50%"/>
آئیے `corr` فنکشن استعمال کرکے دیکھتے ہیں کہ ربط کیا ہے:
آئیے `corr` فنکشن کا استعمال کرکے دیکھتے ہیں کیا تعلق ہے:
ایسا لگتا ہے کہ ربط تھوڑا کم ہے، مہینے کے لیے -0.15 اور دنِ مہینے کے لیے -0.17، لیکن ایک اور اہم تعلق ممکن ہے۔ ایسا لگتا ہے کہ قیمتوں کے مختلف کلسٹرز مختلف کدو کی اقسام سے متعلق ہیں۔ اس مفروضے کی تصدیق کے لیے، آئیے ہر کدو کی قسم کو مختلف رنگ میں پلاٹ کریں۔ `scatter` فنکشن کو `ax` پیرامیٹر دینے سے ہم تمام نقاط ایک ہی گراف پر دکھا سکتے ہیں:
دیکھتے ہیں تعلق نسبتا چھوٹا ہے، -0.15 `Month` کے لحاظ سے اور -0.17 `DayOfYear` کے لحاظ سے، لیکن ایک اور اہم تعلق ہو سکتا ہے۔ ایسا لگتا ہے کہ قیمتوں کے مختلف گروہ مختلف کدو کی اقسام سے متعلق ہیں۔ اس مفروضے کی تصدیق کے لیے، آئیے ہر کدو کی قسم کو مختلف رنگ سے پلاٹ کریں۔ `scatter` فنکشن کو ایک `ax` پیرا میٹر دے کر ہم تمام پوائنٹس کو ایک ہی گراف پر پلاٹ کر سکتے ہیں:
```python
ax=None
@ -140,9 +140,9 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()):
<imgalt="قیمت بمقابلہ دنِ سال کا رنگین اسکیٹر پلاٹ" src="../../../../translated_images/ur/scatter-dayofyear-color.65790faefbb9d54f.webp"width="50%"/>
<imgalt="قیمت بمقابلہ سال کے دن کا سکریٹر پلاٹ (رنگ کے ساتھ)" src="../../../../translated_images/ur/scatter-dayofyear-color.65790faefbb9d54f.webp"width="50%"/>
ہماری تفتیش بتاتی ہے کہ مختلف اقسام کا مجموعی قیمت پر زیادہ اثر ہے بجائے اصلی فروخت کی تاریخ کے۔ ہم اس کو بار گراف سے دیکھ سکتے ہیں:
ہماری تحقیق سے ظاہر ہوتا ہے کہ مجموعی قیمت پر چیز کی قسم کا زیادہ اثر ہوتا ہے بنسبت اصل فروخت کی تاریخ کے۔ ہم اسے بار گراف کے ذریعے بھی دیکھ سکتے ہیں:
<imgalt="قیمت بمقابلہ دنِ سال کا اسکیٹر پلاٹ" src="../../../../translated_images/ur/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
<imgalt="قیمت بمقابلہ سال کے دن کا سکریٹر پلاٹ" src="../../../../translated_images/ur/pie-pumpkins-scatter.d14f9804a53f927e.webp"width="50%"/>
اگر ہم اب `corr` فنکشن استعمال کرکے `Price` اور `DayOfYear` کے درمیان ربط کا حساب لگائیں تو ہمیں تقریباً `-0.27` ملے گا—جوبتاتا ہے کہ پیش گوئی کرنے والا ماڈل تربیت دینا معقول ہے۔
اگر ہم اب `Price` اور `DayOfYear` کے درمیان تعلق `corr` فنکشن کے ذریعے نکالیں، تو ہمیں کچھ ایسا ملے گا: `-0.27` — جس کا مطلب ہے کہ پیش گو ماڈل کی تربیت مفید ہے۔
> لکیری ریگریشن ماڈل تربیت دینے سے پہلے، یہ ضروری ہے کہ ہمارا ڈیٹا صاف ہو۔ لکیری ریگریشن خالی اقدار کے ساتھ بہتر کام نہیں کرتی، لہٰذا تمام خالی جگہوں کو دور کرنا منطقی ہے:
> لینیئر ریگریشن ماڈل کو تربیت دینے سے پہلے، یہ ضروری ہے کہ ہمارا ڈیٹا صاف ہو۔ لینیئر ریگریشن گمشدہ اقدار کے ساتھ اچھا کام نہیں کرتا، اس لیے تمام خالی سیلز کو ہٹانا مناسب ہے:
```python
pie_pumpkins.dropna(inplace=True)
pie_pumpkins.info()
```
ایک اور طریقہ یہ ہوگا کہ ان خالی اقدار کو متعلقہ کالم کی اوسط قیمت سے بھر دیا جائے۔
دوسری حکمت عملی یہ ہو سکتی ہے کہ ان خالی اقدار کو متعلقہ کالم کے اوسط سے بھر دیا جائے۔
## سادہ لکیری ریگریشن
## سادہ لینیئر ریگریشن
[](https://youtu.be/e4c_UP2fSjg "مشین لرننگ مبتدیوں کے لیے - Scikit-learn استعمال کرتے ہوئے لکیری اور کثیر رکنی ریگریشن")
[](https://youtu.be/e4c_UP2fSjg "مشق کے لیے مشین لرننگ - سکائیکیٹ لرن کا استعمال کرتے ہوئے لینیئر اور پولینومیئل ریگریشن")
> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ لکیری اور کثیر رکنی ریگریشن کا مختصر ویڈیو جائزہ دیکھ سکیں۔
> 🎥 اوپر تصویر پر کلک کریں لینیئر اور پولینومیئل ریگریشن کے بارے میں مختصر ویڈیو جائزہ کے لیے۔
ہم اپنے لکیری ریگریشن ماڈل کو تربیت دینے کے لیے **Scikit-learn** لائبریری استعمال کریں گے۔
اپنے لینیئر ریگریشن ماڈل کی تربیت کے لیے، ہم **سکائیکیٹ لرن** لائبریری استعمال کریں گے۔
```python
from sklearn.linear_model import LinearRegression
@ -183,31 +183,31 @@ from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
```
ہم انپٹ ویلیوز (خصوصیات) اور متوقع آؤٹ پٹ (لیبل) کو الگ الگ numpy ارریوں میں تقسیم کرنا شروع کرتے ہیں:
ہم انپٹ ویلیوز (خصوصیات) اور متوقع آؤٹ پٹ (لیبل) کو الگ الگ numpy ارے میں تقسیم کرتے ہیں:
```python
X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1)
y = pie_pumpkins['Price']
```
> نوٹ کریں کہ ہمیں اپنے انپٹ ڈیٹا پر `reshape` کرنا پڑا تاکہ لکیری ریگریشن پیکیج اسے صحیح طور پر سمجھ سکے۔ لکیری ریگریشن 2D ارری کو بطور انپٹ توقع کرتا ہے، جہاں ارری کی ہر صف انپٹ خصوصیات کے ویکٹر کے برابر ہو۔ ہمارے کیس میں، چونکہ صرف ایک انپٹ ہے، ہمیں N×1 اشکال کی ارری چاہیے جہاں N ڈیٹا سیٹ کی تعداد ہے۔
> نوٹ کریں کہ ہمیں انپٹ ڈیٹا پر `reshape` کرنا پڑا تاکہ لینیئر ریگریشن پیکیج اسے صحیح طریقے سے سمجھے۔ لینیئر ریگریشن 2D-ارے کی توقع کرتی ہے جس میں ہر قطار انپٹ فیچرز کے ویکٹر کے مساوی ہو۔ چونکہ ہمارے پاس صرف ایک انپٹ ہے، ہمیں N×1 شیپ والا ارے چاہیے، جہاں N ڈیٹا سیٹ کا سائز ہو۔
پھر، ہمیں ڈیٹا کو تربیتی اور جانچ ڈیٹا سیٹ میں تقسیم کرنا چاہیے، تاکہ تربیت کے بعد ہم اپنے ماڈل کی توثیق کر سکیں:
پھر، ہمیں ڈیٹا کو ٹرین اور ٹیسٹ ڈیٹا سیٹس میں تقسیم کرنا ہوگا تاکہ ہم تربیت کے بعد اپنے ماڈل کی تصدیق کر سکیں:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
```
آخر میں، اصل لکیری ریگریشن ماڈل کی تربیت صرف دو لائنوں کوڈ میں ہوتی ہے۔ ہم `LinearRegression` آبجیکٹ کو تعریف کرتے ہیں، اور اسے `fit` طریقہ سے اپنے ڈیٹا پر فٹ کرتے ہیں:
آخر میں، اصلی لینیئر ریگریشن ماڈل کی تربیت صرف دو لائنوں کوڈ کی ضرورت ہے۔ ہم `LinearRegression` آبجیکٹ بناتے ہیں، اور `fit` طریقہ کار کے ذریعے اسے اپنے ڈیٹا پر فٹ کرتے ہیں:
```python
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
```
`LinearRegression` آبجیکٹ `fit` کرنے کے بعد ریگریشن کے تمام کو efficient coefficients رکھتا ہے، جن تک `.coef_` پراپرٹی کے ذریعے رسائی حاصل کی جا سکتی ہے۔ ہمارے کیس میں صرف ایک coefficient ہے، جو تقریباً `-0.017` ہونا چاہیے۔ اس کا مطلب ہے کہ قیمتیں وقت کے ساتھ تھوڑی سی کم ہوتی نظر آتی ہیں، لیکن زیادہ نہیں، تقریباً دو سینٹ فی دن۔ ہم ریگریشن کے Y-محور سے انٹرسیکشن پوائنٹ بھی `lin_reg.intercept_` کے ذریعے حاصل کر سکتے ہیں - جو ہمارے کیس میں تقریباً `21` ہوگا، جو سال کے شروع کے وقت کی قیمت کی نشاندہی کرتا ہے۔
`LinearRegression` آبجیکٹ جو کہ `fit` کرنے کے بعد ہوتا ہے، اس میں تمام رگریشن کے کوفیشینٹس شامل ہوتے ہیں، جن تک `.coef_` پراپرٹی کے ذریعے رسائی حاصل کی جا سکتی ہے۔ ہمارے کیس میں، صرف ایک کوفیشینٹ ہے، جو تقریباً `-0.017` ہونا چاہیے۔ اس کا مطلب ہے کہ قیمتیں وقت کے ساتھ تھوڑا سا کم ہوتی نظر آتی ہیں، لیکن زیادہ نہیں، روزانہ تقریباً 2 سینٹ کی کمی۔ ہم رگریشن کے تخصیص نقطہ کو Y- محور کے ساتھ `lin_reg.intercept_` کے ذریعے بھی حاصل کر سکتے ہیں — یہ ہمارے کیس میں تقریباً `21` ہوگا، جو سال کے شروع میں قیمت کی نشاندہی کرتا ہے۔
یہ جاننے کے لیے کہ ہمارا ماڈل کتنا درست ہے، ہم ٹیسٹ ڈیٹاسیٹ پر قیمتوں کا اندازہ لگا سکتے ہیں، اور پھر دیکھ سکتے ہیں کہ ہماری پیشن گوئی متوقع قدروں سے کتنی قریب ہے۔ یہ rms (root mean square error) میٹرکس کے ذریعے کیا جا سکتا ہے، جو کہ تمام متوقع اور پیشن گوئی شدہ قدروں کے درمیان تمام مربع فرقوں کے وسط کی جذر ہے۔
یہ دیکھنے کے لیے کہ ہمارا ماڈل کتنا درست ہے، ہم ٹیسٹ ڈیٹا سیٹ پر قیمتوں کی پیش گوئی کر سکتے ہیں، اور پھر دیکھ سکتے ہیں کہ ہماری پیش گوئیاں متوقع اقدار کے کتنی قریب ہیں۔ یہ کام روٹ مین اسکوائر ایرر (RMSE) میٹرک کے ذریعے کیا جا سکتا ہے، جو متوقع اور پیش گو کردہ قدر کے درمیان تمام مربع فرقوں کا اوسط لے کر اس کی جذر ہے۔
```python
pred = lin_reg.predict(X_test)
@ -215,38 +215,38 @@ pred = lin_reg.predict(X_test)
ہمارا error تقریباً 2 پوائنٹس کے آس پاس ہے، جو کہ ~17% ہے۔ زیادہ اچھا نہیں۔ ماڈل کے معیار کی ایک اور نشانی **coefficient of determination** ہے، جو اس طرح حاصل کی جا سکتی ہے:
ہمارا ایرر تقریباً 2 پوائنٹس کے قریب ہے، جو کہ تقریباً 17% ہے۔ یہ زیادہ اچھا نہیں۔ ماڈل کے معیار کا ایک اور اشارہ **coefficient of determination** ہوتا ہے، جو اس طرح حاصل کیا جا سکتا ہے:
```python
score = lin_reg.score(X_train,y_train)
print('Model determination: ', score)
```
اگر قیمت 0 ہو، تو اس کا مطلب ہے کہ ماڈل ان پٹ ڈیٹا کو مدنظر نہیں رکھتا، اور *بدترین خطی پیشگو* کے طور پر کام کرتا ہے، جو صرف نتیجہ کا اوسط ویلیو ہوتا ہے۔ قیمت 1 کا مطلب ہے کہ ہم تمام متوقع نتائج کو مکمل طور پر پیش گوئی کر سکتے ہیں۔ ہمارے کیس میں، coefficient تقریباً 0.06 ہے، جو کہ کافی کم ہے۔
ہم ٹیسٹ ڈیٹا کو ریگریشن لائن کے ساتھ بھی پلاٹ کر سکتے ہیں تاکہ دیکھ سکیں کہ ہمارے کیس میں ریگریشن کس طرح کام کرتی ہے:
اگر اس کی قیمت 0 ہو، تو اس کا مطلب ہے کہ ماڈل ان پٹ ڈیٹا کو مدنظر نہیں رکھتا، اور *worst linear predictor* کے طور پر کام کرتا ہے، جو بس نتیجہ کا اوسط ہوتا ہے۔ قیمت 1 ہونے کا مطلب ہے کہ ہم تمام متوقع آؤٹ پٹ کو بالکل صحیح پیش گوئی کر سکتے ہیں۔ ہمارے کیس میں، کوفیشینٹ تقریباً 0.06 ہے، جو کہ بہت کم ہے۔
ہم ٹیسٹ ڈیٹا کو رگریشن لائن کے ساتھ پلاٹ بھی کر سکتے ہیں تاکہ بہتر طور پر دیکھ سکیں کہ ہمارے کیس میں رگریشن کس طرح کام کرتی ہے:
ریگریشن کی ایک اور قسم پولینومیل ریگریشن ہے۔ جب کبھی متغیرات کے درمیان خطی تعلق ہوتا ہے — جیسے جتنا زیادہ کدو حجم میں ہو، قیمت بھی زیادہ ہو — بعض اوقات یہ تعلقات سیدھی لائن یا سطح کی حیثیت سے ظاہر نہیں کیے جا سکتے۔
لکیری رگریشن کی ایک قسم پولینومیئل رگریشن ہے۔ جہاں کبھی کبھار متغیرات کے درمیان لکیری تعلق ہوتا ہے — جتنا بڑا کدو حجم میں ہو، اتنی زیادہ قیمت — وہاں یہ تعلقات ہمیشہ ایک ہموار سطح یا سیدھی لائن کی صورت میں ہونے لازمی نہیں ہیں۔
✅ یہاں [کچھ مزید مثالیں](https://online.stat.psu.edu/stat501/lesson/9/9.8) ہیں جو پولینومیل ریگریشن استعمال کر سکتی ہیں۔
✅ یہاں [کچھ دیگر مثالیں](https://online.stat.psu.edu/stat501/lesson/9/9.8) دی گئی ہیں جو پولینومیئل رگریشن استعمال کر سکتی ہیں
ایک بار پھر تاریخ اور قیمت کے درمیان تعلق کو دیکھیں۔ کیا یہ سکریٹرپلٹ لازمی سیدھی لائن سے تجزیہ ہونا چاہیے؟ کیا قیمتیں اُتار چڑھاؤ نہیں کر سکتیں؟ اس صورت میں، آپ پولینومیل ریگریشن آزما سکتے ہیں۔
تاریخ اور قیمت کے تعلق پر دوبارہ نظر ڈالیں۔ کیا یہ اسکیٹر پلاٹ لازمی طور پر ایک سیدھی لائن سے تجزیہ ہونا چاہیے؟ کیا قیمتوں میں اتار چڑھاؤ نہیں ہو سکتا؟ اس صورت میں، آپ پولینومیئل رگریشن آزما سکتے ہیں۔
✅ پولینومیلز ریاضی کے بیانات ہوتے ہیں جو ایک یا زیادہ متغیرات اور coefficients پر مشتمل ہو سکتے ہیں۔
✅ پولینومیلز ریاضیاتی اظہار ہوتے ہیں جو ایک یا زیادہ متغیرات اور کوفیشینٹس پر مشتمل ہو سکتے ہیں
پولینومیل ریگریشن ایک خمیدہ لائن بناتی ہے تاکہ غیر خطی ڈیٹا کو بہتر فٹ کیا جا سکے۔ ہمارے کیس میں، اگر ہم ان پٹ ڈیٹا میں `DayOfYear` کا مربع شامل کریں، تو ہمیں ایک پیرا بولک منحنی کا فٹ کرنا چاہیے، جس کا کم از کم نقطہ سال کے درمیان ہوگا۔
پولینومیئل رگریشن نان لکیری ڈیٹا کے بہتر فٹ کے لیے ایک مڑھی ہوئی لائن بناتی ہے۔ ہمارے کیس میں، اگر ہم ان پٹ ڈیٹا میں مربع شدہ `DayOfYear` متغیر کو شامل کریں، تو ہم اپنے ڈیٹا کو ایک پیرا بولا کرف کے ساتھ فٹ کر سکیں گے، جس کی ایک مخصوص پوائنٹ پر سال کے دوران کم از کم قیمت ہوگی۔
Scikit-learn میں ایک مفید [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) شامل ہے جو مختلف ڈیٹا پروسیسنگ کے مراحل کو یکجا کرتا ہے۔ **پائپ لائن** estimators کی ایک چین ہے۔ ہمارے کیس میں، ہم ایک پائپ لائن بنائیں گے جو پہلے پولینومیل فیچرز کو ہمارے ماڈل میں شامل کرے گا، اور پھر ریگریشن کو ٹرین کرے گا:
سکائیکٹ-لرن ایک مفید [پائپ لائن API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) فراہم کرتا ہے تاکہ ڈیٹا پروسیسنگ کے مختلف مراحل کو ایک ساتھ جوڑا جا سکے۔ **پائپ لائن** مختلف **Estimator** کا سلسلہ ہوتی ہے۔ ہمارے کیس میں، ہم ایسی پائپ لائن بنائیں گے جو پہلے پولینومیئل فیچرز ماڈل میں شامل کرے، اور پھر رگریشن کو ٹرین کرے:
```python
from sklearn.preprocessing import PolynomialFeatures
`PolynomialFeatures(2)` کے استعمال کا مطلب ہے کہ ہم ان پٹ ڈیٹا سے تمام دوسرے درجے کے پولینومیل شامل کریں گے۔ ہمارے کیس میں یہ صرف `DayOfYear`² ہوگا، لیکن اگر دو ان پٹ ویریبلز X اور Y ہوں، تو یہ X²، XY اور Y² شامل کرے گا۔ ہم اگر چاہیں تو زیادہ درجے کے پولینومیل بھی استعمال کر سکتے ہیں۔
پائپ لائنز کو اسی طرح استعمال کیا جا سکتا ہے جیسے `LinearRegression` آبجیکٹ، یعنی ہم پائپ لائن کو `fit` کر سکتے ہیں، اور پھر `predict` سے پیش گوئی حاصل کر سکتے ہیں۔ یہاں ایک گراف ہے جو ٹیسٹ ڈیٹا اور اندازہ شدہ منحنی دکھاتا ہے:
`PolynomialFeatures(2)` استعمال کرنے کا مطلب ہے کہ ہم ان پٹ ڈیٹا کے تمام دوم درجے کے پولینومیلز شامل کریں گے۔ ہمارے کیس میں یہ صرف `DayOfYear`<sup>2</sup> ہوگا، لیکن اگر دو ان پٹ متغیرات X اور Y ہوں، تو یہ X<sup>2</sup>، XY اور Y<sup>2</sup> شامل کرے گا۔ ہم اعلیٰ درجے کے پولینومیلز بھی استعمال کر سکتے ہیں اگر چاہیں۔
پائپ لائنز کو اصل `LinearRegression` آبجیکٹ کی طرح استعمال کیا جا سکتا ہے، یعنی ہم پائپ لائن کو `fit` کر سکتے ہیں، اور پھر `predict` سے پیش گوئی کے نتائج حاصل کر سکتے ہیں:
سموتھ اپروکسیمیشن کرف کو پلاٹ کرنے کے لیے، ہم `np.linspace` استعمال کرتے ہیں تاکہ ان پٹ قدروں کی یکساں رینج بنائی جائے، بجائے اس کے کہ بےترتیب ٹیسٹ ڈیٹا پر براہ راست پلاٹنگ کریں (جو جگزگ لائن پیدا کرتا):
پولینومیل ریگریشن سے ہمیں تھوڑا سا کم MSE اور زیادہ determination ملتا ہے، لیکن نمایاں طور پر نہیں۔ ہمیں دیگر فیچرز کو بھی مدنظر لینا ہوگا!
پولینومیئل رگریشن استعمال کرتے ہوئے، ہم کچھ کم RMSE اور زیادہ determination حاصل کر سکتے ہیں، لیکن خاص فرق نہیں۔ ہمیں دیگر فیچرز کو بھی مدنظر رکھنا ہوگا!
> آپ دیکھ سکتے ہیں کہ کم سے کم کدو کی قیمتیں ہالووین کے آس پاس دیکھی جاتی ہیں۔ آپ اس کی وضاحت کیسے کریں گے؟
> آپ دیکھ سکتے ہیں کہ سب سے کم کدو کی قیمتیں تقریباً ہالووین کے قریب دیکھی جاتی ہیں۔ آپ اسے کیسے سمجھائیں گے؟
🎃 مبارک ہو، آپ نے ابھی ایک ماڈل بنایا ہے جو کدو کی قیمت پیش گوئی کرنے میں مدد دے سکتا ہے۔ آپ شاید یہی طریقہ کار تمام کدو کی اقسام کے لیے دہرائیں، لیکن یہ بہت تھکا دینے والا ہوگا۔ اب سیکھتے ہیں کہ اپنے ماڈل میں کدو کی اقسام کو کیسے شامل کریں!
🎃 مبارک ہو، آپ نے ایک ایسا ماڈل بنایا ہے جو پائی کدو کی قیمت پیش کرنے میں مدد کر سکتا ہے۔ شاید آپ یہ عمل تمام کدو کی اقسام کے لیے دہرا سکتے ہیں، لیکن یہ تھوڑا مشکل ہوگا۔ اب سیکھتے ہیں کہ کس طرح اپنے ماڈل میں کدو کی قسم کو مدنظر رکھیں!
## زمرہ بندی شدہ خصوصیات
## زمرہ وار فیچرز
آئیڈیل دنیا میں، ہم ایک ہی ماڈل استعمال کر کے مختلف کدو کی اقسام کی قیمتیں پیش گوئی کرنا چاہتے ہیں۔ تاہم، `Variety` کالم `Month` جیسے کالموں سے مختلف ہے کیونکہ اس میں غیر عددی قدریں ہوتی ہیں۔ ایسے کالمز کو **زمرہ بندی شدہ** (categorical) کہا جاتا ہے۔
ایک مثالی دنیا میں، ہم چاہتے ہیں کہ مختلف کدو کی اقسام کی قیمتیں ایک ہی ماڈل سے پیش کی جا سکیں۔ تاہم، `Variety` کالم کچھ مختلف ہے جیسے کہ `Month` کالم، کیونکہ اس میں عددی نہیں بلکہ غیر عددی اقدار ہوتی ہیں۔ ایسے کالمز کو **categorical** کہا جاتا ہے۔
[](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression")
> 🎥 اوپر موجود تصویر پر کلک کریں زمرہ بندی شدہ فیچرز کے استعمال پر مختصر ویڈیو کے لیے۔
> 🎥 اوپر کی تصویر پر کلک کریں تاکہ categorical فیچرز کے استعمال کا مختصر ویڈیو جائزہ دیکھا جا سکے۔
یہاں ہم دیکھ سکتے ہیں کہ اوسط قیمت قسم پر کس طرح منحصر ہے:
یہاں دکھایا گیا ہے کہ اوسط قیمت قسم کے لحاظ سے کس طرح ہے:
<imgalt="Average price by variety"src="../../../../translated_images/ur/price-by-variety.744a2f9925d9bcb4.webp"width="50%"/>
قسم کو مدنظر رکھنے کے لیے، سب سے پہلے ہمیں اس کو عددی شکل میں تبدیل کرنا پڑے گا، یعنی **انکوڈ** کرنا ہوگا۔ اس کے لیے کئی طریقے ہیں:
قسم کو مدنظر رکھنے کے لیے، سب سے پہلے ہمیں اسے عددی شکل میں تبدیل یا **encode** کرنا ہوگا۔ ہم اس کے کئی طریقے استعمال کر سکتے ہیں:
* سادہ **نو مریکی انکوڈنگ** مختلف اقسام کی ایک ٹیبل بنائے گی، اور پھر قسم کے نام کو اس ٹیبل میں انڈیکس سے تبدیل کر دے گی۔ یہ لائنیر ریگریشن کے لیے بہترین طریقہ نہیں ہے، کیونکہ لائنیر ریگریشن اس انڈیکس کی عددی قیمت لے کر اسے کسی coefficient کے ساتھ ضرب دے کر نتیجہ میں شامل کرتی ہے۔ ہمارے کیس میں، انڈیکس نمبر اور قیمت کے تعلق کا تعلق واضح طور پر غیر خطی ہے، چاہے ہم انڈیکس کو مخصوص ترتیب دیں۔
* **ون-ہوٹ انکوڈنگ** `Variety` کالم کی جگہ چار مختلف کالم بنائے گی، ہر قسم کے لیے ایک۔ ہر کالم میں 1 تب ہوگا جب متعلقہ قطار اس قسم کی ہو، ورنہ 0 ہوگا۔ اس کا مطلب ہے کہ لائنیر ریگریشن میں چار coefficients ہوں گے، ہر کدو کی قسم کے لیے، جو اس خاص قسم کی "ابتدائی قیمت" (یا "اضافی قیمت") کی نمائندگی کریں گے۔
* سادہ **numeric encoding** مختلف قسموں کی ایک ٹیبل بنائے گا، اور پھر قسم کے نام کی جگہ ٹیبل میں اس کا انڈیکس لگا دے گا۔ یہ لکیری رگریشن کے لیے بہترین طریقہ نہیں کیونکہ لکیری رگریشن انڈیکس کی اصل عددی قیمت لیتا ہے اور اسے نتیجہ میں کچھ کوفیشینٹ سے ضرب دے کر شامل کرتا ہے۔ ہمارے کیس میں، انڈیکس نمبر اور قیمت کے درمیان تعلق واضح طور پر غیر لکیری ہے، چاہے انڈیکس کسی مخصوص ترتیب میں ہی ہوں۔
* **One-hot encoding**`Variety` کالم کی جگہ 4 مختلف کالم ڈالے گا، ہر قسم کے لیے ایک۔ ہر کالم میں وہی قطار ہوگی جس میں متعلقہ قسم کی موجودگی 1 ہوگی اور بقیہ 0۔ اس کا مطلب ہے کہ لکیری رگریشن میں چار کوفیشینٹس ہوں گے، ہر کدو کی قسم کے لیے ایک، جو اس خاص قسم کی "ابتدائی قیمت" (یا اضافی قیمت) کی نمائندگی کرے گا۔
نیچے دیا کوڈ دکھاتا ہے کہ قسم کو ون-ہوٹ انکوڈ کیسے کیا جائے:
ذیل میں کوڈ دکھاتا ہے کہ ہم کیسے قسم کو one-hot encode کر سکتے ہیں:
```python
pd.get_dummies(new_pumpkins['Variety'])
```
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
ون-ہوٹ انکوڈ شدہ قسم کو ان پٹ کے طور پر استعمال کرتے ہوئے لائنیر ریگریشن ٹرین کرنے کے لیے، ہمیں بس`X` اور `y` ڈیٹا کو صحیح طریقے سے initialize کرنا ہوگا:
ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE
لکیری رگریشن کو one-hot encoded قسم کے ان پٹ کے ساتھ ٹرین کرنے کے لیے، ہمیں صرف`X` اور `y` ڈیٹا کو صحیح طریقے سے initialize کرنا ہوگا:
```python
X = pd.get_dummies(new_pumpkins['Variety'])
y = new_pumpkins['Price']
```
باقی کوڈ اسی طرح ہے جیسا کہ ہم نے اوپر لائنیر ریگریشن کے لیے استعمال کیا تھا۔ اگر آپ اسے آزما کر دیکھیں گے تو آپ دیکھیں گے کہ mean squared error تقریباً ویسا ہی ہے، لیکن coefficient of determination بہت زیادہ (~77%) ہو جاتا ہے۔ زیادہ درست پیش گوئیاں حاصل کرنے کے لیے، ہم مزید categorical خصوصیات کے ساتھ ساتھ عددی خصوصیات، جیسے `Month` یا `DayOfYear` کو بھی شامل کر سکتے ہیں۔ فیچرز کی ایک بڑی ارے بنانے کے لیے ہم `join` استعمال کر سکتے ہیں:
باقی کوڈ وہی ہے جو ہم نے اوپر لکیری رگریشن کو ٹرین کرنے کے لیے استعمال کیا تھا۔ اگر آپ اس کا تجربہ کریں گے، تو آپ دیکھیں گے کہ مین اسکوائر ایرر تقریباً وہی ہے، لیکن ہمیں کوفیشینٹ آف ڈٹرمنیشن بہت زیادہ ملتا ہے (~77%)۔ زیادہ درست پیش گوئیاں حاصل کرنے کے لیے، ہم مزید categorical اور عددی فیچرز جیسے `Month` یا `DayOfYear` کو مدنظر رکھ سکتے ہیں۔ سب فیچرز کو ایک بڑی array میں جمع کرنے کے لیے، ہم `join` استعمال کر سکتے ہیں:
```python
X = pd.get_dummies(new_pumpkins['Variety']) \
@ -319,61 +341,61 @@ X = pd.get_dummies(new_pumpkins['Variety']) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
```
یہاں ہم `City` اور `Package` کی اقسام بھی مدنظر لیتے ہیں، جو ہمیں MSE 2.84 (10%) اور determination 0.94 دیتی ہے!
## سب کچھ ایک ساتھ رکھنا
یہاں ہم `City` اور `Package` ٹائپ کو بھی مدنظر لیتے ہیں، جو ہمیں RMSE 2.84 (10.5%) اور determination 0.94 دیتا ہے!
بہترین ماڈل بنانے کے لیے، ہم اوپر والے مثال میں سے مشترکہ (ون-ہوٹ انکوڈ شدہ زمرہ بندی شدہ + عددی) ڈیٹا کو پولینومیل ریگریشن کے ساتھ استعمال کر سکتے ہیں۔ آپ کی سہولت کے لیے مکمل کوڈ یہاں ہے:
## سب کچھ اکٹھا کرنا
بہترین ماڈل بنانے کے لیے، ہم اوپر دی گئی مثال سے مشترکہ (one-hot encoded categorical + numeric) ڈیٹا کو پولینومیئل رگریشن کے ساتھ استعمال کر سکتے ہیں۔ آپ کی سہولت کے لیے مکمل کوڈ یہاں ہے:
```python
# تربیتی ڈیٹا تیار کریں
# تربیتی ڈیٹا مرتب کریں
X = pd.get_dummies(new_pumpkins['Variety']) \
.join(new_pumpkins['Month']) \
.join(pd.get_dummies(new_pumpkins['City'])) \
.join(pd.get_dummies(new_pumpkins['Package']))
y = new_pumpkins['Price']
# تربیت اور امتحان کے لیے تقسیم کریں
# تربیتی اور تجرباتی ڈیٹا تقسیم کریں
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
یہ ہمیں تقریباً 97% کی بہترین determination coefficient دے گا، اور MSE=2.23 (~8% میں پیشگوئی کی غلطی)۔
| ماڈل | MSE | Determination |
|-------|-----|---------------|
| `DayOfYear` خطی | 2.77 (17.2%) | 0.07 |
| `DayOfYear` پولینومیل | 2.73 (17.0%) | 0.08 |
| `Variety` خطی | 5.24 (19.7%) | 0.77 |
| تمام خصوصیات خطی | 2.84 (10.5%) | 0.94 |
| تمام خصوصیات پولینومیل | 2.23 (8.25%) | 0.97 |
یہ ہمیں تقریباً 97% determination کوفیشینٹ اور RMSE=2.23 (~8% پیش گوئی کی غلطی) دے گا۔
| ماڈل | RMSE | Determination |
|-------|-----|---------------|
| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 |
| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 |
| `Variety` Linear | 5.24 (19.7%) | 0.77 |
| تمام فیچرز Linear | 2.84 (10.5%) | 0.94 |
| تمام فیچرز Polynomial | 2.23 (8.25%) | 0.97 |
🏆 بہت خوب! آپ نے ایک سبق میں چار ریگریشن ماڈل بنائے، اور ماڈل کا معیار 97% تک بہتر کیا۔ آخری سیکشن میں آپ لاجسٹک ریگریشن کے بارے میں جانیں گے تاکہ زمروں کی تعیین کی جا سکے۔
🏆 بہت خوب! آپ نے ایک سبق میں چار رگریشن ماڈلز بنائے، اور ماڈل کے معیار کو 97% تک بہتر کیا۔ رگریشن کے آخری حصے میں، آپ لاجسٹک رگریشن کے بارے میں سیکھیں گے تاکہ زمرہ بندی کی جا سکے۔
---
---
## 🚀چیلنج
اس نوٹ بک میں مختلف متغیرات آزمائیں تاکہ دیکھ سکیں کہ correlation ماڈل کی درستگی کے ساتھ کس طرح مطابقت رکھتا ہے۔
اس نوٹ بک میں مختلف متغیرات آزما کر دیکھیں کہ تعلق ماڈل کی درستگی سے کیسے مطابقت رکھتا ہے۔
## [سبق کے بعد کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## [لیکچر کے بعد کا کوئز](https://ff-quizzes.netlify.app/en/ml/)
## جائزہ اور خود مطالعہ
## جائزہ اور خود تعلیم
اس سبق میں ہم نے لائنیر ریگریشن کے بارے میں سیکھا۔ ریگریشن کی دیگر اہم اقسام بھی ہیں۔ Stepwise، Ridge، Lasso اور Elasticnet تکنیکوں کے بارے میں پڑھیں۔ زیادہ سیکھنے کے لیے ایک اچھا کورس [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) ہے۔
اس سبق میں ہم نے لکیری رگریشن کے بارے میں سیکھا۔ دیگر اہم رگریشن کی اقسام بھی ہیں۔ Stepwise, Ridge, Lasso اور Elasticnet تکنیکوں کے بارے میں پڑھیں۔ مزید سیکھنے کے لیے ایک اچھا کورس [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) ہے۔
اس دستاویز کا ترجمہ AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے کیا گیا ہے۔ اگرچہ ہم درستگی کی کوشش کرتے ہیں، براہ کرم آگاہ رہیں کہ خودکار تراجم میں غلطیاں یا غلط فہمیاں ہو سکتی ہیں۔ اصل دستاویز اپنی مادری زبان میں مستند ماخذ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ تجویز کیا جاتا ہے۔ ہم اس ترجمہ کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔
**ڈس کلیمر**:
اس دستاویز کا ترجمہ AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے کیا گیا ہے۔ اگرچہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم آگاہ رہیں کہ خودکار ترجموں میں غلطیاں یا عدم مطابقت ہو سکتی ہیں۔ اصل دستاویز کو اس کی مادری زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے پیشہ ورانہ انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے ہونے والی کسی بھی غلط فہمی یا بدفہمی کی ذمہ داری ہم پر عائد نہیں ہوتی۔
"## کدو کی قیمت کے لیے لکیری اور کثیرالحدی رجعت - سبق 3\n",
"## پمپکن کی قیمتوں کے لئے لکیری اور کثیر رکنی رجعت - سبق 3\n",
"\n",
"ضروری لائبریریاں اور ڈیٹاسیٹ لوڈ کریں۔ ڈیٹا کو ایک ڈیٹافریم میں تبدیل کریں جو ڈیٹا کا ایک حصہ شامل کرے:\n",
"ضروری لائبریریاں اور ڈیٹاسیٹ لوڈ کریں۔ ڈیٹا کو ایک ڈیٹافریم میں تبدیل کریں جو ڈیٹا کا ایک ذیلی حصہ ہو: \n",
"\n",
"- صرف وہ کدو حاصل کریں جو بوشل کے حساب سے قیمت دیے گئے ہوں\n",
"- تاریخ کو مہینے میں تبدیل کریں\n",
"- صرف وہ پمپکن حاصل کریں جن کی قیمت بسہل کے حساب سے ہو\n",
"- تاریخ کو ماہ میں تبدیل کریں\n",
"- قیمت کو اونچی اور نیچی قیمتوں کے اوسط کے طور پر حساب کریں\n",
"- قیمت کو بوشل کی مقدار کے حساب سے ظاہر کریں\n"
"- قیمت کو بسہل کی مقدار کے حساب سے ظاہر کرنے کے لئے تبدیل کریں\n"
]
},
{
@ -377,7 +377,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ایک اسکیٹرپلاٹ ہمیں یاد دلاتا ہے کہ ہمارے پاس صرف اگست سے دسمبر تک کے مہینوں کا ڈیٹا ہے۔ ہمیں شاید مزید ڈیٹا کی ضرورت ہے تاکہ ہم لکیری انداز میں نتائج اخذ کر سکیں۔\n"
"ایک سکیٹرپلاٹ ہمیں یاد دلاتا ہے کہ ہمارے پاس صرف اگست سے دسمبر تک کے مہینوں کا ڈیٹا ہے۔ ممکنہ طور پر ہمیں خطی انداز میں نتائج نکالنے کے لیے مزید ڈیٹا کی ضرورت ہے۔\n"
]
},
{
@ -474,7 +474,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ایسا لگتا ہے کہ تعلق کافی کمزور ہے، لیکن کوئی اور زیادہ اہم تعلق موجود ہے - کیونکہ اوپر دیے گئے پلاٹ میں قیمت کے پوائنٹس کئی مختلف کلسٹرز میں نظر آتے ہیں۔ آئیے ایک پلاٹ بناتے ہیں جو مختلف کدو کی اقسام کو دکھائے:\n"
"ایسا لگتا ہے کہ تعلق بہت کم ہے، لیکن کوئی اور زیادہ اہم تعلق موجود ہے - کیونکہ اوپر کے پلاٹ میں قیمتوں کے پوائنٹس کے کئی الگ الگ گروپس نظر آ رہے ہیں۔ آئیے ایک ایسا پلاٹ بناتے ہیں جو مختلف کدو کی اقسام دکھائے:\n"
]
},
{
@ -537,7 +537,9 @@
{
"cell_type": "markdown",
"metadata": {},
"source": []
"source": [
"اس وقت کے لیے، آئیے صرف ایک اقسام - **پائی کی قسم** پر توجہ مرکوز کریں۔\n"
]
},
{
"cell_type": "code",
@ -586,7 +588,7 @@
"source": [
"### لکیری رجعت\n",
"\n",
"ہم لکیری رجعت ماڈل کو تربیت دینے کے لیے Scikit Learn کا استعمال کریں گے:\n"
"ہم لکیری رجعت ماڈل کی تربیت کے لیے Scikit Learn استعمال کریں گے:\n"
]
},
{
@ -664,7 +666,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"لکیری رجعتی گتانکات سے لکیر کی ڈھلوان کا تعین کیا جا سکتا ہے:\n"
"خط کی ڈھلوان کو خطی رجعت کے کوایفیشنٹس سے معلوم کیا جا سکتا ہے:\n"
]
},
{
@ -722,9 +724,9 @@
"source": [
"### کثیر رکنی ریگریشن\n",
"\n",
"کبھی کبھار خصوصیات اور نتائج کے درمیان تعلق فطری طور پر غیر خطی ہوتا ہے۔ مثال کے طور پر، کدو کی قیمتیں سردیوں میں زیادہ ہو سکتی ہیں (مہینے=1،2)، پھر گرمیوں میں کم ہو سکتی ہیں (مہینے=5-7)، اور پھر دوبارہ بڑھ سکتی ہیں۔ خطی ریگریشن اس تعلق کو درست طریقے سے تلاش کرنے سے قاصر ہے۔\n",
"کبھی کبھار خصوصیات اور نتائج کے درمیان تعلق فطری طور پر غیر خطی ہوتا ہے۔ مثال کے طور پر، کدو کی قیمتیں سردیوں میں زیادہ ہو سکتی ہیں (مہینے=1،2)، پھر گرمیوں میں کم ہو جاتی ہیں (مہینے=5-7)، اور پھر دوبارہ بڑھ جاتی ہیں۔ لکیری ریگریشن اس تعلق کو درست طریقے سے نہیں پہچان پاتی۔\n",
"\n",
"ایسے میں، ہم اضافی خصوصیات شامل کرنے پر غور کر سکتے ہیں۔ ایک آسان طریقہ یہ ہے کہ ان پٹ خصوصیات سے کثیر رکنی (polynomials) استعمال کریں، جس کے نتیجے میں **کثیر رکنی ریگریشن** حاصل ہو گی۔ Scikit Learn میں، ہم پائپ لائنز کا استعمال کرتے ہوئے خودکار طور پر کثیر رکنی خصوصیات پہلے سے تیار کر سکتے ہیں:\n"
"اس صورت میں، ہم اضافی خصوصیات شامل کرنے پر غور کر سکتے ہیں۔ آسان طریقہ یہ ہے کہ ان پٹ خصوصیات سے کثیر رکنی استعمال کریں، جس سے **کثیر رکنی ریگریشن** حاصل ہوگی۔ سکائیکٹ لرن میں، ہم پائپ لائنز کا استعمال کرتے ہوئے خود بخود کثیر رکنی خصوصیات پہلے سے تیار کر سکتے ہیں:\n"
"ایک مثالی دنیا میں، ہم چاہتے ہیں کہ مختلف کدو کی اقسام کے لیے قیمتوں کی پیش گوئی ایک ہی ماڈل کے ذریعے کی جا سکے۔ اقسام کو مدنظر رکھنے کے لیے، ہمیں پہلے اسے عددی شکل میں تبدیل کرنا ہوگا، یا **انکوڈ** کرنا ہوگا۔ اس کے کئی طریقے ہیں:\n",
"آئڈیل دنیا میں، ہم چاہتے ہیں کہ ایک ہی ماڈل استعمال کرتے ہوئے مختلف کدو کی اقسام کی قیمتیں پیش گوئی کر سکیں۔ قسم کو مدنظر رکھنے کے لیے، سب سے پہلے ہمیں اسے عددی شکل میں تبدیل کرنا ہوگا، یا **انکوڈ** کرنا ہوگا۔ ہم اسے کرنے کے چند طریقے ہیں:\n",
"\n",
"* سادہ عددی انکوڈنگ، جو مختلف اقسام کی ایک جدول بنائے گی، اور پھر قسم کے نام کو اس جدول میں ایک انڈیکس سے بدل دے گی۔ یہ طریقہ لکیری رجعت کے لیے بہترین نہیں ہے، کیونکہ لکیری رجعت انڈیکس کی عددی قدر کو مدنظر رکھتی ہے، اور عددی قدر ممکنہ طور پر قیمت کے ساتھ عددی طور پر مطابقت نہیں رکھتی۔\n",
"* ون-ہاٹ انکوڈنگ، جو `Variety` کالم کو 4 مختلف کالمز سے بدل دے گی، ہر قسم کے لیے ایک کالم، جو 1 دکھائے گا اگر متعلقہ قطار دی گئی قسم کی ہو، اور 0 اگر نہ ہو۔\n",
"* سادہ عددی انکوڈنگ جو مختلف اقسام کی ایک جدول بنائے گا، اور پھر قسم کے نام کو اس جدول میں ایک انڈیکس سے تبدیل کر دے گا۔ یہ لکیری ریگریشن کے لیے بہترین خیال نہیں ہے، کیونکہ لکیری ریگریشن انڈیکس کی عددی قدر کو مدنظر رکھتا ہے، اور عددی قدر غالباً قیمت کے ساتھ عددی طور پر متصل نہیں ہوگی۔\n",
"* ون-ہاٹ انکوڈنگ، جو `Variety` کالم کو 4 مختلف کالموں سے بدل دے گا، ہر ایک قسم کے لیے ایک، جس میں 1 ہوگا اگر متعلقہ صف دی گئی قسم کی ہو، ورنہ 0۔\n",
"\n",
"نیچے دیا گیا کوڈ دکھاتا ہے کہ ہم کس طرح ایک قسم کو ون-ہاٹ انکوڈ کر سکتے ہیں:\n"
"نیچے دیا گیا کوڈ دکھاتا ہے کہ ہم کیسے کسی قسم کو ون-ہاٹ انکوڈ کر سکتے ہیں:\n"
]
},
{
@ -944,7 +949,7 @@
"source": [
"### مختلف اقسام پر لکیری رجعت\n",
"\n",
"اب ہم وہی کوڈ استعمال کریں گے جو اوپر دیا گیا ہے، لیکن `DayOfYear` کی بجائے ہم اپنی ون-ہاٹ-انکوڈڈ قسم کو بطور ان پٹ استعمال کریں گے:\n"
"اب ہم اوپر دیے گئے کوڈ کو ہی استعمال کریں گے، لیکن `DayOfYear` کی جگہ ہم اپنے ایک ہاٹ انکوڈڈ مختلف اقسام کو ان پٹ کے طور پر استعمال کریں گے:\n"
]
},
{
@ -992,7 +997,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"ہم اسی طریقے سے دیگر خصوصیات کو استعمال کرنے کی کوشش بھی کر سکتے ہیں، اور انہیں عددی خصوصیات جیسے کہ `Month` یا `DayOfYear` کے ساتھ ملا سکتے ہیں:\n"
"ہم اسی طرح دیگر خصوصیات کو آزما سکتے ہیں، اور انہیں عددی خصوصیات کے ساتھ جوڑ سکتے ہیں، جیسے کہ `Month` یا `DayOfYear`:\n"
]
},
{
@ -1023,9 +1028,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### کثیر رقمی رجعت\n",
"### پولینومیل ریگرشن\n",
"\n",
"کثیر رقمی رجعت کو ان زمرہ جاتی خصوصیات کے ساتھ بھی استعمال کیا جا سکتا ہے جو ایک-ہاٹ-انکوڈڈ ہوں۔ کثیر رقمی رجعت کو تربیت دینے کے لیے کوڈ بنیادی طور پر وہی ہوگا جو ہم نے اوپر دیکھا ہے۔\n"
"پولینومیل ریگرشن کو ایک ہیٹ انکوڈڈ کیٹیگوریکل فیچرز کے ساتھ بھی استعمال کیا جا سکتا ہے۔ پولینومیل ریگرشن کو ٹرین کرنے کا کوڈ بنیادی طور پر وہی ہوگا جو ہم نے اوپر دیکھا ہے۔\n"
]
},
{
@ -1072,7 +1077,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"\n---\n\n**ڈس کلیمر**: \nیہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے پوری کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستگی ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے لیے ہم ذمہ دار نہیں ہیں۔\n"
"---\n\n<!-- CO-OP TRANSLATOR DISCLAIMER START -->\n**ڈی ایس کلیمر**:\nاس دستاویز کا ترجمہ AI ترجمہ خدمت [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے کیا گیا ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم آگاہ رہیں کہ خودکار تراجم میں غلطیاں یا عدم تناسبات ہو سکتے ہیں۔ اصل دستاویز اپنی مادری زبان میں حتمی ماخذ سمجھی جانی چاہیے۔ اہم معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تعبیرات کی ذمہ داری ہم قبول نہیں کرتے۔\n<!-- CO-OP TRANSLATOR DISCLAIMER END -->\n"