You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/fa/2-Regression/1-Tools/README.md

23 KiB

شروع کار با پایتون و Scikit-learn برای مدل‌های رگرسیون

خلاصه‌ای از رگرسیون‌ها در یک اسکچ‌نوت

اسکچ‌نوت توسط Tomomi Imura

آزمون پیش از درس

این درس به زبان R نیز موجود است!

مقدمه

در این چهار درس، شما یاد خواهید گرفت که چگونه مدل‌های رگرسیون بسازید. به زودی در مورد کاربردهای این مدل‌ها صحبت خواهیم کرد. اما قبل از شروع، مطمئن شوید که ابزارهای مناسب برای شروع فرآیند را در اختیار دارید!

در این درس، شما یاد خواهید گرفت که:

  • کامپیوتر خود را برای وظایف یادگیری ماشین محلی تنظیم کنید.
  • با Jupyter notebooks کار کنید.
  • از Scikit-learn استفاده کنید، شامل نصب آن.
  • رگرسیون خطی را با یک تمرین عملی بررسی کنید.

نصب‌ها و تنظیمات

یادگیری ماشین برای مبتدیان - تنظیم ابزارها برای ساخت مدل‌های یادگیری ماشین

🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره تنظیم کامپیوتر برای یادگیری ماشین مشاهده کنید.

  1. نصب پایتون. مطمئن شوید که پایتون روی کامپیوتر شما نصب شده است. شما از پایتون برای بسیاری از وظایف علم داده و یادگیری ماشین استفاده خواهید کرد. اکثر سیستم‌های کامپیوتری از قبل شامل نصب پایتون هستند. همچنین بسته‌های Python Coding Packs مفیدی وجود دارند که تنظیمات را برای برخی کاربران آسان‌تر می‌کنند.

    برخی کاربردهای پایتون ممکن است به یک نسخه خاص از نرم‌افزار نیاز داشته باشند، در حالی که دیگر کاربردها به نسخه دیگری نیاز دارند. به همین دلیل، کار کردن در یک محیط مجازی مفید است.

  2. نصب Visual Studio Code. مطمئن شوید که Visual Studio Code روی کامپیوتر شما نصب شده است. دستورالعمل‌های نصب Visual Studio Code را برای نصب پایه دنبال کنید. شما در این دوره از پایتون در Visual Studio Code استفاده خواهید کرد، بنابراین ممکن است بخواهید نحوه تنظیم Visual Studio Code برای توسعه پایتون را مرور کنید.

    با کار کردن روی این مجموعه ماژول‌های یادگیری با پایتون راحت‌تر شوید.

    تنظیم پایتون با Visual Studio Code

    🎥 روی تصویر بالا کلیک کنید تا یک ویدئو درباره استفاده از پایتون در VS Code مشاهده کنید.

  3. نصب Scikit-learn، با دنبال کردن این دستورالعمل‌ها. از آنجا که باید مطمئن شوید که از پایتون 3 استفاده می‌کنید، توصیه می‌شود از یک محیط مجازی استفاده کنید. توجه داشته باشید، اگر این کتابخانه را روی یک مک M1 نصب می‌کنید، دستورالعمل‌های خاصی در صفحه لینک شده وجود دارد.

  4. نصب Jupyter Notebook. شما باید بسته Jupyter را نصب کنید.

محیط نویسندگی یادگیری ماشین شما

شما از notebooks برای توسعه کد پایتون و ایجاد مدل‌های یادگیری ماشین استفاده خواهید کرد. این نوع فایل یک ابزار رایج برای دانشمندان داده است و با پسوند .ipynb شناسایی می‌شود.

نوت‌بوک‌ها یک محیط تعاملی هستند که به توسعه‌دهنده اجازه می‌دهند هم کدنویسی کنند و هم یادداشت‌ها و مستندات پیرامون کد بنویسند، که برای پروژه‌های آزمایشی یا تحقیقاتی بسیار مفید است.

یادگیری ماشین برای مبتدیان - تنظیم Jupyter Notebooks برای شروع ساخت مدل‌های رگرسیون

🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره این تمرین مشاهده کنید.

تمرین - کار با یک نوت‌بوک

