From ca1d8b15011525084f20f8b16de3203705a3728a Mon Sep 17 00:00:00 2001 From: "localizeflow[bot]" Date: Sun, 26 Apr 2026 19:52:36 +0000 Subject: [PATCH] chore(i18n): sync translations with latest source changes (chunk 1/1, 12 changes) --- translations/fa/.co-op-translator.json | 14 +- .../4-techniques-of-ML/README.md | 98 +++--- .../fa/2-Regression/3-Linear/README.md | 298 +++++++++-------- .../3-Linear/solution/notebook.ipynb | 59 ++-- translations/ur/.co-op-translator.json | 14 +- .../4-techniques-of-ML/README.md | 102 +++--- .../ur/2-Regression/3-Linear/README.md | 312 ++++++++++-------- .../3-Linear/solution/notebook.ipynb | 61 ++-- translations/zh-CN/.co-op-translator.json | 14 +- .../4-techniques-of-ML/README.md | 100 +++--- .../zh-CN/2-Regression/3-Linear/README.md | 267 ++++++++------- .../3-Linear/solution/notebook.ipynb | 57 ++-- 12 files changed, 743 insertions(+), 653 deletions(-) diff --git a/translations/fa/.co-op-translator.json b/translations/fa/.co-op-translator.json index a2f703594..8f19a5c19 100644 --- a/translations/fa/.co-op-translator.json +++ b/translations/fa/.co-op-translator.json @@ -36,8 +36,8 @@ "language_code": "fa" }, "1-Introduction/4-techniques-of-ML/README.md": { - "original_hash": "9d91f3af3758fdd4569fb410575995ef", - "translation_date": "2025-09-04T22:40:01+00:00", + "original_hash": "84b1715a6be62ef1697351dcc5d7b567", + "translation_date": "2026-04-26T19:50:00+00:00", "source_file": "1-Introduction/4-techniques-of-ML/README.md", "language_code": "fa" }, @@ -90,8 +90,8 @@ "language_code": "fa" }, "2-Regression/3-Linear/README.md": { - "original_hash": "26c53a922f1f1e8542b0ea41ff52221a", - "translation_date": "2026-04-20T19:42:07+00:00", + "original_hash": "8b776e731c35b171d316d01d0e7b1369", + "translation_date": "2026-04-26T19:49:31+00:00", "source_file": "2-Regression/3-Linear/README.md", "language_code": "fa" }, @@ -107,6 +107,12 @@ "source_file": "2-Regression/3-Linear/solution/Julia/README.md", "language_code": "fa" }, + "2-Regression/3-Linear/solution/notebook.ipynb": { + "original_hash": "6781223ffbe8cfdaa38d0200f08e1288", + "translation_date": "2026-04-26T19:47:41+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "fa" + }, "2-Regression/4-Logistic/README.md": { "original_hash": "abf86d845c84330bce205a46b382ec88", "translation_date": "2025-09-04T22:32:20+00:00", diff --git a/translations/fa/1-Introduction/4-techniques-of-ML/README.md b/translations/fa/1-Introduction/4-techniques-of-ML/README.md index 31f627784..f33a69701 100644 --- a/translations/fa/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/fa/1-Introduction/4-techniques-of-ML/README.md @@ -1,123 +1,125 @@ # تکنیک‌های یادگیری ماشین -فرآیند ساخت، استفاده و نگهداری مدل‌های یادگیری ماشین و داده‌هایی که از آن‌ها استفاده می‌کنند، بسیار متفاوت از بسیاری از جریان‌های کاری توسعه دیگر است. در این درس، این فرآیند را روشن می‌کنیم و تکنیک‌های اصلی که باید بدانید را توضیح می‌دهیم. شما: +فرآیند ساخت، استفاده و نگهداری از مدل‌های یادگیری ماشین و داده‌هایی که استفاده می‌کنند، فرآیندی بسیار متفاوت از بسیاری دیگر از جریان‌های کاری توسعه است. در این درس، فرآیند را رمزگشایی می‌کنیم و تکنیک‌های اصلی که باید بدانید را مشخص می‌کنیم. شما: - فرآیندهای پایه‌ای یادگیری ماشین را در سطح بالا درک خواهید کرد. - مفاهیم پایه‌ای مانند «مدل‌ها»، «پیش‌بینی‌ها» و «داده‌های آموزشی» را بررسی خواهید کرد. -## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) +## [آزمون پیش‌درس](https://ff-quizzes.netlify.app/en/ml/) [![یادگیری ماشین برای مبتدیان - تکنیک‌های یادگیری ماشین](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](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') ارسال می‌کنید. ### ارزیابی مدل -پس از تکمیل فرآیند آموزش (ممکن است برای آموزش یک مدل بزرگ چندین تکرار یا «دوره» طول بکشد)، می‌توانید کیفیت مدل را با استفاده از داده‌های آزمایشی برای سنجش عملکرد آن ارزیابی کنید. این داده‌ها زیرمجموعه‌ای از داده‌های اصلی هستند که مدل قبلاً آن‌ها را تحلیل نکرده است. می‌توانید جدولی از معیارهای کیفیت مدل خود چاپ کنید. +پس از تکمیل فرآیند آموزش (ممکن است برای آموزش یک مدل بزرگ چندین تکرار یا 'اپک' لازم باشد)، می‌توانید کیفیت مدل را با استفاده از داده‌های آزمون که قبلاً مدل آن‌ها را ندیده است ارزیابی کنید. این داده‌ها زیرمجموعه‌ای از داده اصلی هستند که مدل قبلاً تحلیل نکرده است. می‌توانید جدولی از معیارهای کیفیت مدل خود چاپ کنید. 🎓 **تناسب مدل** -در زمینه یادگیری ماشین، تناسب مدل به دقت عملکرد زیرین مدل اشاره دارد که تلاش می‌کند داده‌هایی را که با آن‌ها آشنا نیست تحلیل کند. +در زمینه یادگیری ماشین، تناسب مدل به دقت تابع پایه مدل اشاره دارد هنگامی که سعی می‌کند داده‌هایی را تحلیل کند که با آن‌ها آشنا نیست. -🎓 **تناسب کم** و **تناسب بیش‌ازحد** مشکلات رایجی هستند که کیفیت مدل را کاهش می‌دهند، زیرا مدل یا به‌اندازه کافی خوب تناسب ندارد یا بیش‌ازحد تناسب دارد. این باعث می‌شود مدل پیش‌بینی‌هایی انجام دهد که یا بیش‌ازحد با داده‌های آموزشی هماهنگ هستند یا بیش‌ازحد از آن‌ها فاصله دارند. یک مدل تناسب بیش‌ازحد داده‌های آموزشی را بیش‌ازحد خوب پیش‌بینی می‌کند زیرا جزئیات و نویز داده‌ها را بیش‌ازحد خوب یاد گرفته است. یک مدل تناسب کم دقیق نیست زیرا نمی‌تواند داده‌های آموزشی خود یا داده‌هایی که هنوز «ندیده» است را به‌درستی تحلیل کند. +🎓 **کم‌برازش** و **بیش‌برازش** مشکلات رایجی هستند که کیفیت مدل را کاهش می‌دهند، زیرا مدل یا به اندازه کافی مناسب نیست یا بیش از حد مناسب. این باعث می‌شود مدل پیش‌بینی‌هایی انجام دهد که یا خیلی نزدیک به داده‌های آموزشی است یا بسیار دور از آن. مدل بیش‌برازش داده‌های آموزشی را خیلی خوب پیش‌بینی می‌کند چون جزئیات و نویز داده‌ها را خیلی خوب یاد گرفته است. مدل کم‌برازش دقیق نیست چون نه می‌تواند داده‌های آموزشی را درست تحلیل کند و نه داده‌هایی که قبلاً «ندیده» است. -![مدل تناسب بیش‌ازحد](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +![مدل بیش‌برازش](../../../../translated_images/fa/overfitting.1c132d92bfd93cb6.webp) > اینفوگرافیک توسط [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](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در پی دقت هستیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌هایی باشند. سند اصلی به زبان بومی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما مسئولیتی در قبال هرگونه سوءتفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه نداریم. + \ No newline at end of file diff --git a/translations/fa/2-Regression/3-Linear/README.md b/translations/fa/2-Regression/3-Linear/README.md index be99871b3..c62c0d280 100644 --- a/translations/fa/2-Regression/3-Linear/README.md +++ b/translations/fa/2-Regression/3-Linear/README.md @@ -1,62 +1,63 @@ -# ساخت یک مدل رگرسیون با استفاده از Scikit-learn: چهار روش رگرسیون +# ساخت مدل رگرسیون با استفاده از Scikit-learn: رگرسیون از چهار دیدگاه مختلف -## نکته مبتدی +## نکته برای مبتدیان -رگرسیون خطی زمانی استفاده می‌شود که بخواهیم یک **مقدار عددی** پیش‌بینی کنیم (برای مثال، قیمت خانه، دما یا فروش). -این مدل با یافتن یک خط راست که بهترین نماینده رابطه بین ویژگی‌های ورودی و خروجی باشد، کار می‌کند. +رگرسیون خطی زمانی استفاده می‌شود که بخواهیم یک **مقدار عددی** پیش‌بینی کنیم (برای مثال، قیمت خانه، دما یا فروش). +این روش با یافتن یک خط مستقیم که بهترین نمایش‌دهنده رابطه بین ویژگی‌های ورودی و خروجی است، کار می‌کند. -در این درس، تمرکز ما بر درک مفهوم است قبل از کاوش روش‌های پیشرفته‌تر رگرسیون. -![رگرسیون خطی در مقابل چندجمله‌ای انفورگرافیک](../../../../translated_images/fa/linear-polynomial.5523c7cb6576ccab.webp) -> اینفوگرافیک توسط [داسانی مادیپالی](https://twitter.com/dasani_decoded) +در این درس، تمرکز ما بر درک مفهوم قبل از بررسی تکنیک‌های پیشرفته‌تر رگرسیون است. +![رگرسیون خطی در مقابل چندجمله‌ای](../../../../translated_images/fa/linear-polynomial.5523c7cb6576ccab.webp) +> اینفوگرافیک توسط [داسانی مادایپالی](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://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](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` است نشان می‌دهد. -> -> ![محاسبه شیب](../../../../translated_images/fa/slope.f3c9d5910ddbfcf9.webp) -> -> ابتدا شیب `b` را محاسبه کنید. اینفوگرافیک توسط [جن لوپر](https://twitter.com/jenlooper) -> -> به عبارت دیگر، و با اشاره به سوال اصلی داده کدو تنبل ما: "پیش‌بینی قیمت کدو تنبل به ازای هر بوشل بر اساس ماه"، `X` اشاره به قیمت دارد و `Y` به ماه فروش. -> -> ![تکمیل معادله](../../../../translated_images/fa/calculation.a209813050a1ddb1.webp) -> -> مقدار 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` اشاره دارد. +> +>![محاسبه شیب](../../../../translated_images/fa/slope.f3c9d5910ddbfcf9.webp) +> +> ابتدا شیب `b` را محاسبه کنید. اینفوگرافیک توسط [جن لوپر](https://twitter.com/jenlooper) +> +> به عبارت دیگر، و با اشاره به سوال اصلی داده‌های کدو تنبل ما: "پیش‌بینی قیمت کدو تنبل به ازای هر بشِل بر اساس ماه"، `X` به قیمت اشاره می‌کند و `Y` به ماه فروش. +> +>![تکمیل معادله](../../../../translated_images/fa/calculation.a209813050a1ddb1.webp) +> +> مقدار 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 | ماه | روز_سال | نوع | شهر | بسته‌بندی | قیمت پایین | قیمت بالا | قیمت ----|---|---|---|---|---|---|---|--- -70 | 9 | 267 | نوع پای | بالتیمور | جعبه‌های 1 1/9 بوشل | 15.0 | 15.0 | 13.636364 -71 | 9 | 267 | نوع پای | بالتیمور | جعبه‌های 1 1/9 بوشل | 18.0 | 18.0 | 16.363636 -72 | 10 | 274 | نوع پای | بالتیمور | جعبه‌های 1 1/9 بوشل | 18.0 | 18.0 | 16.363636 -73 | 10 | 274 | نوع پای | بالتیمور | جعبه‌های 1 1/9 بوشل | 17.0 | 17.0 | 15.454545 -74 | 10 | 281 | نوع پای | بالتیمور | جعبه‌های 1 1/9 بوشل | 15.0 | 15.0 | 13.636364 +ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price +---|-------|-----------|---------|------|---------|-----------|------------|------- +70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 +71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 +72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 +73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 +74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 -> کد پاکسازی داده در [`notebook.ipynb`](notebook.ipynb) موجود است. ما مراحل پاکسازی مشابه درس قبلی را انجام داده‌ایم، و ستون `DayOfYear` را با استفاده از عبارت زیر محاسبه کردیم: +> کد پاک‌سازی داده‌ها در [`notebook.ipynb`](notebook.ipynb) موجود است. ما همان مراحل پاک‌سازی درس قبلی را انجام داده‌ایم و ستون `DayOfYear` را با استفاده از عبارت زیر محاسبه کرده‌ایم: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` - -حالا که درک درستی از ریاضی پشت رگرسیون خطی دارید، بیایید یک مدل رگرسیون بسازیم تا ببینیم آیا می‌توانیم پیش‌بینی کنیم کدام بسته کدو تنبل بهترین قیمت‌ها را دارد. کسی که برای یک جشنواره کدو تنبل خرید می‌کند ممکن است بخواهد این اطلاعات را داشته باشد تا خریدهای خود را بهینه کند. + +حالا که درک ریاضی پشت رگرسیون خطی دارید، بیایید یک مدل رگرسیون ایجاد کنیم تا ببینیم آیا می‌توانیم پیش‌بینی کنیم کدام بسته کدو تنبل بهترین قیمت‌ها را خواهد داشت. کسی که کدو تنبل برای باغچه جشن خریداری می‌کند ممکن است بخواهد این اطلاعات را برای بهینه‌سازی خریدهایش داشته باشد. ## جستجوی همبستگی [![یادگیری ماشین برای مبتدیان - جستجوی همبستگی: کلید رگرسیون خطی](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "یادگیری ماشین برای مبتدیان - جستجوی همبستگی: کلید رگرسیون خطی") -> 🎥 برای تماشای ویدئوی کوتاه مرور همبستگی روی تصویر بالا کلیک کنید. +> 🎥 روی تصویر بالا کلیک کنید برای ویدیوی کوتاهی درباره همبستگی. -شما احتمالاً در درس قبلی دیده‌اید که میانگین قیمت‌ها برای ماه‌های مختلف به این صورت است: +احتمالاً در درس قبلی دیده‌اید که میانگین قیمت‌ها برای ماه‌های مختلف اینگونه است: -میانگین قیمت بر اساس ماه +میانگین قیمت به ازای ماه -این نشان می‌دهد باید نوعی همبستگی وجود داشته باشد، و ما می‌توانیم مدل خطی رگرسیون را برای پیش‌بینی رابطه بین `ماه` و `قیمت`، یا بین `روز سال` و `قیمت` آموزش دهیم. اینجا نمودار پراکندگی که رابطه دوم را نشان می‌دهد دیده می‌شود: +این نشان می‌دهد باید همبستگی وجود داشته باشد و می‌توانیم مدل رگرسیون خطی آموزش دهیم تا رابطه بین `Month` و `Price`، یا بین `DayOfYear` و `Price` را پیش‌بینی کند. این نمودار پراکندگی رابطه اخیر را نشان می‌دهد: -نمودار پراکندگی قیمت نسبت به روز سال +نمودار پراکندگی قیمت در برابر روز سال -بیایید ببینیم آیا همبستگی با استفاده از تابع `corr` وجود دارد: +بیایید بررسی کنیم همبستگی با استفاده از تابع `corr` چگونه است: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` - -به نظر می‌رسد همبستگی نسبتاً کوچک است، -0.15 نسبت به `ماه` و -0.17 نسبت به `روز ماه`، اما ممکن است رابطه مهم دیگری وجود داشته باشد. به نظر می‌رسد خوشه‌های مختلف قیمت مرتبط با انواع مختلف کدو وجود دارد. برای تایید این فرض، اجازه دهید هر دسته کدو را با رنگ متفاوت رسم کنیم. با ارسال آرگومان `ax` به تابع نمودار پراکندگی می‌توانیم تمام نقاط را روی یک گراف نشان دهیم: + +به نظر می‌رسد همبستگی بسیار کم است، -۰.۱۵ بر اساس `Month` و -۰.۱۷ بر اساس `DayOfYear`، ولی ممکن است رابطه مهم دیگری وجود داشته باشد. به نظر می‌رسد خوشه‌های مختلفی از قیمت‌ها متعلق به انواع مختلف کدو تنبل باشد. برای تایید این فرضیه، هر دسته کدو را با رنگ متفاوت رسم کنیم. با دادن پارامتر `ax` به تابع رسم پراکندگی، می‌توانیم همه نقاط را روی یک نمودار رسم کنیم: ```python ax=None @@ -138,76 +139,75 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): df = new_pumpkins[new_pumpkins['Variety']==var] ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` - -نمودار پراکندگی قیمت نسبت به روز سال با رنگ‌های متفاوت -بررسی ما نشان می‌دهد که نوع کدو اثر بیشتری بر قیمت کل دارد نسبت به تاریخ فروش واقعی. می‌توانیم این را با نمودار میله‌ای ببینیم: +نمودار پراکندگی قیمت در برابر روز سال با رنگ‌بندی + +تحقیق ما نشان می‌دهد که نوع کدو بر قیمت کلی تاثیر بیشتری از تاریخ فروش دارد. این را می‌توانیم با نمودار میله‌ای مشاهده کنیم: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') ``` - -نمودار میله‌ای قیمت نسبت به نوع -در حال حاضر فقط روی یک نوع کدو، یعنی 'نوع پای' تمرکز کنیم و ببینیم تاریخ فروش چه تاثیری بر قیمت دارد: +نمودار میله‌ای قیمت بر اساس نوع + +فعلاً فقط روی یک نوع کدو، یعنی 'نوع پای (pie)', تمرکز کنیم و ببینیم تاریخ چه اثری روی قیمت دارد: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` - -نمودار پراکندگی قیمت نسبت به روز سال برای کدو نوع پای +نمودار پراکندگی قیمت در برابر روز سال، نوع پای -اگر اکنون همبستگی بین `قیمت` و `روز سال` را با تابع `corr` محاسبه کنیم، چیزی حدود `-0.27` بدست می‌آوریم – که یعنی آموزش یک مدل پیش‌بینی منطقی است. +اگر حالا همبستگی بین `Price` و `DayOfYear` را با تابع `corr` محاسبه کنیم، چیزی حدود `-0.27` دریافت می‌کنیم — یعنی آموزش یک مدل پیش‌بینی منطقی به نظر می‌رسد. -> قبل از آموزش مدل رگرسیون خطی، مهم است مطمئن شویم داده‌های ما تمیز هستند. رگرسیون خطی با مقادیر خالی خوب کار نمی‌کند، بنابراین بهتر است همه سلول‌های خالی حذف شوند: +> قبل از آموزش مدل رگرسیون خطی، مهم است اطمینان حاصل کنیم که داده‌های ما تمیز هستند. رگرسیون خطی با مقادیر گمشده خوب کار نمی‌کند، پس بهتر است همه خانه‌های خالی را حذف کنیم: ```python pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` - -راه دیگر پر کردن مقادیر خالی با میانگین‌های ستون مربوطه است. + +رویکرد دیگر پر کردن خانه‌های خالی با مقادیر میانگین ستون مربوطه است. ## رگرسیون خطی ساده [![یادگیری ماشین برای مبتدیان - رگرسیون خطی و چندجمله‌ای با Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](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 pred = lin_reg.predict(X_test) @@ -216,15 +216,15 @@ rmse = np.sqrt(mean_squared_error(y_test,pred)) print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') ``` -خطای ما حدود ۲ واحد است که تقریباً ~۱۷٪ است، نه چندان خوب. یک شاخص دیگر از کیفیت مدل، **ضریب تعیین** است که می‌توان آن را به این صورت به دست آورد: +خطای ما به نظر می‌رسد حدود ۲ واحد باشد که تقریباً ~۱۷٪ است. زیاد خوب نیست. شاخص دیگر کیفیت مدل، **ضریب تعیین** است که می‌توان آن را به این صورت به دست آورد: ```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 @@ -256,36 +256,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` -استفاده از `PolynomialFeatures(2)` به این معناست که همه چندجمله‌ای‌های درجه دوم از داده‌های ورودی را شامل می‌شود. در مورد ما فقط به معنای `DayOfYear`2 است، اما اگر دو متغیر ورودی X و Y داشته باشیم، این شامل X2، XY و Y2 هم خواهد بود. همچنین می‌توانیم درجه‌های بالاتر چندجمله‌ای را استفاده کنیم اگر بخواهیم. +استفاده از `PolynomialFeatures(2)` یعنی اینکه همه چندجمله‌ای‌های درجه دوم از داده‌های ورودی را شامل می‌شود. در مورد ما فقط `DayOfYear` به توان دو خواهد بود، اما با داشتن دو متغیر ورودی X و Y، این شامل X به توان ۲، حاصلضرب XY و Y به توان ۲ خواهد بود. اگر بخواهیم می‌توانیم چندجمله‌ای‌های درجه بالاتر هم استفاده کنیم. + +پایپلاین‌ها را می‌توان دقیقا به همان روشی که شیء `LinearRegression` اصلی استفاده می‌شود، بکار برد، یعنی می‌توانیم pipeline را `fit` کنیم و سپس از `predict` برای دریافت نتایج پیش‌بینی استفاده کنیم: + +```python +pred = pipeline.predict(X_test) + +rmse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +برای رسم منحنی تقریب نرم، از `np.linspace` استفاده می‌کنیم تا یک بازه یکنواخت از مقادیر ورودی ایجاد کنیم، به جای اینکه مستقیماً روی داده‌های نامرتب آزمایشی رسم کنیم (که خطوط زیگزاگی ایجاد می‌کرد): + +```python +X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1) +y_range = pipeline.predict(X_range) + +plt.scatter(X_test, y_test) +plt.plot(X_range, y_range) +``` -خط لوله‌ها می‌توانند به همان شیوه شیء اصلی `LinearRegression` استفاده شوند، یعنی می‌توانیم `fit` خط لوله را اجرا کنیم و سپس از `predict` برای دریافت نتایج پیش‌بینی استفاده کنیم. در اینجا نمودار داده‌های تست و منحنی تقریب آورده شده است: +در اینجا نموداری است که داده‌های آزمایشی و منحنی تقریب را نشان می‌دهد: Polynomial regression -با استفاده از رگرسیون چندجمله‌ای، می‌توانیم مقداری کاهش در MSE و افزایش در ضریب تعیین بدست آوریم، اما نه به صورت چشمگیر. باید ویژگی‌های دیگر را نیز در نظر بگیریم! +با استفاده از رگرسیون چندجمله‌ای، می‌توانیم RMSE کمی پایین‌تر و ضریب تعیین بالاتری به دست آوریم، اما نه به صورت قابل توجه. باید ویژگی‌های دیگر را هم در نظر بگیریم! -> می‌بینید که حداقل قیمت‌های کدو تنبل تقریباً حوالی هالووین مشاهده می‌شود. چگونه می‌توانید این را توضیح دهید؟ +> می‌توانید ببینید که کمترین قیمت کدو حلوایی تقریباً در اطراف هالووین مشاهده می‌شود. چگونه می‌توانید این را توضیح دهید؟ -🎃 تبریک، شما به تازگی یک مدل ساخته‌اید که می‌تواند قیمت کدو تنبل پای را پیش‌بینی کند. احتمالاً می‌توانید همین روند را برای تمام انواع کدو تکرار کنید، اما این کار خسته‌کننده خواهد بود. حالا بیایید یاد بگیریم چگونه تنوع کدو را در مدل خود لحاظ کنیم! +🎃 تبریک! شما به تازگی مدل‌هایی ساختید که می‌تواند به پیش‌بینی قیمت کدو حلوایی پای کمک کند. احتمالا می‌توانید همین رویه را برای تمام انواع کدو تکرار کنید، اما این کار خسته‌کننده است. حالا بیایید یاد بگیریم چگونه تنوع کدو را در مدل خود در نظر بگیریم! ## ویژگی‌های دسته‌ای -در دنیای ایده‌آل، می‌خواهیم بتوانیم قیمت‌ها را برای انواع مختلف کدو با استفاده از همان مدل پیش‌بینی کنیم. اما ستون `Variety` کمی متفاوت از ستون‌هایی مثل `Month` است، چون حاوی مقادیر غیرعددی است. چنین ستون‌هایی **دسته‌ای** نامیده می‌شوند. +در دنیای ایده‌آل، می‌خواهیم قادر باشیم قیمت‌ها را برای گونه‌های مختلف کدو با استفاده از یک مدل پیش‌بینی کنیم. با این حال، ستون `Variety` کمی متفاوت از ستون‌هایی مانند `Month` است، زیرا شامل مقادیر غیرعددی است. چنین ستون‌هایی را **دسته‌ای** می‌نامند. [![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") -> 🎥 برای دیدن یک ویدیوی کوتاه درباره استفاده از ویژگی‌های دسته‌ای، روی تصویر بالا کلیک کنید. +> 🎥 برای دیدن ویدیو کوتاه درباره استفاده از ویژگی‌های دسته‌ای، روی تصویر بالا کلیک کنید. -در اینجا می‌بینید که قیمت متوسط چگونه به نوع کدو بستگی دارد: +در اینجا می‌بینید که قیمت متوسط چطور به تنوع بستگی دارد: Average price by variety -برای لحاظ کردن نوع کدو، ابتدا باید آن را به شکل عددی تبدیل کنیم، یا **رمزگذاری** کنیم. چند روش برای این کار وجود دارد: +برای درنظر گرفتن تنوع، ابتدا باید آن را به فرم عددی تبدیل کنیم، یا آن را **کدگذاری** کنیم. چند روش مختلف برای این کار وجود دارد: -* رمزگذاری ساده عددی یک جدول از انواع مختلف ایجاد می‌کند، و سپس نام نوع را با اندیس آن در آن جدول جایگزین می‌کند. این ایده بهترین گزینه برای رگرسیون خطی نیست، چون رگرسیون خطی مقدار عددی اندیس را گرفته و با ضریب خاصی ضرب کرده و به نتیجه اضافه می‌کند. در مورد ما، رابطه بین شماره اندیس و قیمت به وضوح غیرخطی است، حتی اگر مطمئن شویم که اندیس‌ها به ترتیب خاصی مرتب شده‌اند. -* **رمزگذاری تک‌گرمی (one-hot encoding)** ستون `Variety` را با ۴ ستون مختلف جایگزین می‌کند، یکی برای هر نوع کدو. هر ستون شامل `1` است اگر ردیف مربوطه از آن نوع باشد و `0` در غیر این صورت. این یعنی در رگرسیون خطی چهار ضریب وجود دارد، یکی برای هر نوع کدو، که مسئول "قیمت شروع" (یا به عبارت دقیق‌تر "قیمت اضافی") برای آن نوع خاص است. +* **کدگذاری عددی ساده** جدولی از انواع مختلف ایجاد می‌کند و سپس نام تنوع را با یک اندیس در آن جدول جایگزین می‌کند. این ایده خوبی برای رگرسیون خطی نیست، چون رگرسیون خطی مقدار عددی واقعی اندیس را گرفته و آن را ضرب در ضریبی به نتیجه اضافه می‌کند. در مورد ما، رابطه بین شماره اندیس و قیمت واضحاً غیرخطی است، حتی اگر مطمئن شویم که اندیس‌ها به روشی خاص مرتب شده‌اند. +* **کدگذاری یک داغ (one-hot encoding)** ستون `Variety` را با ۴ ستون مختلف جایگزین می‌کند، یکی برای هر تنوع. هر ستون شامل `1` خواهد بود اگر سطر مربوطه متعلق به آن تنوع باشد و در غیر این صورت `0` قرار می‌دهد. این بدان معناست که در رگرسیون خطی چهار ضریب وجود خواهد داشت، یکی برای هر نوع کدو، که مسئول "قیمت شروع" (یا بهتر است بگوییم "قیمت اضافی") برای آن نوع خاص است. -کد زیر نشان می‌دهد چگونه می‌توان یک نوع کدو را با روش one-hot کدگذاری کرد: +کد زیر نشان می‌دهد چگونه می‌توان تنوع را به صورت one-hot کدگذاری کرد: ```python pd.get_dummies(new_pumpkins['Variety']) @@ -302,14 +324,14 @@ pd.get_dummies(new_pumpkins['Variety']) 1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -برای آموزش رگرسیون خطی با استفاده از نوع کدو 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) -# تنظیم و آموزش خط لوله +# راه‌اندازی و آموزش خط لوله pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) -# پیش‌بینی نتایج برای داده‌های آزمون +# پیش‌بینی نتایج برای داده‌های تست pred = pipeline.predict(X_test) -# محاسبه MSE و تعیین ضریب -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +# محاسبه RMSE و ضریب تعیین +rmse = mean_squared_error(y_test, pred, squared=False) +print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)') score = pipeline.score(X_train,y_train) print('Model determination: ', score) ``` -این باید بهترین ضریب تعیین حدود ۹۷٪ و 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](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نواقصی باشند. سند اصلی به زبان بومی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده شود. ما مسئول هیچ گونه سوءتفاهم یا تفسیر نادرستی که ناشی از استفاده از این ترجمه باشد، نیستیم. +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. هرچند ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نواقصی باشند. سند اصلی به زبان اصلی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما مسئول هیچ گونه سوءتفاهم یا برداشت نادرست ناشی از استفاده از این ترجمه نیستیم. \ No newline at end of file diff --git a/translations/fa/2-Regression/3-Linear/solution/notebook.ipynb b/translations/fa/2-Regression/3-Linear/solution/notebook.ipynb index ca07cd4ab..614fffbc2 100644 --- a/translations/fa/2-Regression/3-Linear/solution/notebook.ipynb +++ b/translations/fa/2-Regression/3-Linear/solution/notebook.ipynb @@ -6,12 +6,12 @@ "source": [ "## رگرسیون خطی و چندجمله‌ای برای قیمت‌گذاری کدو تنبل - درس ۳\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" ] }, { @@ -779,22 +781,25 @@ "score = pipeline.score(X_train,y_train)\n", "print('Model determination: ', score)\n", "\n", - "plt.scatter(X_test,y_test)\n", - "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))" + "X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n", + "y_range = pipeline.predict(X_range)\n", + "\n", + "plt.scatter(X_test, y_test)\n", + "plt.plot(X_range, y_range)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### انواع کدگذاری\n", + "### انواع رمزگذاری\n", "\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\n**سلب مسئولیت**: \nاین سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما در پی دقت هستیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است دارای خطاها یا نادرستی‌هایی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما مسئول هیچگونه سوءتفاهم یا برداشت نادرستی که ناشی از استفاده از این ترجمه باشد، نیستیم.\n\n" ] } ], @@ -1102,13 +1107,7 @@ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" } }, - "orig_nbformat": 2, - "coopTranslator": { - "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", - "translation_date": "2025-09-04T01:04:40+00:00", - "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", - "language_code": "fa" - } + "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2 diff --git a/translations/ur/.co-op-translator.json b/translations/ur/.co-op-translator.json index eba66da56..aec15a2a9 100644 --- a/translations/ur/.co-op-translator.json +++ b/translations/ur/.co-op-translator.json @@ -36,8 +36,8 @@ "language_code": "ur" }, "1-Introduction/4-techniques-of-ML/README.md": { - "original_hash": "9d91f3af3758fdd4569fb410575995ef", - "translation_date": "2025-09-06T08:52:31+00:00", + "original_hash": "84b1715a6be62ef1697351dcc5d7b567", + "translation_date": "2026-04-26T19:51:25+00:00", "source_file": "1-Introduction/4-techniques-of-ML/README.md", "language_code": "ur" }, @@ -90,8 +90,8 @@ "language_code": "ur" }, "2-Regression/3-Linear/README.md": { - "original_hash": "26c53a922f1f1e8542b0ea41ff52221a", - "translation_date": "2026-04-20T19:46:52+00:00", + "original_hash": "8b776e731c35b171d316d01d0e7b1369", + "translation_date": "2026-04-26T19:50:52+00:00", "source_file": "2-Regression/3-Linear/README.md", "language_code": "ur" }, @@ -107,6 +107,12 @@ "source_file": "2-Regression/3-Linear/solution/Julia/README.md", "language_code": "ur" }, + "2-Regression/3-Linear/solution/notebook.ipynb": { + "original_hash": "6781223ffbe8cfdaa38d0200f08e1288", + "translation_date": "2026-04-26T19:48:11+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "ur" + }, "2-Regression/4-Logistic/README.md": { "original_hash": "abf86d845c84330bce205a46b382ec88", "translation_date": "2025-09-06T08:44:16+00:00", diff --git a/translations/ur/1-Introduction/4-techniques-of-ML/README.md b/translations/ur/1-Introduction/4-techniques-of-ML/README.md index 3b53aa732..dbd08c4f4 100644 --- a/translations/ur/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/ur/1-Introduction/4-techniques-of-ML/README.md @@ -1,117 +1,117 @@ # مشین لرننگ کی تکنیکیں -مشین لرننگ ماڈلز بنانے، استعمال کرنے، اور ان کے ڈیٹا کو برقرار رکھنے کا عمل دیگر ترقیاتی ورک فلو سے بہت مختلف ہے۔ اس سبق میں، ہم اس عمل کو واضح کریں گے اور وہ اہم تکنیکیں بیان کریں گے جو آپ کو جاننی چاہئیں۔ آپ: +مشین لرننگ ماڈلز بنانے، استعمال کرنے، اور انہیں برقرار رکھنے کا عمل، اور وہ ڈیٹا جو وہ استعمال کرتے ہیں، بہت سے دوسرے ترقیاتی ورک فلو سے بالکل مختلف ہے۔ اس سبق میں، ہم اس عمل کو آسان بنائیں گے، اور آپ کو بنیادی تکنیکیں بتائیں گے جو آپ کو جاننی چاہئیں۔ آپ: -- مشین لرننگ کے بنیادی عمل کو اعلیٰ سطح پر سمجھیں گے۔ +- مشین لرننگ کے بنیادی عمل کو ایک اعلی سطح پر سمجھیں گے۔ - بنیادی تصورات جیسے 'ماڈلز'، 'پیش گوئیاں'، اور 'ٹریننگ ڈیٹا' کو دریافت کریں گے۔ -## [لیکچر سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/) +## [سبق سے پہلے کوئز](https://ff-quizzes.netlify.app/en/ml/) -[![مشین لرننگ کے ابتدائی اصول - مشین لرننگ کی تکنیکیں](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "مشین لرننگ کے ابتدائی اصول - مشین لرننگ کی تکنیکیں") +[![بازوکے لئے ML - مشین لرننگ کی تکنیکیں](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](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' لگ سکتے ہیں)، آپ ٹیسٹ ڈیٹا کا استعمال کرتے ہوئے ماڈل کی کارکردگی کو جانچ کر اس کے معیار کا جائزہ لے سکیں گے۔ یہ ڈیٹا اصل ڈیٹا کا ایک ذیلی سیٹ ہے جسے ماڈل نے پہلے کبھی تجزیہ نہیں کیا۔ آپ اپنے ماڈل کے معیار کے بارے میں میٹرکس کی ایک ٹیبل پرنٹ کر سکتے ہیں۔ +جب تربیت کا عمل مکمل ہو جاتا ہے (بڑے ماڈلز کو تربیت دینے میں کئی تکرار یا 'ایپوکس' لگ سکتے ہیں)، تو آپ ٹیسٹ ڈیٹا استعمال کر کے ماڈل کی معیار کا جائزہ لے سکتے ہیں۔ یہ ڈیٹا اصل ڈیٹا کا وہ حصہ ہوتا ہے جسے ماڈل نے پہلے کبھی نہیں دیکھا۔ آپ ماڈل کی کارکردگی کے بارے میں میٹرکس کی ایک جدول پرنٹ کر سکتے ہیں۔ 🎓 **ماڈل فٹنگ** -مشین لرننگ کے سیاق و سباق میں، ماڈل فٹنگ اس ماڈل کے بنیادی فنکشن کی درستگی کو ظاہر کرتا ہے کیونکہ یہ ڈیٹا کا تجزیہ کرنے کی کوشش کرتا ہے جس سے یہ واقف نہیں ہے۔ +مشین لرننگ کے تناظر میں، ماڈل فٹنگ اس ماڈل کی بنیادی فنکشن کی درستگی کو کہتے ہیں جب وہ ایسے ڈیٹا کا تجزیہ کرتا ہے جس سے وہ واقف نہیں ہوتا۔ -🎓 **انڈر فٹنگ** اور **اوور فٹنگ** عام مسائل ہیں جو ماڈل کے معیار کو کم کرتے ہیں، کیونکہ ماڈل یا تو کافی اچھا فٹ نہیں ہوتا یا بہت زیادہ فٹ ہوتا ہے۔ یہ ماڈل کو پیش گوئیاں کرنے کا سبب بنتا ہے جو یا تو اس کے ٹریننگ ڈیٹا کے ساتھ بہت زیادہ یا بہت کم ہم آہنگ ہوتی ہیں۔ ایک اوور فٹ ماڈل ٹریننگ ڈیٹا کو بہت اچھی طرح سے پیش گوئی کرتا ہے کیونکہ اس نے ڈیٹا کی تفصیلات اور شور کو بہت اچھی طرح سے سیکھ لیا ہے۔ ایک انڈر فٹ ماڈل درست نہیں ہے کیونکہ یہ نہ تو اپنے ٹریننگ ڈیٹا کا درست تجزیہ کر سکتا ہے اور نہ ہی اس ڈیٹا کا جو اس نے ابھی تک 'دیکھا' نہیں ہے۔ +🎓 **انڈر فٹنگ** اور **اوور فٹنگ** عام مسائل ہیں جو ماڈل کی معیار کو خراب کرتے ہیں، کیونکہ ماڈل یا تو اچھی طرح فٹ نہیں ہوتا یا بہت زیادہ فٹ ہو جاتا ہے۔ اس کی وجہ سے ماڈل کی پیش گوئیاں یا تو تربیتی ڈیٹا کے ساتھ بہت قریب ہوتی ہیں یا بہت دور۔ ایک اوورفٹ ماڈل تربیتی ڈیٹا کو بہت اچھے طریقے سے پیش گوئی کرتا ہے کیونکہ اس نے ڈیٹا کی تفصیلات اور شور کو بہت اچھی طرح سیکھ لیا ہوتا ہے۔ ایک انڈر فٹ ماڈل درست نہیں ہوتا کیونکہ وہ نہ اپنے تربیتی ڈیٹا کو درست تجزیہ کر پاتا ہے اور نہ ایسے ڈیٹا کو جو اس نے ابھی دیکھا نہ ہو۔ -![اوور فٹنگ ماڈل](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) -> انفوگرافک [Jen Looper](https://twitter.com/jenlooper) کے ذریعے +![اوورفٹنگ ماڈل](../../../../translated_images/ur/overfitting.1c132d92bfd93cb6.webp) +> انفرافک آف جن لوپر کی طرف سے ([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 @@ --- + **ڈسکلیمر**: -یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔ \ No newline at end of file +یہ دستاویز AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے ترجمہ کی گئی ہے۔ اگرچہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم آگاہ رہیں کہ خودکار تراجم میں غلطیاں یا بے دقتیاں ہو سکتی ہیں۔ اصل دستاویز اپنی مادری زبان میں قابلِ اعتبار ماخذ سمجھی جانی چاہیے۔ اہم معلومات کے لیے پیشہ ور انسانی ترجمہ تجویز کیا جاتا ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔ + \ No newline at end of file diff --git a/translations/ur/2-Regression/3-Linear/README.md b/translations/ur/2-Regression/3-Linear/README.md index 41eb43c7d..aa96d0ef6 100644 --- a/translations/ur/2-Regression/3-Linear/README.md +++ b/translations/ur/2-Regression/3-Linear/README.md @@ -1,97 +1,97 @@ -# Scikit-learn کا استعمال کرتے ہوئے ریگریشن ماڈل بنائیں: ریگریشن کے چار طریقے +# سکائیکیٹ لرن کا استعمال کرتے ہوئے ریگریشن ماڈل بنائیں: ریگریشن چار طریقے ## ابتدائی نوٹ -لکیری ریگریشن اس وقت استعمال ہوتی ہے جب ہم ایک **عددی قدر** کی پیش گوئی کرنا چاہتے ہیں (مثلاً، گھر کی قیمت، درجہ حرارت، یا فروخت)۔ -یہ اس طرح کام کرتی ہے کہ ایک سیدھی لائن تلاش کی جاتی ہے جو انپٹ خصوصیات اور آؤٹ پٹ کے درمیان تعلق کو بہترین انداز میں ظاہر کرے۔ +لینیئر ریگریشن اس وقت استعمال ہوتی ہے جب ہم کسی **عدداتی قیمت** (مثلاً، گھر کی قیمت، درجہ حرارت، یا فروخت) کی پیش گوئی کرنا چاہتے ہوں۔ +یہ کام ان پٹ خصوصیات اور آؤٹ پٹ کے درمیان تعلق کی بہترین نمائندگی کرنے والی سیدھی لائن تلاش کرکے کرتا ہے۔ -اس سبق میں، ہم بنیادی تصور کو سمجھنے پر توجہ دیں گے اس سے پہلے کہ ہم مزید ترقی یافتہ ریگریشن تکنیکوں کو دریافت کریں۔ -![لکیری بمقابلہ کثیر رکنی ریگریشن کی انفوگرافک](../../../../translated_images/ur/linear-polynomial.5523c7cb6576ccab.webp) -> انفوگرافک بنائی گئی توسط [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [سبق سے پہلے کا کوئز](https://ff-quizzes.netlify.app/en/ml/) +اس سبق میں، ہم تصور کو سمجھنے پر توجہ مرکوز کرتے ہیں اس سے پہلے کہ جدید ریگریشن تکنیکوں کو دریافت کریں۔ +![لینیئر بمقابلہ پولینومیئل ریگریشن انفورگرافک](../../../../translated_images/ur/linear-polynomial.5523c7cb6576ccab.webp) +> انفورگرافک بذریعہ [داسانی مادپلی](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 کے ذریعے تصویری شکل میں بھی دیکھا ہے۔ +اب تک آپ نے یہ دریافت کیا ہے کہ ریگریشن کیا ہے، ساتھ ہی ہم نے کدو کی قیمتوں کے ڈیٹا سے نمونہ لیا ہوا ڈیٹا استعمال کیا ہے جسے ہم پورے سبق میں استعمال کریں گے۔ آپ نے اسے میٹ پلوٹ لائبراڑی کا استعمال کرتے ہوئے ویژولائز بھی کیا ہے۔ -اب آپ مشین لرننگ کے لیے ریگریشن میں مزید گہرائی میں جانے کے لیے تیار ہیں۔ جب کہ بصری نمائندگی آپ کو ڈیٹا سمجھنے میں مدد دیتی ہے، مشین لرننگ کی اصل طاقت _ماڈلز کی تربیت_ میں ہے۔ ماڈلز ماضی کے ڈیٹا پر تربیت دیتے ہیں تاکہ خود بخود ڈیٹا کی انحصاریت کو سمجھ سکیں، اور یہ آپ کو نئے ڈیٹا کے لیے پیش گوئی کرنے کی اجازت دیتے ہیں جو ماڈل نے پہلے نہیں دیکھا۔ +اب آپ مشین لرننگ کے لیے ریگریشن میں گہرائی میں جانے کے لیے تیار ہیں۔ جب کہ ویژولائزیشن آپ کو ڈیٹا کو سمجھنے کے قابل بناتی ہے، مشین لرننگ کی اصل طاقت _ماڈلز کی تربیت_ میں ہے۔ ماڈلز تاریخی ڈیٹا پر تربیت دیے جاتے ہیں تاکہ خودکار طریقے سے ڈیٹا کی انحصاریوں کو پکڑ سکیں، اور یہ آپ کو نئے ڈیٹا کے لیے نتائج پیش گوئی کرنے کی اجازت دیتے ہیں، جو ماڈل نے پہلے کبھی نہیں دیکھا۔ -اس سبق میں، آپ دو قسم کی ریگریشنز کے بارے میں مزید جانیں گے: _بنیادی لکیری ریگریشن_ اور _کثیر رکنی ریگریشن_، اور ان تکنیکوں کے پیچھے کچھ ریاضی بھی سیکھیں گے۔ یہ ماڈلز ہمیں مختلف انپٹ ڈیٹا کے مطابق کدو کی قیمت کی پیش گوئی کرنے کی اجازت دیں گے۔ +اس سبق میں، آپ ریگریشن کی دو اقسام کے بارے میں مزید جانیں گے: _بنیادی لینیئر ریگریشن_ اور _پولینومیئل ریگریشن_، ساتھ ہی ان تکنیکوں کے پیچھے موجود کچھ ریاضی بھی۔ یہ ماڈلز ہمیں مختلف ان پٹ ڈیٹا کے مطابق کدو کی قیمتوں کی پیشنگوئی کرنے کی اجازت دیں گے۔ -[![مشین لرننگ مبتدیوں کے لیے - لکیری ریگریشن کو سمجھنا](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "مشین لرننگ مبتدیوں کے لیے - لکیری ریگریشن کو سمجھنا") +[![مشق کے لیے مشین لرننگ - لینیئر ریگریشن کو سمجھنا](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](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` ہو۔ > >![ڈھلوان کا حساب لگائیں](../../../../translated_images/ur/slope.f3c9d5910ddbfcf9.webp) > -> سب سے پہلے، ڈھلوان `b` کا حساب لگائیں۔ انفوگرافک توسط [Jen Looper](https://twitter.com/jenlooper) +> سب سے پہلے، ڈھلوان `b` کو حساب کریں۔ انفورگرافک بذریعہ [جین لوپر](https://twitter.com/jenlooper) > -> دوسرے الفاظ میں، اور ہمارے کدو کے ڈیٹا کے آغاز کے سوال کی طرف اشارہ کرتے ہوئے: "ہر ماہ فی بوشل کدو کی قیمت کی پیش گوئی کریں"، `X` قیمت کی طرف اشارہ کرے گا اور `Y` فروخت کے مہینے کی طرف۔ +> دوسرے الفاظ میں، اور ہمارے کدو کے ڈیٹا کے اصل سوال کی طرف اشارہ کرتے ہوئے: "مہینے کے حساب سے فی بشل کدو کی قیمت کی پیشنگوئی کریں"، `X` قیمت کی نمائندگی کرے گا اور `Y` فروخت کے مہینے کی نمائندگی کرے گا۔ > >![مساوات مکمل کریں](../../../../translated_images/ur/calculation.a209813050a1ddb1.webp) > -> 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 ---|-------|-----------|---------|------|---------|-----------|------------|------- @@ -101,36 +101,36 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri 73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 -> ڈیٹا صاف کرنے کا کوڈ [`notebook.ipynb`](notebook.ipynb) میں دستیاب ہے۔ ہم نے پچھلے سبق کی طرح صفائی کے اقدامات کیے ہیں، اور `DayOfYear` کالم نچے دیے گئے اظہار کے ذریعے حساب کیا ہے: +> ڈیٹا صاف کرنے کا کوڈ [`notebook.ipynb`](notebook.ipynb) میں دستیاب ہے۔ ہم نے پچھلے سبق کی طرح یہی صفائی کے اقدامات کیے ہیں، اور `DayOfYear` کالم کو درج ذیل اظہار سے حساب کیا ہے: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` -اب جب کہ آپ کو لکیری ریگریشن کے پیچھے کے ریاضی کا فہم حاصل ہے، آئیے ایک ریگریشن ماڈل بنائیں تاکہ دیکھ سکیں کہ آیا ہم پیش گوئی کر سکتے ہیں کہ کدو کے کون سے پیکج کی قیمت سب سے اچھی ہوگی۔ کوئی جو تعطیلات کے لیے کدو خرید رہا ہو، وہ اس معلومات کو حاصل کرنا چاہے گا تاکہ اپنے آرڈر کو بہتر بنا سکے۔ +اب جبکہ آپ کو لینیئر ریگریشن کے پیچھے ریاضی کی سمجھ ہے، آئیں ایک ریگریشن ماڈل بنائیں تاکہ دیکھ سکیں کہ ہم پیش گوئی کر سکتے ہیں کہ کس کدو کے پیکیج کی قیمت سب سے بہتر ہوگی۔ کوئی جو تعطیلات کے کدو کی پیٹیچ کے لیے کدو خرید رہا ہو، اسے یہ معلومات اپنی خریداری کو بہتر بنانے کے لیے فائدہ دے سکتی ہے۔ -## ربط کی تلاش +## تعلق کی تلاش -[![مشین لرننگ مبتدیوں کے لیے - ربط کی تلاش: لکیری ریگریشن کی کنجی](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "مشین لرننگ مبتدیوں کے لیے - ربط کی تلاش: لکیری ریگریشن کی کنجی") +[![مشق کے لیے مشین لرننگ - تعلق کی تلاش: لینیئر ریگریشن کی کنجی](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "مشق کے لیے مشین لرننگ - تعلق کی تلاش: لینیئر ریگریشن کی کنجی") -> 🎥 اوپر دی گئی تصویر پر کلک کریں تاکہ ربط کا مختصر ویڈیو جائزہ دیکھ سکیں۔ +> 🎥 اوپر تصویر پر کلک کریں تعلق کے بارے میں مختصر ویڈیو جائزہ کے لیے۔ -پچھلے سبق میں آپ نے شاید دیکھا ہو کہ مختلف مہینوں کی اوسط قیمت کچھ یوں دکھائی دیتی ہے: +پچھلے سبق میں آپ نے شاید دیکھا ہوگا کہ مختلف مہینوں کے لیے اوسط قیمت اس طرح نظر آتی ہے: -مہینوں کے مطابق اوسط قیمت +مہینے کے اعتبار سے اوسط قیمت -یہ ظاہر کرتا ہے کہ یہاں ربط موجود ہونا چاہیے، اور ہم کوشش کر سکتے ہیں کہ لکیری ریگریشن ماڈل تیار کریں تاکہ `Month` اور `Price` کے درمیان یا `DayOfYear` اور `Price` کے درمیان تعلق کی پیش گوئی کریں۔ یہ اسکیٹر پلاٹ دکھاتا ہے جو بعد والے تعلق کو ظاہر کرتا ہے: +یہ اشارہ دیتا ہے کہ کوئی تعلق ہونا چاہیے، اور ہم لینیئر ریگریشن ماڈل کی تربیت کر کے `Month` اور `Price` یا `DayOfYear` اور `Price` کے درمیان تعلق پیش گوئی کر سکتے ہیں۔ ذیل میں وہ سکریٹر پلاٹ ہے جو بعد والے تعلق کو ظاہر کرتا ہے: -قیمت بمقابلہ دنِ سال کا اسکیٹر پلاٹ +قیمت بمقابلہ سال کا دن کا سکریٹر پلاٹ -آئیے `corr` فنکشن استعمال کرکے دیکھتے ہیں کہ ربط کیا ہے: +آئیے `corr` فنکشن کا استعمال کر کے دیکھتے ہیں کیا تعلق ہے: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` -ایسا لگتا ہے کہ ربط تھوڑا کم ہے، مہینے کے لیے -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()): ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` -قیمت بمقابلہ دنِ سال کا رنگین اسکیٹر پلاٹ +قیمت بمقابلہ سال کے دن کا سکریٹر پلاٹ (رنگ کے ساتھ) -ہماری تفتیش بتاتی ہے کہ مختلف اقسام کا مجموعی قیمت پر زیادہ اثر ہے بجائے اصلی فروخت کی تاریخ کے۔ ہم اس کو بار گراف سے دیکھ سکتے ہیں: +ہماری تحقیق سے ظاہر ہوتا ہے کہ مجموعی قیمت پر چیز کی قسم کا زیادہ اثر ہوتا ہے بنسبت اصل فروخت کی تاریخ کے۔ ہم اسے بار گراف کے ذریعے بھی دیکھ سکتے ہیں: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') @@ -150,32 +150,32 @@ new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') قسم کے مقابلے قیمت کا بار گراف -آئیے اس لمحے صرف ایک کدو کی قسم، 'pie type' پر توجہ دیں اور دیکھیں کہ تاریخ کا قیمت پر کیا اثر ہے: +چند لمحے کے لیے ہم صرف ایک کدو کی قسم، 'پائی ٹائپ' پر توجہ مرکوز کرتے ہیں، اور دیکھتے ہیں کہ تاریخ کا قیمت پر کیا اثر ہے: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` -قیمت بمقابلہ دنِ سال کا اسکیٹر پلاٹ +قیمت بمقابلہ سال کے دن کا سکریٹر پلاٹ -اگر ہم اب `corr` فنکشن استعمال کرکے `Price` اور `DayOfYear` کے درمیان ربط کا حساب لگائیں تو ہمیں تقریباً `-0.27` ملے گا—جوبتاتا ہے کہ پیش گوئی کرنے والا ماڈل تربیت دینا معقول ہے۔ +اگر ہم اب `Price` اور `DayOfYear` کے درمیان تعلق `corr` فنکشن کے ذریعے نکالیں، تو ہمیں کچھ ایسا ملے گا: `-0.27` — جس کا مطلب ہے کہ پیش گو ماڈل کی تربیت مفید ہے۔ -> لکیری ریگریشن ماڈل تربیت دینے سے پہلے، یہ ضروری ہے کہ ہمارا ڈیٹا صاف ہو۔ لکیری ریگریشن خالی اقدار کے ساتھ بہتر کام نہیں کرتی، لہٰذا تمام خالی جگہوں کو دور کرنا منطقی ہے: +> لینیئر ریگریشن ماڈل کو تربیت دینے سے پہلے، یہ ضروری ہے کہ ہمارا ڈیٹا صاف ہو۔ لینیئر ریگریشن گمشدہ اقدار کے ساتھ اچھا کام نہیں کرتا، اس لیے تمام خالی سیلز کو ہٹانا مناسب ہے: ```python pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` -ایک اور طریقہ یہ ہوگا کہ ان خالی اقدار کو متعلقہ کالم کی اوسط قیمت سے بھر دیا جائے۔ +دوسری حکمت عملی یہ ہو سکتی ہے کہ ان خالی اقدار کو متعلقہ کالم کے اوسط سے بھر دیا جائے۔ -## سادہ لکیری ریگریشن +## سادہ لینیئر ریگریشن -[![مشین لرننگ مبتدیوں کے لیے - Scikit-learn استعمال کرتے ہوئے لکیری اور کثیر رکنی ریگریشن](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "مشین لرننگ مبتدیوں کے لیے - Scikit-learn استعمال کرتے ہوئے لکیری اور کثیر رکنی ریگریشن") +[![مشق کے لیے مشین لرننگ - سکائیکیٹ لرن کا استعمال کرتے ہوئے لینیئر اور پولینومیئل ریگریشن](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](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) rmse = np.sqrt(mean_squared_error(y_test,pred)) print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') ``` - -ہمارا 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 ہے، جو کہ بہت کم ہے۔ + +ہم ٹیسٹ ڈیٹا کو رگریشن لائن کے ساتھ پلاٹ بھی کر سکتے ہیں تاکہ بہتر طور پر دیکھ سکیں کہ ہمارے کیس میں رگریشن کس طرح کام کرتی ہے: ```python plt.scatter(X_test,y_test) plt.plot(X_test,pred) ``` - + Linear regression -## پولینومیل ریگریشن +## پولینومیئل رگریشن -ریگریشن کی ایک اور قسم پولینومیل ریگریشن ہے۔ جب کبھی متغیرات کے درمیان خطی تعلق ہوتا ہے — جیسے جتنا زیادہ کدو حجم میں ہو، قیمت بھی زیادہ ہو — بعض اوقات یہ تعلقات سیدھی لائن یا سطح کی حیثیت سے ظاہر نہیں کیے جا سکتے۔ +لکیری رگریشن کی ایک قسم پولینومیئل رگریشن ہے۔ جہاں کبھی کبھار متغیرات کے درمیان لکیری تعلق ہوتا ہے — جتنا بڑا کدو حجم میں ہو، اتنی زیادہ قیمت — وہاں یہ تعلقات ہمیشہ ایک ہموار سطح یا سیدھی لائن کی صورت میں ہونے لازمی نہیں ہیں۔ -✅ یہاں [کچھ مزید مثالیں](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 @@ -256,61 +256,83 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` - -`PolynomialFeatures(2)` کے استعمال کا مطلب ہے کہ ہم ان پٹ ڈیٹا سے تمام دوسرے درجے کے پولینومیل شامل کریں گے۔ ہمارے کیس میں یہ صرف `DayOfYear`² ہوگا، لیکن اگر دو ان پٹ ویریبلز X اور Y ہوں، تو یہ X²، XY اور Y² شامل کرے گا۔ ہم اگر چاہیں تو زیادہ درجے کے پولینومیل بھی استعمال کر سکتے ہیں۔ -پائپ لائنز کو اسی طرح استعمال کیا جا سکتا ہے جیسے `LinearRegression` آبجیکٹ، یعنی ہم پائپ لائن کو `fit` کر سکتے ہیں، اور پھر `predict` سے پیش گوئی حاصل کر سکتے ہیں۔ یہاں ایک گراف ہے جو ٹیسٹ ڈیٹا اور اندازہ شدہ منحنی دکھاتا ہے: +`PolynomialFeatures(2)` استعمال کرنے کا مطلب ہے کہ ہم ان پٹ ڈیٹا کے تمام دوم درجے کے پولینومیلز شامل کریں گے۔ ہمارے کیس میں یہ صرف `DayOfYear`2 ہوگا، لیکن اگر دو ان پٹ متغیرات X اور Y ہوں، تو یہ X2، XY اور Y2 شامل کرے گا۔ ہم اعلیٰ درجے کے پولینومیلز بھی استعمال کر سکتے ہیں اگر چاہیں۔ + +پائپ لائنز کو اصل `LinearRegression` آبجیکٹ کی طرح استعمال کیا جا سکتا ہے، یعنی ہم پائپ لائن کو `fit` کر سکتے ہیں، اور پھر `predict` سے پیش گوئی کے نتائج حاصل کر سکتے ہیں: + +```python +pred = pipeline.predict(X_test) + +rmse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +سموتھ اپروکسیمیشن کرف کو پلاٹ کرنے کے لیے، ہم `np.linspace` استعمال کرتے ہیں تاکہ ان پٹ قدروں کی یکساں رینج بنائی جائے، بجائے اس کے کہ بےترتیب ٹیسٹ ڈیٹا پر براہ راست پلاٹنگ کریں (جو جگزگ لائن پیدا کرتا): + +```python +X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1) +y_range = pipeline.predict(X_range) + +plt.scatter(X_test, y_test) +plt.plot(X_range, y_range) +``` + +یہاں گراف ہے جو ٹیسٹ ڈیٹا اور اپروکسیمیشن کرف دکھاتا ہے: Polynomial regression -پولینومیل ریگریشن سے ہمیں تھوڑا سا کم MSE اور زیادہ determination ملتا ہے، لیکن نمایاں طور پر نہیں۔ ہمیں دیگر فیچرز کو بھی مدنظر لینا ہوگا! +پولینومیئل رگریشن استعمال کرتے ہوئے، ہم کچھ کم RMSE اور زیادہ determination حاصل کر سکتے ہیں، لیکن خاص فرق نہیں۔ ہمیں دیگر فیچرز کو بھی مدنظر رکھنا ہوگا! -> آپ دیکھ سکتے ہیں کہ کم سے کم کدو کی قیمتیں ہالووین کے آس پاس دیکھی جاتی ہیں۔ آپ اس کی وضاحت کیسے کریں گے؟ +> آپ دیکھ سکتے ہیں کہ سب سے کم کدو کی قیمتیں تقریباً ہالووین کے قریب دیکھی جاتی ہیں۔ آپ اسے کیسے سمجھائیں گے؟ -🎃 مبارک ہو، آپ نے ابھی ایک ماڈل بنایا ہے جو کدو کی قیمت پیش گوئی کرنے میں مدد دے سکتا ہے۔ آپ شاید یہی طریقہ کار تمام کدو کی اقسام کے لیے دہرائیں، لیکن یہ بہت تھکا دینے والا ہوگا۔ اب سیکھتے ہیں کہ اپنے ماڈل میں کدو کی اقسام کو کیسے شامل کریں! +🎃 مبارک ہو، آپ نے ایک ایسا ماڈل بنایا ہے جو پائی کدو کی قیمت پیش کرنے میں مدد کر سکتا ہے۔ شاید آپ یہ عمل تمام کدو کی اقسام کے لیے دہرا سکتے ہیں، لیکن یہ تھوڑا مشکل ہوگا۔ اب سیکھتے ہیں کہ کس طرح اپنے ماڈل میں کدو کی قسم کو مدنظر رکھیں! -## زمرہ بندی شدہ خصوصیات +## زمرہ وار فیچرز -آئیڈیل دنیا میں، ہم ایک ہی ماڈل استعمال کر کے مختلف کدو کی اقسام کی قیمتیں پیش گوئی کرنا چاہتے ہیں۔ تاہم، `Variety` کالم `Month` جیسے کالموں سے مختلف ہے کیونکہ اس میں غیر عددی قدریں ہوتی ہیں۔ ایسے کالمز کو **زمرہ بندی شدہ** (categorical) کہا جاتا ہے۔ +ایک مثالی دنیا میں، ہم چاہتے ہیں کہ مختلف کدو کی اقسام کی قیمتیں ایک ہی ماڈل سے پیش کی جا سکیں۔ تاہم، `Variety` کالم کچھ مختلف ہے جیسے کہ `Month` کالم، کیونکہ اس میں عددی نہیں بلکہ غیر عددی اقدار ہوتی ہیں۔ ایسے کالمز کو **categorical** کہا جاتا ہے۔ [![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") -> 🎥 اوپر موجود تصویر پر کلک کریں زمرہ بندی شدہ فیچرز کے استعمال پر مختصر ویڈیو کے لیے۔ +> 🎥 اوپر کی تصویر پر کلک کریں تاکہ categorical فیچرز کے استعمال کا مختصر ویڈیو جائزہ دیکھا جا سکے۔ -یہاں ہم دیکھ سکتے ہیں کہ اوسط قیمت قسم پر کس طرح منحصر ہے: +یہاں دکھایا گیا ہے کہ اوسط قیمت قسم کے لحاظ سے کس طرح ہے: Average price by variety -قسم کو مدنظر رکھنے کے لیے، سب سے پہلے ہمیں اس کو عددی شکل میں تبدیل کرنا پڑے گا، یعنی **انکوڈ** کرنا ہوگا۔ اس کے لیے کئی طریقے ہیں: +قسم کو مدنظر رکھنے کے لیے، سب سے پہلے ہمیں اسے عددی شکل میں تبدیل یا **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 -----|-----------|-----------|--------------------------|---------- -70 | 0 | 0 | 0 | 1 -71 | 0 | 0 | 0 | 1 -... | ... | ... | ... | ... -1738 | 0 | 1 | 0 | 0 -1739 | 0 | 1 | 0 | 0 -1740 | 0 | 1 | 0 | 0 -1741 | 0 | 1 | 0 | 0 -1742 | 0 | 1 | 0 | 0 - -ون-ہوٹ انکوڈ شدہ قسم کو ان پٹ کے طور پر استعمال کرتے ہوئے لائنیر ریگریشن ٹرین کرنے کے لیے، ہمیں بس `X` اور `y` ڈیٹا کو صحیح طریقے سے initialize کرنا ہوگا: + + ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE +----|-----------|-----------|--------------------------|---------- +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +1741 | 0 | 1 | 0 | 0 +1742 | 0 | 1 | 0 | 0 + +لکیری رگریشن کو 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) -# پائپ لائن تیار کریں اور تربیت دیں +# پائپ لائن مرتب کریں اور تربیت دیں pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) -# ٹیسٹ ڈیٹا کے لیے نتائج کی پیش گوئی کریں +# تجرباتی ڈیٹا کے لیے نتائج کی پیش گوئی کریں pred = pipeline.predict(X_test) -# MSE اور تعیناتی کا حساب لگائیں -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +# RMSE اور تعیناتی کا حساب لگائیں +rmse = mean_squared_error(y_test, pred, squared=False) +print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)') score = pipeline.score(X_train,y_train) print('Model determination: ', score) ``` - -یہ ہمیں تقریباً 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) ہے۔ ## اسائنمنٹ @@ -382,6 +404,6 @@ print('Model determination: ', score) --- -**خبردار**: -اس دستاویز کا ترجمہ AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کا استعمال کرتے ہوئے کیا گیا ہے۔ اگرچہ ہم درستگی کی کوشش کرتے ہیں، براہ کرم آگاہ رہیں کہ خودکار تراجم میں غلطیاں یا غلط فہمیاں ہو سکتی ہیں۔ اصل دستاویز اپنی مادری زبان میں مستند ماخذ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ تجویز کیا جاتا ہے۔ ہم اس ترجمہ کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔ +**ڈس کلیمر**: +اس دستاویز کا ترجمہ AI ترجمہ سروس [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے کیا گیا ہے۔ اگرچہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم آگاہ رہیں کہ خودکار ترجموں میں غلطیاں یا عدم مطابقت ہو سکتی ہیں۔ اصل دستاویز کو اس کی مادری زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے پیشہ ورانہ انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے ہونے والی کسی بھی غلط فہمی یا بدفہمی کی ذمہ داری ہم پر عائد نہیں ہوتی۔ \ No newline at end of file diff --git a/translations/ur/2-Regression/3-Linear/solution/notebook.ipynb b/translations/ur/2-Regression/3-Linear/solution/notebook.ipynb index 7e62c5542..28413d292 100644 --- a/translations/ur/2-Regression/3-Linear/solution/notebook.ipynb +++ b/translations/ur/2-Regression/3-Linear/solution/notebook.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## کدو کی قیمت کے لیے لکیری اور کثیرالحدی رجعت - سبق 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" ] }, { @@ -779,22 +781,25 @@ "score = pipeline.score(X_train,y_train)\n", "print('Model determination: ', score)\n", "\n", - "plt.scatter(X_test,y_test)\n", - "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))" + "X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n", + "y_range = pipeline.predict(X_range)\n", + "\n", + "plt.scatter(X_test, y_test)\n", + "plt.plot(X_range, y_range)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### اقسام کو انکوڈ کرنا\n", + "### اقسام انکوڈنگ\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\n**ڈی ایس کلیمر**:\nاس دستاویز کا ترجمہ AI ترجمہ خدمت [Co-op Translator](https://github.com/Azure/co-op-translator) کے ذریعے کیا گیا ہے۔ جبکہ ہم درستگی کے لیے کوشاں ہیں، براہ کرم آگاہ رہیں کہ خودکار تراجم میں غلطیاں یا عدم تناسبات ہو سکتے ہیں۔ اصل دستاویز اپنی مادری زبان میں حتمی ماخذ سمجھی جانی چاہیے۔ اہم معلومات کے لیے پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تعبیرات کی ذمہ داری ہم قبول نہیں کرتے۔\n\n" ] } ], @@ -1102,13 +1107,7 @@ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" } }, - "orig_nbformat": 2, - "coopTranslator": { - "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", - "translation_date": "2025-08-29T14:41:32+00:00", - "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", - "language_code": "ur" - } + "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2 diff --git a/translations/zh-CN/.co-op-translator.json b/translations/zh-CN/.co-op-translator.json index b81184c3f..b052126f5 100644 --- a/translations/zh-CN/.co-op-translator.json +++ b/translations/zh-CN/.co-op-translator.json @@ -36,8 +36,8 @@ "language_code": "zh-CN" }, "1-Introduction/4-techniques-of-ML/README.md": { - "original_hash": "9d91f3af3758fdd4569fb410575995ef", - "translation_date": "2025-09-05T09:04:44+00:00", + "original_hash": "84b1715a6be62ef1697351dcc5d7b567", + "translation_date": "2026-04-26T19:52:25+00:00", "source_file": "1-Introduction/4-techniques-of-ML/README.md", "language_code": "zh-CN" }, @@ -90,8 +90,8 @@ "language_code": "zh-CN" }, "2-Regression/3-Linear/README.md": { - "original_hash": "26c53a922f1f1e8542b0ea41ff52221a", - "translation_date": "2026-04-20T19:51:59+00:00", + "original_hash": "8b776e731c35b171d316d01d0e7b1369", + "translation_date": "2026-04-26T19:52:07+00:00", "source_file": "2-Regression/3-Linear/README.md", "language_code": "zh-CN" }, @@ -107,6 +107,12 @@ "source_file": "2-Regression/3-Linear/solution/Julia/README.md", "language_code": "zh-CN" }, + "2-Regression/3-Linear/solution/notebook.ipynb": { + "original_hash": "6781223ffbe8cfdaa38d0200f08e1288", + "translation_date": "2026-04-26T19:48:37+00:00", + "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", + "language_code": "zh-CN" + }, "2-Regression/4-Logistic/README.md": { "original_hash": "abf86d845c84330bce205a46b382ec88", "translation_date": "2025-09-05T08:57:14+00:00", diff --git a/translations/zh-CN/1-Introduction/4-techniques-of-ML/README.md b/translations/zh-CN/1-Introduction/4-techniques-of-ML/README.md index 181e5bf20..d2331b59e 100644 --- a/translations/zh-CN/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/zh-CN/1-Introduction/4-techniques-of-ML/README.md @@ -1,117 +1,117 @@ # 机器学习技术 -构建、使用和维护机器学习模型及其所需数据的过程,与许多其他开发工作流有很大的不同。在本课中,我们将揭开这一过程的神秘面纱,并概述您需要了解的主要技术。您将: +构建、使用和维护机器学习模型及其使用数据的过程,与许多其他开发工作流程有很大不同。在本课中,我们将揭开这一过程的神秘面纱,并概述您需要了解的主要技术。您将: -- 从高层次理解机器学习的基本流程。 -- 探索诸如“模型”、“预测”和“训练数据”等基础概念。 +- 以高层次理解支撑机器学习的过程。 +- 探索“模型”、“预测”和“训练数据”等基本概念。 -## [课前测验](https://ff-quizzes.netlify.app/en/ml/) +## [课堂前测验](https://ff-quizzes.netlify.app/en/ml/) -[![机器学习入门 - 机器学习技术](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "机器学习入门 - 机器学习技术") +[![机器学习初学者 - 机器学习技术](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "机器学习初学者 - 机器学习技术") -> 🎥 点击上方图片观看本课的简短视频。 +> 🎥 点击上方图片观看关于本课的简短视频讲解。 ## 介绍 -从高层次来看,创建机器学习(ML)流程的过程包括以下几个步骤: +从宏观角度来看,创建机器学习(ML)流程的技艺包括多个步骤: -1. **确定问题**。大多数机器学习流程从提出一个无法通过简单条件程序或基于规则的引擎回答的问题开始。这些问题通常围绕基于数据集合的预测展开。 -2. **收集和准备数据**。为了回答您的问题,您需要数据。数据的质量以及有时数据的数量将决定您能多好地回答最初的问题。可视化数据是这一阶段的重要部分。这一阶段还包括将数据分为训练集和测试集以构建模型。 -3. **选择训练方法**。根据您的问题和数据的性质,您需要选择一种训练模型的方法,以便最好地反映数据并对其进行准确预测。这是机器学习流程中需要特定专业知识的部分,通常需要大量的实验。 -4. **训练模型**。使用训练数据,您将使用各种算法训练模型以识别数据中的模式。模型可能会利用内部权重,这些权重可以调整以优先考虑数据的某些部分,从而构建更好的模型。 -5. **评估模型**。使用从未见过的数据(测试数据)来检查模型的表现。 -6. **参数调优**。根据模型的表现,您可以使用不同的参数或变量重新进行训练,这些参数或变量控制用于训练模型的算法的行为。 -7. **预测**。使用新的输入测试模型的准确性。 +1. 确定问题。大多数机器学习流程从提出一个不能通过简单条件程序或基于规则的引擎回答的问题开始。这些问题通常围绕基于一组数据的预测展开。 +2. 收集和准备数据。为了回答您的问题,您需要数据。数据的质量以及有时的数据量将决定您能多好地回答最初的问题。数据可视化是这一阶段的重要环节。此阶段还包括将数据拆分为训练组和测试组,以构建模型。 +3. 选择训练方法。根据您的问题和数据的性质,您需要选择如何训练模型,以最好地反映数据并做出准确预测。这是机器学习流程中需要特定专业知识且通常需要大量试验的部分。 +4. 训练模型。利用训练数据,您将使用各种算法训练模型,以识别数据中的模式。模型可能利用可调整的内部权重,优先考虑数据的某些部分,从而构建更好的模型。 +5. 评估模型。使用未见过的数据(测试数据)来检验模型表现如何。 +6. 参数调优。根据模型的表现,可以使用不同参数或变量重新进行训练,这些参数控制用于训练模型的算法行为。 +7. 预测。使用新的输入来测试模型的准确度。 -## 提出什么问题 +## 要问什么问题 -计算机特别擅长发现数据中的隐藏模式。这种能力对研究人员来说非常有用,他们可能会提出一些无法通过条件规则引擎轻松回答的问题。例如,在精算任务中,数据科学家可能能够围绕吸烟者与非吸烟者的死亡率构建手工规则。 +计算机特别擅长发现数据中的隐藏模式。这对于研究人员非常有用,他们有一些问题,不能通过构建基于条件规则引擎的方法轻易回答。举例而言,在精算任务中,数据科学家可能能够围绕吸烟者和非吸烟者的死亡率构建人工规则。 -然而,当许多其他变量被纳入考虑时,机器学习模型可能更高效地根据过去的健康历史预测未来的死亡率。一个更令人愉快的例子可能是基于纬度、经度、气候变化、靠近海洋、喷流模式等数据预测某地四月份的天气。 +然而,当引入许多其他变量时,机器学习模型可能更加高效地根据过去的健康记录预测未来的死亡率。一个更愉快的例子是,基于纬度、经度、气候变化、靠近海洋程度、急流模式等数据,预测某地四月份的天气。 -✅ 这份[幻灯片](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf)提供了使用机器学习进行天气分析的历史视角。 +✅ 这份关于天气模型的[幻灯片](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)中所做的)。您可以清理和编辑数据(如我们在[Web 应用](../../3-Web-App/README.md)课程之前所做的)。最后,根据您的训练技术,您可能还需要随机化和打乱数据。 +- 收集数据。牢记上一课关于数据分析公正性的内容,谨慎收集数据。关注数据来源、潜在偏见,并记录其来源。 +- 准备数据。数据准备过程包含多个步骤。当数据来源多样时,可能需要合并数据、进行归一化处理。可通过转换字符串为数字等方法提升数据的质量和数量(如我们在[聚类](../../5-Clustering/1-Visualize/README.md)中所做)。还可以基于原始数据生成新数据(参见[分类](../../4-Classification/1-Introduction/README.md))。您也可以清洗和编辑数据(我们将在[Web 应用](../../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) —— 本课程使用它 —— 您可探究多种训练模型方法。根据经验,可能需尝试多种方法以构建最佳模型。数据科学家通常会通过输入未见数据,检查准确度、偏见及其他影响质量的问题,并据此选择最适合的训练方法。 ### 训练模型 -有了训练数据,您可以开始“拟合”数据以创建模型。您会注意到,在许多机器学习库中,代码中会出现“model.fit”——此时,您将特征变量作为值数组(通常是`X`)和目标变量(通常是`y`)传入。 +有了训练数据,您便可以“拟合”模型。许多机器学习库中会看到代码如 model.fit —— 就在这时,您将以数组形式(通常是‘X’)输入特征变量以及目标变量(通常是‘y’)。 ### 评估模型 -一旦训练过程完成(对于大型模型可能需要多次迭代或“周期”),您可以使用测试数据评估模型的质量,以衡量其性能。这些数据是模型之前未分析过的原始数据的子集。您可以打印出关于模型质量的指标表。 +当训练过程完成(对于大型模型,可能需要多轮“迭代”或“epoch”)后,您可以使用测试数据评估模型质量。测试数据是原始数据的一个子集,模型之前未见过。您可以输出模型质量的指标表。 -🎓 **模型拟合** +🎓 模型拟合 -在机器学习的背景下,模型拟合指的是模型底层函数在尝试分析未见过的数据时的准确性。 +在机器学习中,模型拟合指的是模型在尝试分析不熟悉数据时的准确性。 -🎓 **欠拟合**和**过拟合**是常见问题,会降低模型质量。欠拟合的模型无法很好地分析训练数据或未见过的数据,而过拟合的模型过于贴合训练数据的细节和噪声。过拟合的模型对训练数据的预测过于精准,而欠拟合的模型则不够准确。 +🎓 欠拟合过拟合是常见问题,降低模型质量。欠拟合时,模型表现不佳,既不能准确分析训练数据,也不能分析未见数据。过拟合时,模型过于“刻意”地记住训练数据细节与噪音,自己“学得太好”,因而在新数据上表现欠佳。 -![过拟合模型](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) -> 信息图由 [Jen Looper](https://twitter.com/jenlooper) 提供 +![过拟合模型](../../../../translated_images/zh-CN/overfitting.1c132d92bfd93cb6.webp) +> 信息图作者:[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)。 ## 预测 -这是您可以使用全新数据测试模型准确性的时刻。在“应用”机器学习场景中,例如构建用于生产的 Web 应用程序,这一过程可能涉及收集用户输入(例如按钮点击)以设置变量并将其发送到模型进行推断或评估。 +此时,您可以使用全新数据测试模型准确性。在“应用型”机器学习环境中,构建网络资产以在生产环境中使用模型时,通常会捕获用户输入(比如按钮点击),设置变量并将其发送到模型进行推断或评估。 -在这些课程中,您将学习如何使用这些步骤来准备、构建、测试、评估和预测——这些都是数据科学家的基本操作,同时也将帮助您在成为“全栈”机器学习工程师的旅程中不断进步。 +在这些课程中,您将发现如何利用这些步骤准备、构建、测试、评估和预测——作为数据科学家所掌握的全部动作,助您逐步成长为“全栈”机器学习工程师。 --- -## 🚀挑战 +## 🚀 挑战 -绘制一张流程图,反映机器学习从业者的步骤。您认为自己目前处于哪个阶段?您预测在哪些方面会遇到困难?哪些部分对您来说似乎很容易? +绘制一个反映机器学习实践者步骤的流程图。您目前处于该过程的哪个阶段?您预测在哪些环节会遇到困难?哪些环节对您来说较为容易? -## [课后测验](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 @@ --- + **免责声明**: -本文档使用AI翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言的文档作为权威来源。对于关键信息,建议使用专业人工翻译。我们不对因使用此翻译而产生的任何误解或误读承担责任。 \ No newline at end of file +本文件使用AI翻译服务[Co-op Translator](https://github.com/Azure/co-op-translator)进行翻译。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版本的文件应被视为权威来源。对于关键信息,建议采用专业人工翻译。我们对因使用此翻译而产生的任何误解或误释概不负责。 + \ No newline at end of file diff --git a/translations/zh-CN/2-Regression/3-Linear/README.md b/translations/zh-CN/2-Regression/3-Linear/README.md index fdc2eefca..1733f5983 100644 --- a/translations/zh-CN/2-Regression/3-Linear/README.md +++ b/translations/zh-CN/2-Regression/3-Linear/README.md @@ -2,96 +2,96 @@ ## 初学者提示 -线性回归用于预测数值型数据(例如房价、温度或销售额)。 -其原理是找到一条最佳拟合输入特征与输出之间关系的直线。 +线性回归用于预测数值型(例如房价、温度或销售额)。 +它通过找到最能代表输入特征与输出关系的直线来实现。 -本课重点理解概念,再探讨更高级的回归技术。 +本课将重点理解概念,然后再探索更高级的回归技术。 ![线性回归与多项式回归信息图](../../../../translated_images/zh-CN/linear-polynomial.5523c7cb6576ccab.webp) -> 信息图作者:[Dasani Madipalli](https://twitter.com/dasani_decoded) +> 信息图由 [Dasani Madipalli](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://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "为初学者讲解线性回归") +[![面向初学者的机器学习——理解线性回归](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "面向初学者的机器学习——理解线性回归") -> 🎥 点击上方图片观看线性回归的简短视频概览。 +> 🎥 点击上图观看线性回归简短视频介绍。 -> 在整个课程中,我们假设学生数学基础有限,力求让其他领域的学生也能理解,因此请关注笔记、🧮 数学提示、图表等辅助学习工具。 +> 在整个课程中,我们假设你有最少的数学知识背景,力图为来自其他领域的学生提供可访问的内容,因此请关注笔记、🧮 提示、图示及其他学习工具,以帮助理解。 ### 先决条件 -到目前为止,你应该熟悉我们正在研究的南瓜数据结构了。课中的 _notebook.ipynb_ 文件中已经预加载并预处理了数据。文件中每个蒲式耳的南瓜价格展示于新的数据框中。确保你可以在 Visual Studio Code 的内核中运行这些笔记本。 +你现在应该熟悉我们正在研究的南瓜数据的结构。你可以在本课的 _notebook.ipynb_ 文件中找到已预加载和预处理的数据。在该文件中,南瓜价格以每蒲式耳价格显示在一个新的数据框中。确保你能在 Visual Studio Code 的内核中运行这些笔记本。 ### 准备工作 -提醒一下,你加载数据是为了提出问题。 +提醒一下,我们加载这些数据是为了提问: - 什么时候买南瓜最合适? -- 一箱迷你南瓜价格大概是多少? -- 应该买半蒲式耳篮装,还是1 1/9蒲式耳盒装? -让我们继续挖掘数据。 +- 一箱迷你南瓜的价格大概是多少? +- 该以半蒲式耳篮买,还是1 1/9蒲式耳箱买? +让我们继续深入挖掘这些数据。 -上一课你创建了 Pandas 数据框,并填充了部分原始数据,将价格标准化为每蒲式耳价格。但这样你只能获得约400条数据,且仅限秋季月份。 +在上一课中,你创建了 Pandas 数据框,并用部分原始数据填充,标准化为每蒲式耳价格。这样做后,你只能获得大约 400 条数据点,且仅限秋季月份。 -看看本课随附笔记本中预加载的数据。数据已加载,并绘制了月份散点图。或许我们可以通过更深入的数据清洗来了解数据的本质。 +看看我们在本课随附笔记本中预加载的数据。数据已经加载完毕,并绘制了显示月份数据的初始散点图。也许通过进一步清洗,我们能更详细了解数据的本质。 -## 线性回归直线 +## 线性回归线 -正如第1课所学,线性回归的目标是绘制一条线来: +如你在第一课中所学,线性回归的目标是绘制一条直线来: -- 展示变量关系。显示变量之间的关系。 -- 进行预测。准确预测新数据点相对于该线的位置。 +- 显示变量关系。展示变量间的关系 +- 进行预测。准确预测新数据点在直线上的位置 -最小二乘回归通常会绘制这样的线。“最小二乘”指的是最小化模型总误差的过程。对每个数据点,测量其与回归线的垂直距离(称为残差)。 +通常采用最小二乘回归法绘制此类直线。“最小二乘”指的是尽量减少模型总误差的过程。对于每个数据点,我们测量实际点与回归线之间的垂直距离(称为残差)。 -我们平方这些距离主要有两个原因: +对这些距离平方的原因有两个: -1. 大小优先于方向:想让误差-5与+5同等对待,平方将所有值变为正数。 +1. 忽略方向只看大小:我们希望将误差 -5 和 +5 等同看待,平方可将所有值变为正数。 -2. 惩罚离群值:平方会给较大误差更高权重,迫使回归线更靠近远离的点。 +2. 惩罚离群值:平方更看重大的误差,使回归线尽量贴近远离的点。 -接着将所有平方值相加。目标是找到使该总和最小的线——这就是“最小二乘”名称的由来。 +然后我们将所有平方的距离相加。我们的目标是找到使该总和最小的特定直线(即“最小二乘”)。 -> **🧮 看数学表达** -> -> 这条称为_最佳拟合线_的线可以用[方程](https://en.wikipedia.org/wiki/Simple_linear_regression)表达: -> +> **🧮 数学详解** +> +> 这条称为最佳拟合线的直线可用[一个方程表示](https://en.wikipedia.org/wiki/Simple_linear_regression): +> > ``` > Y = a + bX > ``` > -> `X` 是“自变量”,`Y` 是“因变量”。斜率为 `b`,截距为 `a`,表示 `X=0` 时的 `Y` 值。 +> `X` 是“解释变量”,“Y”是“因变量”。直线的斜率是 `b`,`a` 是 y 轴截距,即当 `X=0` 时 `Y` 的值。 > >![计算斜率](../../../../translated_images/zh-CN/slope.f3c9d5910ddbfcf9.webp) > -> 首先计算斜率 `b`。信息图作者 [Jen Looper](https://twitter.com/jenlooper) +> 首先,计算斜率 `b`。信息图由 [Jen Looper](https://twitter.com/jenlooper) 制作 > -> 换句话说,对于南瓜数据:“按月份预测南瓜每蒲式耳价格”,`X` 是价格,`Y` 是销售月份。 +> 换句话说,针对我们原始的南瓜数据问题:“按月份预测南瓜每蒲式耳价格”,`X` 是价格,`Y` 是销售月份。 > ->![完整方程](../../../../translated_images/zh-CN/calculation.a209813050a1ddb1.webp) +>![完成方程](../../../../translated_images/zh-CN/calculation.a209813050a1ddb1.webp) > -> 计算 `Y` 值。如果你付了大约4美元,那一定是4月!信息图作者 [Jen Looper](https://twitter.com/jenlooper) +> 计算 `Y` 的值。如果你支付大约4美元,那一定是四月!信息图由 [Jen Looper](https://twitter.com/jenlooper) 制作 > -> 计算公式要展示斜率,还要考虑截距,即当 `X=0` 时 `Y` 的位置。 +> 计算此直线的数学方法必须展示斜率,同时也会以截距为依据,即当 `X=0` 时 `Y` 的位置。 > -> 你可以参考 [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) 网站来学习计算方法。还可以访问[这个最小二乘计算器](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` 变量之间的相关系数。通过散点图可以快速直观地看出这个系数。散点沿直线排列的图显示高相关性,点散布无序则显示相关性低。 -好的线性回归模型会有较高的(接近于1而非0)相关系数,采用最小二乘法拟合回归线。 +一个好的线性回归模型,应该在最小二乘法下,拥有较高(接近 1 而非 0)的相关系数。 -✅ 运行本课的笔记本,看看“月份与价格”的散点图。根据你的视觉判断,这两个变量的南瓜销售价格相关性是高还是低?如果用更细化的度量(如一年中的某一天,即从年初起的天数)替代 `Month`,相关性会变化吗? +✅ 运行本课附带的笔记本,查看“月份 vs 价格”的散点图。在直观解释该散点图后,南瓜销售相关的“月份 vs 价格”数据看起来相关性高还是低?如果改用更细粒度指标,比如“年份中的天数”(即年初以来的天数),相关性会改变吗? -下面的代码假设已清理数据并获得名为 `new_pumpkins` 的数据框,内容类似: +以下代码假设我们已清理数据,并获得名为 `new_pumpkins` 的数据框,类似于: ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price ---|-------|-----------|---------|------|---------|-----------|------------|------- @@ -101,36 +101,36 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri 73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 -> 清理数据的代码可见于[`notebook.ipynb`](notebook.ipynb)中。我们执行了与上一课相同的清理步骤,并用如下表达式计算了 `DayOfYear` 列: +> 清理数据的代码见 [`notebook.ipynb`](notebook.ipynb),我们采用了与上一课相同的清理步骤,并通过以下表达式计算了 `DayOfYear` 列: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` -既然已理解线性回归背后的数学原理,让我们创建一个回归模型,看看是否能预测哪种南瓜包装的价格最优。想为节日南瓜园采购南瓜的人可能想知道这些信息,以便优化采购计划。 +既然你了解了线性回归背后的数学,让我们创建一个回归模型,看看是否能预测哪种南瓜包装价格最好。假如有人为节日南瓜园买南瓜,这些信息有助于优化购买。 ## 寻找相关性 -[![为初学者讲解相关性:线性回归的关键](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "为初学者讲解相关性:线性回归的关键") +[![面向初学者的机器学习 - 寻找相关性:线性回归的关键](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "面向初学者的机器学习 - 寻找相关性:线性回归的关键") -> 🎥 点击上方图片观看关于相关性的简短视频。 +> 🎥 点击上图观看相关性简短视频介绍。 -上一课你可能已经看到,不同月份的平均价格如下图所示: +上一课可见,不同月份的平均价格如下图所示: -按月平均价格 +按月份的平均价格 -这说明应存在某种相关性,我们可以试着训练线性回归模型来预测 `Month` 与 `Price` 之间,或 `DayOfYear` 与 `Price` 之间的关系。以下是价格与一年中日期关系的散点图: +这暗示两者之间应有相关性,我们可训练线性回归模型来预测 `Month` 和 `Price`,或 `DayOfYear` 和 `Price` 之间的关系。下面是后者的散点图: -价格与年日期散点图 +价格与年中天数的散点图 -我们用 `corr` 函数来看看相关性: +使用 `corr` 函数检测是否相关: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` -看起来相关性非常小,`Month` 为 -0.15,`DayOfYear` 为 -0.17,但可能存在另一种重要关系。不同南瓜品种对应不同价格集群。为确认此假设,我们用不同颜色绘制各品种。通过给 `scatter` 函数传递 `ax` 参数,可以在同一图表上绘制所有点: +相关性看起来较小,月份相关系数约为 -0.15,年中天数相关系数约为 -0.17,但或许存在其他重要关系。似乎不同价格簇对应不同南瓜品种。为验证这个假设,我们给各品种使用不同颜色绘制散点图。通过向 `scatter` 函数传递 `ax` 参数,可以将所有点绘制于同一图表: ```python ax=None @@ -140,9 +140,9 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` -价格与年日期不同颜色散点图 +价格与年中天数散点图(彩色区分) -调查显示,品种对整体价格的影响大于销售日期。我们用柱状图表示: +调研表明,品种对价格影响更大于销售日期。下图通过柱状图展示: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') @@ -150,32 +150,32 @@ new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') 按品种划分的价格柱状图 -先暂时只关注一种品种——“pie type”,看看日期对价格的影响: +暂时只关注“派类型”南瓜,看看日期对价格的影响: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` -pie type 南瓜的价格与年日期散点图 +价格与年中天数的散点图 -若用 `corr` 函数计算 `Price` 和 `DayOfYear` 的相关系数,结果大概为 `-0.27`,说明训练预测模型是有意义的。 +如果用 `corr` 函数计算 `Price` 与 `DayOfYear` 的相关系数,会得到大约 `-0.27`,说明训练预测模型是合理的。 -> 在训练线性回归模型前,务必保证数据干净。线性回归对缺失值不敏感,最合理的做法是去除所有空值: +> 训练线性回归模型前,确保数据干净很重要。线性回归对空值敏感,因此最好去除所有空单元格: ```python pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` -另一种做法是用对应列的均值填充空白值。 +另一种方法是用对应列的均值填充空值。 ## 简单线性回归 -[![为初学者讲解使用 Scikit-learn 进行线性和多项式回归](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "为初学者讲解使用 Scikit-learn 进行线性和多项式回归") +[![面向初学者的机器学习 - 使用 Scikit-learn 的线性和多项式回归](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "面向初学者的机器学习 - 使用 Scikit-learn 的线性和多项式回归") -> 🎥 点击上方图片观看线性回归和多项式回归的简短视频。 +> 🎥 点击上图观看线性与多项式回归简短视频介绍。 -我们将使用Scikit-learn库训练线性回归模型。 +我们将用 **Scikit-learn** 库训练线性回归模型。 ```python from sklearn.linear_model import LinearRegression @@ -183,16 +183,16 @@ 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) @@ -205,9 +205,9 @@ lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -`LinearRegression` 对象在 `fit` 之后包含了回归的所有系数,可以通过 `.coef_` 属性访问。在我们的例子中,只有一个系数,应该大约是 `-0.017`。这意味着价格似乎随着时间略有下降,但不多,大约每天降 2 美分。我们还可以通过 `lin_reg.intercept_` 访问回归与 Y 轴的截距点——在我们的例子中大约是 `21`,表示年初的价格。 +`LinearRegression` 对象在 `fit` 后包含了回归的所有系数,可以通过 `.coef_` 属性访问。在我们的例子中,只有一个系数,应该在 `-0.017` 附近。这意味着价格随着时间似乎略有下降,但幅度不大,大约每天下降两分钱。我们还可以通过 `lin_reg.intercept_` 访问回归与 Y 轴的交点——在我们的例子中大约是 `21`,表示年初的价格。 -为了查看模型的准确度,我们可以在测试数据集上预测价格,然后测量预测值与预期值的接近程度。可以使用均方根误差(RMSE)指标,即所有预期值与预测值差值平方的平均值的平方根。 +为了查看模型的准确性,我们可以在测试数据集上预测价格,然后衡量预测值与预期值的接近程度。这可以使用均方根误差(RMSE)指标完成,即期望值与预测值全部平方差的均值开根号。 ```python pred = lin_reg.predict(X_test) @@ -216,15 +216,16 @@ rmse = np.sqrt(mean_squared_error(y_test,pred)) print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') ``` -我们的误差大约是 2 点,约为 ~17%。不是很理想。模型质量的另一个指标是决定系数,可以这样获得: +我们的误差约为 2 点,即约 17%。不是特别好。另一个模型质量指标是决定系数,可以这样获得: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) ``` -如果值为 0,表示模型没有考虑输入数据,表现为最差的线性预测器,即结果的均值。值为 1 表示我们可以完美预测所有预期输出。在我们的例子中,系数约为 0.06,相当低。 -我们还可以将测试数据和回归线画在一起,更直观地观察回归效果: +如果值为 0,说明模型不考虑输入数据,表现为最差的线性预测器,即结果的均值。值为 1 则意味着我们能完美预测所有期望输出。在我们的例子中,系数约为 0.06,较低。 + +我们也可以绘制测试数据和回归线,以更直观地了解回归效果: ```python plt.scatter(X_test,y_test) @@ -235,17 +236,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 包含一个方便的[流水线 API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline)来组合不同的数据处理步骤。流水线是由一系列估计器组成的链。在我们的例子中,我们将创建一个流水线,先添加多项式特征,然后训练回归模型: +Scikit-learn 包含了有用的[流水线 API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline)用于组合数据处理的多个步骤。流水线是一系列估计器的链。在我们的例子中,我们将创建一个先添加多项式特征、然后进行回归训练的流水线: ```python from sklearn.preprocessing import PolynomialFeatures @@ -256,36 +257,58 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` -使用 `PolynomialFeatures(2)` 意味着包括输入数据中的所有二次多项式。在我们的例子中,这仅表示 `DayOfYear` 的平方,但如果有两个输入变量 X 和 Y,就会添加 X²、XY 和 Y²。如果需要,也可以使用更高次数的多项式。 +使用 `PolynomialFeatures(2)` 意味着我们会包含输入数据的所有二阶多项式。在我们的例子中仅有 `DayOfYear`2,但若输入有两个变量 X 和 Y,则会加上 X2、XY 和 Y2。如果需要,也可以使用更高阶的多项式。 + +流水线的用法与原始 `LinearRegression` 对象相同,即可以对流水线 `fit`,然后用 `predict` 得到预测结果: + +```python +pred = pipeline.predict(X_test) + +rmse = np.sqrt(mean_squared_error(y_test,pred)) +print(f'RMSE: {rmse:3.3} ({rmse/np.mean(pred)*100:3.3}%)') + +score = pipeline.score(X_train,y_train) +print('Model determination: ', score) +``` + +为了绘制平滑的拟合曲线,我们用 `np.linspace` 创建均匀的输入值范围,而不是在无序的测试数据上直接绘图(那样会出现锯齿形曲线): + +```python +X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1) +y_range = pipeline.predict(X_range) + +plt.scatter(X_test, y_test) +plt.plot(X_range, y_range) +``` -流水线可以像原始的 `LinearRegression` 对象一样使用,即可以 `fit` 流水线,然后用 `predict` 获得预测结果。下面是测试数据和拟合曲线的图示: +下面是测试数据和拟合曲线的图表: Polynomial regression -使用多项式回归,我们可以得到稍低的均方误差和更高的决定系数,但提升不大。我们还需要考虑其他特征! +使用多项式回归,我们能稍微降低 RMSE 并提高决定系数,但提升不大。我们需要考虑更多特征! -> 你可以看到南瓜最低价格出现在万圣节附近。你如何解释这一现象? +> 你可以看到南瓜价格的最低点大约出现在万圣节左右。你能解释这现象吗? -🎃 恭喜,你刚刚创建了一个能够帮助预测派皮南瓜价格的模型。你可能会对所有南瓜类型都重复这个过程,但那会很繁琐。接下来我们学习如何在模型中考虑南瓜品种! +🎃 恭喜,你刚刚建立了一个可以预测派南瓜价格的模型。你也可以用同样方法处理所有南瓜类型,但那样比较繁琐。接下来我们学习如何将南瓜品种纳入模型! -## 类别特征 +## 分类特征 -理想情况下,我们希望用同一个模型预测不同南瓜品种的价格。但 `Variety` 一栏与 `Month` 等数值型列不同,它包含的是非数值数据。这类列称为类别特征。 +理想情况下,我们希望用同一个模型预测不同南瓜品种的价格。然而,`Variety` 列与 `Month` 等列不同,因为它包含非数字值。这类列称为分类变量。 -[![ML for beginners - 使用线性回归预测类别特征](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - 使用线性回归预测类别特征") +[![针对初学者的机器学习——使用线性回归进行分类特征预测](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "针对初学者的机器学习——使用线性回归进行分类特征预测") -> 🎥 点击上图观看一个简短视频,介绍如何使用类别特征。 +> 🎥 点击上方图片观看关于使用分类特征的简短视频介绍。 -你可以看到平均价格如何根据品种变化: +这里显示了平均价格如何随品种变化: Average price by variety -为了在模型中考虑品种,首先需要对其进行数值化,或称编码。编码有几种方法: +要考虑品种,首先需要将其转换为数值形式,也就是编码。有几种常用方法: -* 简单的数字编码会建立一个品种表,然后用该表中的索引替换品种名称。这对线性回归不是最优,因为线性回归将索引的数值直接参与计算,乘以某个系数后加到结果中。在这里,索引与价格关系明显非线性,即使索引按照特定顺序排列。 -* 独热编码会用四个不同的列替换掉 `Variety` 列,每个对应一个品种。对应品种的列取 1,其他列为 0。这样线性回归会得到四个系数,分别对应四种南瓜品种的“基础价”(或“附加价”)。 +* 简单的数字编码会建立一个不同品种的表,然后用表中的索引替代品种名称。对于线性回归来说,这不是最佳方法,因为线性回归会将索引的数值直接加权,然而索引和价格之间显然是非线性的,即便我们保证索引按特定方式排序。 +* 独热编码会用四个不同的列替代 `Variety` 列,每个品种一个列。相应行是该品种则该列为 `1`,否则为 `0`。这样线性回归就有了四个系数,对应四个南瓜品种,分别代表该品种的“起始价”(或更准确地说是“附加价”)。 -下面的代码展示如何对品种进行独热编码: +下面代码展示了如何对品种进行独热编码: ```python pd.get_dummies(new_pumpkins['Variety']) @@ -293,23 +316,23 @@ pd.get_dummies(new_pumpkins['Variety']) ID | FAIRYTALE | MINIATURE | MIXED HEIRLOOM VARIETIES | PIE TYPE ----|-----------|-----------|--------------------------|---------- -70 | 0 | 0 | 0 | 1 -71 | 0 | 0 | 0 | 1 -... | ... | ... | ... | ... -1738| 0 | 1 | 0 | 0 -1739| 0 | 1 | 0 | 0 -1740| 0 | 1 | 0 | 0 -1741| 0 | 1 | 0 | 0 -1742| 0 | 1 | 0 | 0 +70 | 0 | 0 | 0 | 1 +71 | 0 | 0 | 0 | 1 +... | ... | ... | ... | ... +1738 | 0 | 1 | 0 | 0 +1739 | 0 | 1 | 0 | 0 +1740 | 0 | 1 | 0 | 0 +1741 | 0 | 1 | 0 | 0 +1742 | 0 | 1 | 0 | 0 -使用独热编码的品种作为输入训练线性回归,只需正确初始化 `X` 和 `y` 数据: +为了用独热编码后的品种训练线性回归,只需正确初始化 `X` 和 `y`: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` -其余代码与之前训练线性回归时相同。你尝试后会发现均方误差差不多,但决定系数大大提升到 ~77%。为了得到更精准的预测,可以同时考虑更多类别特征和数值特征,比如 `Month` 或 `DayOfYear`。要合并成一个大特征数组,可以使用 `join`: +其余代码与之前训练线性回归相同。尝试后你会发现均方误差差不多,但决定系数提高到了约 77%。要获得更准确的预测,可以同时考虑更多分类特征和数值特征,比如 `Month` 或 `DayOfYear`。要合并成一个完整特征数组,可使用 `join`: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -319,11 +342,11 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ y = new_pumpkins['Price'] ``` -这里还考虑了 `City` 和 `Package` 类型,最后得到均方误差 2.84(10%),决定系数 0.94! +这里我们还考虑了 `City` 和 `Package` 类型,得到 RMSE 2.84(10.5%),决定系数 0.94! ## 综合应用 -为了做出最佳模型,我们可以结合上述例子中独热编码的类别特征和数值特征,再使用多项式回归。以下是完整代码,供你方便使用: +为了获得最佳模型,我们可以将上述示例中的组合(独热编码分类 + 数值特征)数据与多项式回归结合。下面是完整代码,方便参考: ```python # 设置训练数据 @@ -333,54 +356,54 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ .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) -# 设置并训练流水线 +# 设置并训练管道 pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) # 预测测试数据结果 pred = pipeline.predict(X_test) -# 计算均方误差和决定系数 -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') +# 计算均方根误差和决定系数 +rmse = mean_squared_error(y_test, pred, squared=False) +print(f'RMSE: {rmse:3.3} ({rmse/pred.mean()*100:3.3}%)') score = pipeline.score(X_train,y_train) print('Model determination: ', score) ``` -这应该能达到接近 97% 的最高决定系数,均方误差为 2.23(约 8% 预测误差)。 +这将给出近 97% 的最高决定系数和 RMSE=2.23(约 8% 预测误差)。 -| 模型 | MSE | 决定系数 | -|--------------------------|---------------|---------------| -| `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 | +| 模型 | RMSE | 决定系数 | +|-------|-----|---------------| +| `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%。回归的最后一节课中,你将学习用逻辑回归确定类别。 +🏆 太棒了!你在本节课里创建了四个回归模型,并将模型质量提高到 97%。在回归的最后一部分,你将学习如何用逻辑回归做分类判定。 --- ## 🚀挑战 -尝试本笔记本中的几个不同变量,观察它们的相关性如何影响模型准确度。 +在此笔记本中测试多个不同变量,观察相关性与模型准确度的关系。 -## [课后小测](https://ff-quizzes.netlify.app/en/ml/) +## [课后测验](https://ff-quizzes.netlify.app/en/ml/) ## 复习与自学 -本课我们学习了线性回归。还有其他重要的回归类型。请学习逐步回归、岭回归、套索回归和弹性网方法。推荐课程:[斯坦福统计学习课程](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) +本节课我们学习了线性回归。还有其他重要的回归类型。请阅读关于逐步回归、岭回归(Ridge)、套索回归(Lasso)和弹性网(Elasticnet)技术。推荐学习的好课程是[斯坦福统计学习课程](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) -## 作业 +## 练习 -[建立模型](assignment.md) +[构建模型](assignment.md) --- **免责声明**: -本文档是使用 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译的。虽然我们力求准确,但请注意自动翻译可能包含错误或不准确之处。原始文档的母语版本应被视为权威来源。对于关键信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。 +本文档使用 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。虽然我们力求准确,但请注意自动翻译可能存在错误或不准确之处。原始文档的原语言版本应被视为权威来源。对于重要信息,建议采用专业人工翻译。我们不对因使用本翻译而产生的任何误解或误释承担责任。 \ No newline at end of file diff --git a/translations/zh-CN/2-Regression/3-Linear/solution/notebook.ipynb b/translations/zh-CN/2-Regression/3-Linear/solution/notebook.ipynb index 5577a3185..a6cef617b 100644 --- a/translations/zh-CN/2-Regression/3-Linear/solution/notebook.ipynb +++ b/translations/zh-CN/2-Regression/3-Linear/solution/notebook.ipynb @@ -4,14 +4,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## 南瓜定价的线性和多项式回归 - 第三课\n", + "## 线性回归与多项式回归用于南瓜定价 - 课程3\n", "\n", "加载所需的库和数据集。将数据转换为包含数据子集的数据框:\n", "\n", - "- 仅获取按蒲式耳定价的南瓜\n", + "- 仅获取按蒲式耳计价的南瓜\n", "- 将日期转换为月份\n", "- 计算价格为高价和低价的平均值\n", - "- 将价格转换为按蒲式耳数量定价\n" + "- 将价格转换为反映按蒲式耳数量定价的价格\n" ] }, { @@ -377,7 +377,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "散点图提醒我们,我们只有从八月到十二月的月度数据。我们可能需要更多数据才能以线性方式得出结论。\n" + "散点图提醒我们只有从八月到十二月的月份数据。我们可能需要更多数据才能以线性方式得出结论。\n" ] }, { @@ -447,7 +447,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "让我们看看是否存在相关性:\n" + ] }, { "cell_type": "code", @@ -472,7 +474,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "看起来相关性很小,但存在一些其他更重要的关系——因为上面图中的价格点似乎有几个不同的聚类。让我们制作一个图表来显示不同的南瓜品种:\n" + "看起来相关性相当小,但似乎有其他更重要的关系——因为上图中的价格点似乎有几个明显的聚类。我们来做一个显示不同南瓜品种的图:\n" ] }, { @@ -535,7 +537,9 @@ { "cell_type": "markdown", "metadata": {}, - "source": [] + "source": [ + "目前,我们先只专注于一种类型——派型。\n" + ] }, { "cell_type": "code", @@ -662,7 +666,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "线的斜率可以通过线性回归系数确定:\n" + "线的斜率可以从线性回归系数中确定:\n" ] }, { @@ -720,9 +724,9 @@ "source": [ "### 多项式回归\n", "\n", - "有时,特征与结果之间的关系本质上是非线性的。例如,南瓜的价格可能在冬季(月份=1,2)较高,然后在夏季(月份=5-7)下降,之后再次上涨。线性回归无法准确捕捉这种关系。\n", + "有时,特征与结果之间的关系本质上是非线性的。例如,冬季(月份=1,2)南瓜价格可能很高,然后在夏季(月份=5-7)下降,随后再次上涨。线性回归无法准确拟合这种关系。\n", "\n", - "在这种情况下,我们可以考虑添加额外的特征。一种简单的方法是从输入特征中生成多项式,这样就形成了**多项式回归**。在 Scikit Learn 中,我们可以使用管道自动预计算多项式特征:\n" + "在这种情况下,我们可以考虑添加额外的特征。简单的方法是使用输入特征的多项式,这将导致多项式回归。在 Scikit Learn 中,我们可以使用管道自动预计算多项式特征:\n" ] }, { @@ -777,20 +781,23 @@ "score = pipeline.score(X_train,y_train)\n", "print('Model determination: ', score)\n", "\n", - "plt.scatter(X_test,y_test)\n", - "plt.plot(sorted(X_test),pipeline.predict(sorted(X_test)))" + "X_range = np.linspace(X_test.min(), X_test.max(), 100).reshape(-1,1)\n", + "y_range = pipeline.predict(X_range)\n", + "\n", + "plt.scatter(X_test, y_test)\n", + "plt.plot(X_range, y_range)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### 编码品种\n", + "### 编码种类\n", "\n", - "在理想情况下,我们希望能够使用同一个模型预测不同南瓜品种的价格。为了考虑品种因素,我们首先需要将其转换为数值形式,也就是**编码**。有几种方法可以实现:\n", + "在理想情况下,我们希望能够使用相同的模型来预测不同南瓜品种的价格。为了考虑品种因素,我们首先需要将其转换为数值形式,或者说编码。我们可以有几种方法:\n", "\n", - "* 简单的数值编码,这种方法会构建一个不同品种的表格,然后用表中的索引替换品种名称。这对于线性回归来说并不是最好的选择,因为线性回归会考虑索引的数值,而这些数值可能与价格没有直接的数值相关性。\n", - "* 独热编码(One-hot encoding),这种方法会将`Variety`列替换为4个不同的列,每个品种对应一个列。如果某一行属于某个品种,该列的值为1,否则为0。\n", + "* 简单的数值编码,会构建一个不同品种的表格,然后用该表中的索引代替品种名称。这对线性回归来说不是最佳选择,因为线性回归会考虑索引的数值,而索引的数值往往与价格数值上不相关。\n", + "* 独热编码,会用 4 个不同的列替代 `Variety` 列,每个列对应一种品种,如果该行是该品种则值为 1,否则为 0。\n", "\n", "下面的代码展示了如何对品种进行独热编码:\n" ] @@ -940,9 +947,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### 品种的线性回归\n", + "### 品种上的线性回归\n", "\n", - "我们现在将使用与上面相同的代码,但输入将从 `DayOfYear` 改为我们经过独热编码的品种:\n" + "我们现在将使用与上面相同的代码,但不是使用 `DayOfYear`,而是使用我们的一键编码品种作为输入:\n" ] }, { @@ -990,7 +997,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "我们也可以以同样的方式尝试使用其他特征,并将它们与数值特征结合,例如 `Month` 或 `DayOfYear`:\n" + "我们也可以以相同的方式尝试使用其他特征,并将它们与数值特征(例如 `Month` 或 `DayOfYear`)结合起来:\n" ] }, { @@ -1023,7 +1030,7 @@ "source": [ "### 多项式回归\n", "\n", - "多项式回归同样可以用于经过独热编码的分类特征。训练多项式回归的代码基本上与我们之前看到的代码相同。\n" + "多项式回归也可以用于经过独热编码的类别特征。训练多项式回归的代码基本上与我们上面看到的相同。\n" ] }, { @@ -1070,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\n**免责声明**: \n本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译而成。尽管我们努力确保准确性,但请注意自动翻译可能包含错误或不准确之处。原始的本地语言文件应被视为权威来源。对于关键信息,建议采用专业人工翻译。我们不对因使用本翻译而产生的任何误解或误释承担责任。\n\n" ] } ], @@ -1100,13 +1107,7 @@ "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" } }, - "orig_nbformat": 2, - "coopTranslator": { - "original_hash": "d77bd89ae7e79780c68c58bab91f13f8", - "translation_date": "2025-09-03T19:18:23+00:00", - "source_file": "2-Regression/3-Linear/solution/notebook.ipynb", - "language_code": "zh" - } + "orig_nbformat": 2 }, "nbformat": 4, "nbformat_minor": 2