در این پوشه، فایل notebook.ipynb را پیدا خواهید کرد.

  1. فایل notebook.ipynb را در Visual Studio Code باز کنید.

    یک سرور Jupyter با پایتون 3+ شروع خواهد شد. شما بخش‌هایی از نوت‌بوک را پیدا خواهید کرد که می‌توانند اجرا شوند، قطعات کد. شما می‌توانید یک بلوک کد را با انتخاب آیکونی که شبیه دکمه پخش است اجرا کنید.

  2. آیکون md را انتخاب کنید و کمی متن مارک‌داون اضافه کنید، و متن زیر را وارد کنید # خوش آمدید به نوت‌بوک خود.

    سپس کمی کد پایتون اضافه کنید.

  3. در بلوک کد تایپ کنید print('hello notebook').

  4. فلش را انتخاب کنید تا کد اجرا شود.

    شما باید عبارت چاپ شده را مشاهده کنید:

    hello notebook
    

VS Code با یک نوت‌بوک باز

شما می‌توانید کد خود را با نظرات ترکیب کنید تا نوت‌بوک را خود-مستند کنید.

برای یک دقیقه فکر کنید که محیط کاری یک توسعه‌دهنده وب چقدر با محیط کاری یک دانشمند داده متفاوت است.

شروع کار با Scikit-learn

اکنون که پایتون در محیط محلی شما تنظیم شده است و با Jupyter notebooks راحت هستید، بیایید با Scikit-learn نیز راحت شویم (تلفظ آن sci مانند science). Scikit-learn یک API گسترده ارائه می‌دهد تا به شما در انجام وظایف یادگیری ماشین کمک کند.

طبق وب‌سایت آن‌ها، "Scikit-learn یک کتابخانه یادگیری ماشین متن‌باز است که از یادگیری نظارت‌شده و بدون نظارت پشتیبانی می‌کند. همچنین ابزارهای مختلفی برای برازش مدل، پیش‌پردازش داده‌ها، انتخاب مدل و ارزیابی، و بسیاری از امکانات دیگر ارائه می‌دهد."

در این دوره، شما از Scikit-learn و ابزارهای دیگر برای ساخت مدل‌های یادگیری ماشین استفاده خواهید کرد تا وظایفی را که به آن‌ها "یادگیری ماشین سنتی" می‌گوییم انجام دهید. ما عمداً از شبکه‌های عصبی و یادگیری عمیق اجتناب کرده‌ایم، زیرا آن‌ها بهتر در برنامه درسی آینده ما با عنوان "AI برای مبتدیان" پوشش داده می‌شوند.

Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها برای استفاده را ساده می‌کند. این کتابخانه عمدتاً بر استفاده از داده‌های عددی تمرکز دارد و شامل چندین مجموعه داده آماده برای استفاده به عنوان ابزارهای یادگیری است. همچنین مدل‌های پیش‌ساخته‌ای برای دانش‌آموزان دارد تا امتحان کنند. بیایید فرآیند بارگذاری داده‌های از پیش بسته‌بندی شده و استفاده از یک تخمین‌گر برای اولین مدل یادگیری ماشین با Scikit-learn را با داده‌های پایه بررسی کنیم.

تمرین - اولین نوت‌بوک Scikit-learn شما

این آموزش از مثال رگرسیون خطی در وب‌سایت Scikit-learn الهام گرفته شده است.

یادگیری ماشین برای مبتدیان - اولین پروژه رگرسیون خطی شما در پایتون

🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره این تمرین مشاهده کنید.

در فایل notebook.ipynb مرتبط با این درس، تمام سلول‌ها را با فشار دادن آیکون 'سطل زباله' پاک کنید.

در این بخش، شما با یک مجموعه داده کوچک درباره دیابت که در Scikit-learn برای اهداف یادگیری ساخته شده است کار خواهید کرد. تصور کنید که می‌خواهید یک درمان برای بیماران دیابتی آزمایش کنید. مدل‌های یادگیری ماشین ممکن است به شما کمک کنند تعیین کنید کدام بیماران بر اساس ترکیب متغیرها بهتر به درمان پاسخ می‌دهند. حتی یک مدل رگرسیون بسیار پایه، زمانی که بصری‌سازی شود، ممکن است اطلاعاتی درباره متغیرهایی ارائه دهد که به شما در سازماندهی آزمایش‌های بالینی نظری کمک کند.

روش‌های رگرسیون زیادی وجود دارند، و انتخاب شما بستگی به پاسخی دارد که به دنبال آن هستید. اگر می‌خواهید ارتفاع احتمالی یک فرد را بر اساس سن او پیش‌بینی کنید، از رگرسیون خطی استفاده می‌کنید، زیرا به دنبال یک مقدار عددی هستید. اگر علاقه‌مند به کشف این هستید که آیا یک نوع غذا باید به عنوان وگان در نظر گرفته شود یا نه، به دنبال یک تخصیص دسته‌بندی هستید، بنابراین از رگرسیون لجستیک استفاده می‌کنید. بعداً درباره رگرسیون لجستیک بیشتر یاد خواهید گرفت. کمی فکر کنید که چه سوالاتی می‌توانید از داده‌ها بپرسید و کدام یک از این روش‌ها مناسب‌تر خواهد بود.

بیایید این کار را شروع کنیم.

وارد کردن کتابخانه‌ها

برای این کار، ما برخی کتابخانه‌ها را وارد خواهیم کرد:

  • matplotlib. این یک ابزار گرافیکی مفید است و ما از آن برای ایجاد یک نمودار خطی استفاده خواهیم کرد.
  • numpy. numpy یک کتابخانه مفید برای کار با داده‌های عددی در پایتون است.
  • sklearn. این همان کتابخانه Scikit-learn است.

برخی کتابخانه‌ها را برای کمک به وظایف خود وارد کنید.

  1. واردات را با تایپ کد زیر اضافه کنید:

    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn import datasets, linear_model, model_selection
    

    در بالا، شما matplotlib و numpy را وارد می‌کنید و datasets، linear_model و model_selection را از sklearn وارد می‌کنید. model_selection برای تقسیم داده‌ها به مجموعه‌های آموزشی و آزمایشی استفاده می‌شود.

مجموعه داده دیابت

مجموعه داده دیابت شامل 442 نمونه داده درباره دیابت است، با 10 متغیر ویژگی، برخی از آن‌ها شامل:

  • age: سن به سال
  • bmi: شاخص توده بدنی
  • bp: فشار خون متوسط
  • s1 tc: سلول‌های T (نوعی از گلبول‌های سفید خون)

این مجموعه داده شامل مفهوم 'جنسیت' به عنوان یک متغیر ویژگی مهم برای تحقیق درباره دیابت است. بسیاری از مجموعه داده‌های پزشکی شامل این نوع طبقه‌بندی دودویی هستند. کمی فکر کنید که چگونه چنین دسته‌بندی‌هایی ممکن است بخش‌هایی از جمعیت را از درمان‌ها حذف کنند.

اکنون داده‌های X و y را بارگذاری کنید.

🎓 به یاد داشته باشید، این یادگیری نظارت‌شده است و ما به یک هدف 'y' نام‌گذاری شده نیاز داریم.

در یک سلول کد جدید، مجموعه داده دیابت را با فراخوانی load_diabetes() بارگذاری کنید. ورودی return_X_y=True نشان می‌دهد که X یک ماتریس داده خواهد بود و y هدف رگرسیون خواهد بود.

  1. برخی دستورات چاپ اضافه کنید تا شکل ماتریس داده و اولین عنصر آن را نشان دهید:

    X, y = datasets.load_diabetes(return_X_y=True)
    print(X.shape)
    print(X[0])
    

    چیزی که به عنوان پاسخ دریافت می‌کنید، یک tuple است. کاری که انجام می‌دهید این است که دو مقدار اول tuple را به ترتیب به X و y اختصاص دهید. بیشتر درباره tupleها یاد بگیرید.

    شما می‌توانید ببینید که این داده‌ها شامل 442 آیتم هستند که در آرایه‌هایی با 10 عنصر شکل گرفته‌اند:

    (442, 10)
    [ 0.03807591  0.05068012  0.06169621  0.02187235 -0.0442235  -0.03482076
    -0.04340085 -0.00259226  0.01990842 -0.01764613]
    

    کمی فکر کنید درباره رابطه بین داده‌ها و هدف رگرسیون. رگرسیون خطی روابط بین ویژگی X و متغیر هدف y را پیش‌بینی می‌کند. آیا می‌توانید هدف مجموعه داده دیابت را در مستندات پیدا کنید؟ این مجموعه داده چه چیزی را نشان می‌دهد، با توجه به هدف؟

  2. سپس، بخشی از این مجموعه داده را برای رسم انتخاب کنید، با انتخاب ستون سوم مجموعه داده. شما می‌توانید این کار را با استفاده از عملگر : برای انتخاب تمام ردیف‌ها انجام دهید، و سپس ستون سوم را با استفاده از ایندکس (2) انتخاب کنید. همچنین می‌توانید داده‌ها را به یک آرایه 2D تغییر شکل دهید - همانطور که برای رسم لازم است - با استفاده از reshape(n_rows, n_columns). اگر یکی از پارامترها -1 باشد، بعد مربوطه به طور خودکار محاسبه می‌شود.

    X = X[:, 2]
    X = X.reshape((-1,1))
    

    در هر زمان، داده‌ها را چاپ کنید تا شکل آن‌ها را بررسی کنید.

  3. اکنون که داده‌ها آماده رسم هستند، می‌توانید ببینید آیا یک ماشین می‌تواند به تعیین یک تقسیم منطقی بین اعداد در این مجموعه داده کمک کند. برای انجام این کار، باید هم داده‌ها (X) و هم هدف (y) را به مجموعه‌های آزمایشی و آموزشی تقسیم کنید. Scikit-learn یک روش ساده برای انجام این کار دارد؛ شما می‌توانید داده‌های آزمایشی خود را در یک نقطه مشخص تقسیم کنید.

    X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33)
    
  4. اکنون آماده آموزش مدل خود هستید! مدل رگرسیون خطی را بارگذاری کنید و آن را با مجموعه‌های آموزشی X و y خود با استفاده از model.fit() آموزش دهید:

    model = linear_model.LinearRegression()
    model.fit(X_train, y_train)
    

    model.fit() یک تابع است که در بسیاری از کتابخانه‌های یادگیری ماشین مانند TensorFlow مشاهده خواهید کرد.

  5. سپس، با استفاده از داده‌های آزمایشی، یک پیش‌بینی ایجاد کنید، با استفاده از تابع predict(). این برای رسم خط بین گروه‌های داده استفاده خواهد شد.

    y_pred = model.predict(X_test)
    
  6. اکنون زمان نمایش داده‌ها در یک نمودار است. Matplotlib یک ابزار بسیار مفید برای این کار است. یک نمودار پراکندگی از تمام داده‌های آزمایشی X و y ایجاد کنید، و از پیش‌بینی برای رسم یک خط در مناسب‌ترین مکان، بین گروه‌های داده مدل استفاده کنید.

    plt.scatter(X_test, y_test,  color='black')
    plt.plot(X_test, y_pred, color='blue', linewidth=3)
    plt.xlabel('Scaled BMIs')
    plt.ylabel('Disease Progression')
    plt.title('A Graph Plot Showing Diabetes Progression Against BMI')
    plt.show()
    

    یک نمودار پراکندگی که نقاط داده درباره دیابت را نشان می‌دهد کمی فکر کنید که اینجا چه اتفاقی می‌افتد. یک خط مستقیم از میان نقاط کوچک زیادی از داده عبور می‌کند، اما دقیقاً چه کاری انجام می‌دهد؟ آیا می‌توانید ببینید که چگونه باید بتوانید از این خط برای پیش‌بینی محل قرارگیری یک نقطه داده جدید و دیده‌نشده نسبت به محور y نمودار استفاده کنید؟ سعی کنید کاربرد عملی این مدل را به زبان بیاورید.

تبریک می‌گویم، شما اولین مدل رگرسیون خطی خود را ساختید، با آن یک پیش‌بینی انجام دادید و آن را در یک نمودار نمایش دادید!


🚀چالش

یک متغیر دیگر از این مجموعه داده را رسم کنید. نکته: این خط را ویرایش کنید: X = X[:,2]. با توجه به هدف این مجموعه داده، چه چیزی می‌توانید درباره پیشرفت بیماری دیابت کشف کنید؟

آزمون پس از درس

مرور و مطالعه شخصی

در این آموزش، شما با رگرسیون خطی ساده کار کردید، نه رگرسیون تک‌متغیره یا چندمتغیره. کمی درباره تفاوت‌های این روش‌ها بخوانید یا به این ویدیو نگاهی بیندازید.

بیشتر درباره مفهوم رگرسیون بخوانید و فکر کنید که چه نوع سوالاتی می‌توانند با این تکنیک پاسخ داده شوند. این آموزش را بگیرید تا درک خود را عمیق‌تر کنید.

تکلیف

یک مجموعه داده متفاوت


سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.