برنامه نویسی و طراحی سایت

آموزش تقسیم داده در یادگیری ماشین با پایتون — راهنمای کاربردی

آموزش تقسیم داده در یادگیری ماشین با پایتون — راهنمای کاربردی

عملیات تفکیک داده (تقسیم داده | Data Spliting) اغلب در یادگیری ماشین برای جداسازی داده‌ها به سه مجموعه آموزشی (Training Set)، آزمایشی (Test Set) و مجموعه اعتبارسنجی (Validation Set) مورد استفاده قرار می‌گیرد. در این مقاله به آموزش تقسیم داده در یادگیری ماشین با پایتون پرداخته شده است.

فهرست مطالب این نوشته
تقسیم داده در یادگیری ماشین چیست؟

چرا داده در یادگیری ماشین اهمیت دارد؟

آموزش تقسیم داده در یادگیری ماشین با پایتون

فراخوانی کتابخانه های مورد نیاز برای تقسیم داده در یادگیری ماشین با پایتون

بارگذاری داده‌ها برای پیاده‌سازی پروژه تقسیم داده در یادگیری ماشین با پایتون

تقسیم داده‌های آیریس به دو مجموعه Train و Test در پایتون

تقسیم داده‌ها به دو مجموعه Train و Test در پایتون به شکل قابل بازتولید

بررسی ابعاد داده برای تقسیم داده ها در یادگیری ماشین با پایتون

تفکیک داده برای اعتبارسنجی در یادگیری ماشین با پایتون چگونه انجام می‌شود؟

نسبت داده ها برای تقسیم داده‌های تست و Validation به صورت مساوی

طراحی تابع تقسیم داده در پایتون

۷. تعیین شکل خروجی تابع تقسیم داده در پایتون

۸. شکل نهایی تابع تقسیم داده در یادگیری ماشین با پایتون

افزودن ویژگی‌هایی برای بهبود قابلیت تنظیم تابع تقسیم داده در پایتون

جمع‌بندی

faradars mobile

تقسیم داده در یادگیری ماشین چیست؟

جداسازی و تفکیک داده‌ها (تقسیم داده‌ها) به داده‌های آموزشی و داده‌های آزمایشی (Train-Test Split) روشی برای سنجش کیفیت عملکرد یک الگوریتم یادگیری ماشین به حساب می‌آید. از تفکیک داده می‌توان برای مسائل دسته‌بندی (Classification) یا رگرسیون (Regression) استفاده کرد و به طور کلی این رویکرد در هر نوع الگوریتم یادگیری نظارت شده‌ای کاربرد دارد.

آموزش پیش بینی با الگوریتم های یادگیری ماشین در پایتون – پیش بینی نارسایی قلبی
فیلم آموزش پیش بینی با الگوریتم های یادگیری ماشین در پایتون – پیش بینی نارسایی قلبی در تم آف

کلیک کنید

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

  • مقاله‌های پیشنهادی:
    • دسته بندی داده ها با پایتون — راهنمای کاربردی
    • رگرسیون خطی ساده — مفهوم و محاسبات به زبان ساده (+ دانلود فیلم آموزش رایگان)
    • یادگیری نظارت شده (Supervised Learning) با پایتون — راهنمای جامع

چرا داده در یادگیری ماشین اهمیت دارد؟

در علم یادگیری ماشین، داده‌ها بسیار اهمیت دارند و به نوعی سوختِ کار به حساب می‌آیند. اهمیت داده در یادگیری ماشین به دو دلیل است:

آموزش یادگیری ماشین با پایتون – ماشین لرنینگ با Python
فیلم آموزش یادگیری ماشین با پایتون – ماشین لرنینگ با Python در تم آف

کلیک کنید

  1. مدل برای یادگیری به داده نیاز دارد، به طوری که می‌توان گفت: “کار مدل، استخراج و استفاده از علم موجود در داده‌ها است.”
  2. برای سنجش مدل، نیاز به داده داریم، زیرا ممکن است مدل نتوانسته باشد به خوبی اطلاعات موجود در داده‌ها را استخراج کند.
آموزش تفکیک داده در یادگیری ماشین با پایتون

آموزش تقسیم داده در یادگیری ماشین با پایتون

برای بخش اول فرآیند یادگیری ماشین، از داده‌های آموزشی (Train) استفاده می‌شود و برای پایش (Monitoring) و بعضاً قطع کردن یادگیری مدل، می‌توان از داده‌های اعتبارسنجی (Validation) استفاده کرد. برای بخش دوم این فرآیند نیز از داده‌های آزمایشی (Test) استفاده می‌شود. از بین این 3 دسته داده، می‌توان داده‌های Validation را استفاده نکرد؛ هرچند وجود آن‌ها به تنظیم بهتر برخی از اَبَرپارامترها (Hyperparameters) کمک شایانی می‌کند.

آموزش یادگیری ماشین و پیاده سازی در پایتون Python – بخش یکم
فیلم آموزش یادگیری ماشین و پیاده سازی در پایتون Python – بخش یکم در تم آف

کلیک کنید

فراخوانی کتابخانه های مورد نیاز برای تقسیم داده در یادگیری ماشین با پایتون

اکنون وارد محیط پایتون شده و ابتدا باید کتابخانه‌های مورد نیاز را فراخوانی کرد:

import numpy as np
import sklearn.model_selection as ms

کتابخانه‌ Numpy برای کار با آرایه‌ها و بخش انتخاب مدل (Model Selection) در کتابخانه Sklearn یا همان کتابخانه Scikit-Learn برای تقسیم داده‌ها مورد نیاز است.

آموزش کتابخانه scikit-learn در پایتون – الگوریتم های یادگیری ماشین
فیلم آموزش کتابخانه scikit-learn در پایتون – الگوریتم های یادگیری ماشین در تم آف

کلیک کنید

بارگذاری داده‌ها برای پیاده‌سازی پروژه تقسیم داده در یادگیری ماشین با پایتون

حال برای تقسیم داده‌ها نیاز به داده وجود دارد؛ برای این پروژه مجموعه داده IRIS مورد استفاده قرار گرفته است. برای بارگذاری داده‌های IRIS هم از کتابخانه‌ی Sklearn به صورت زیر استفاده می‌شود:

import sklearn.datasets as dt

IRIS=dt.load_iris()

X = IRIS.data
Y = IRIS.target

به این ترتیب، داده‌های مورد نیاز وارد محیط برنامه نویسی می‌شوند.

تقسیم داده‌های آیریس به دو مجموعه Train و Test در پایتون

اگر تنها نیاز به داده‌های Train و Test وجود داشته باشد، می‌توان به صورت زیر عمل کرد:

trX, teX, trY, teY = ms.train_test_split(X, Y, train_size=0.7)

در نتیجه‌ اجرای خط کد فوق، 70 درصد داده‌ها برای آموزش و 30 درصد آن‌ها برای آزمایش تخصیص داده خواهند شد؛ این فرآیند به صورت تصادفی اتفاق خواهد افتاد اما، X هر داده با ِY همان داده متناظر باقی خواهد ماند.

آموزش کتابخانه های NumPy و Matplotlib در پایتون
فیلم آموزش کتابخانه های NumPy و Matplotlib در پایتون در تم آف

کلیک کنید

تقسیم داده‌ها به دو مجموعه Train و Test در پایتون به شکل قابل بازتولید

باید توجه داشت که این کد در هر بار اجرا، داده‌ها را به روش‌های متفاوتی تقسیم می‌کند و برنامه به شکل یکسان قابل بازتولید (Reproducible) نخواهد بود و اگر نیاز باشد، می‌توان Ransom State را به صورت زیر تنظیم کرد:

trX, teX, trY, teY = ms.train_test_split(X, Y, train_size=0.7, random_state=2)

به این ترتیب، در هر بار اجرا، داده‌ها به یک روش یکسانی تقسیم خواهند شد. باید توجه داشت که ترتیب خروجی‌های تابع train_test_split ابتدا برای Xها و سپس برای Yها است و در مرحله‌ی بعد نیز اولویت با داده‌های Train خواهد بود.

بررسی ابعاد داده برای تقسیم داده ها در یادگیری ماشین با پایتون

حالا می‌توان ابعاد داده‌ها را بررسی کرد:

print(f'{X.shape = } -- {Y.shape = }')
print(f'{trX.shape = } -- {trY.shape = }')
print(f'{teX.shape = } -- {teY.shape = }')

خروجی به صورت زیر است:

X.shape = (150, 4) -- Y.shape = (150,)
trX.shape = (105, 4) -- trY.shape = (105,)
teX.shape = (45, 4) -- teY.shape = (45,)

بنابراین هم نسبت داده‌ها و هم اندازه اولین بُعد داده‌ها رعایت شده است. اما اگر قصد انجام اعتبارسنجی یا همان Validation هم روی داده‌ها وجود داشته باشد، باید کمی متفاوت‌تر عمل کرد.

آموزش تخمین خطای طبقه بندی یا کلاسیفایر در داده کاوی
فیلم آموزش تخمین خطای طبقه بندی یا کلاسیفایر در داده کاوی در تم آف

کلیک کنید

تفکیک داده برای اعتبارسنجی در یادگیری ماشین با پایتون چگونه انجام می‌شود؟

ابتدا می‌توان داده‌های Train (داده‌های آموزشی) را جدا کرد و سپس در مرحله بعد جداسازی داده‌های اعتبارسنجی را از داده‌های آزمایشی انجام داد:

trX, X2, trY, Y2 = ms.train_test_split(X, Y, train_size=0.7, random_state=2)

vaX, teX, vaY, teY = ms.train_test_split(X2, Y2, train_size=0.5, random_state=2)

در این بخش، ۷۰ درصد داده‌ها در ابتدا برای آموزش جدا شده‌اند و باقی‌مانده آن‌ها در متغیرهای X2 و Y2 ذخیره می‌شوند.

آموزش یادگیری ماشین Machine Learning با پایتون Python
فیلم آموزش یادگیری ماشین Machine Learning با پایتون Python در تم آف

کلیک کنید

نسبت داده ها برای تقسیم داده‌های تست و Validation به صورت مساوی

حال می‌توان X2 و Y2 را به صورت 1:1 بین داده‌های آزمایشی و داده‌های اعتبارسنجی تقسیم کرد؛ نسبت‌های نهایی به صورت زیر خواهند بود:

$$ Train = 0.7 = 70 % $$
$$ Validation + Test = 0.3 = 30 % $$
$$ Validation = 0.5 times 0.3 = 0.15 =15 % $$
$$ Test = 0.5 times 0.3 = 0.15 = 15 % $$

باید توجه داشت که در تابع دوم مقدار train_size اندازه اولین مجموعه خروجی تابع را نشان می‌دهد که در این کد برابر با مجموعه اعتبارسنجی شده است. حال دوباره می‌توان ابعاد داده‌ها را بررسی کرد:

print(f'{X.shape = } -- {Y.shape = }')
print(f'{trX.shape = } -- {trY.shape = }')
print(f'{vaX.shape = } -- {vaY.shape = }')
print(f'{teX.shape = } -- {teY.shape = }')

خروجی به صورت زیر خواهد بود:

X.shape = (150, 4) -- Y.shape = (150,)
trX.shape = (105, 4) -- trY.shape = (105,)
vaX.shape = (22, 4) -- vaY.shape = (22,)
teX.shape = (23, 4) -- teY.shape = (23,)

طراحی تابع تقسیم داده در پایتون

حال می‌توان تابعی طراحی کرد که همین عملیات را انجام دهد و کارهای کدنویسی را تسهیل کند. برای انجام این کار، ابتدا در ورودی، داده‌ها و اندازه مجموعه‌های Train و Validation دریافت می‌شوند::

def Split (X:np.ndarray, Y:np.ndarray, trS:float, vaS:float):

باید توجه داشت که لازم است جنس داده‌ها از نوع آرایه‌های n-بعدی Numpy باشد و اندازه هر مجموعه نیز عددی اعشاری و از 0 تا 1 خواهد بود. حال باید داده‌های Train را جدا کرد:

    trX, X2, trY, Y2 = ms.train_test_split(X, Y, train_size=trS)

سپس نیاز است داده‌های Validation و Test جدا شوند. برای این کار ابتدا باید اندازه داده‌های Test را یافت:

    teS = 1 - trS - vaS

حال می‌توان داده‌های بخش دوم را تقسیم کرد:

    vaX, teX, vaY, teY = ms.train_test_split(X2, Y2, train_size=vaS/(vaS+teS))

به این ترتیب، هر سه مجموعه داده از هم جدا می‌شوند.

آموزش مقدمه ای در رابطه با یادگیری ماشین با پایتون (Python) (رایگان)
فیلم آموزش مقدمه ای در رابطه با یادگیری ماشین با پایتون (Python) (رایگان) در تم آف

کلیک کنید

۷. تعیین شکل خروجی تابع تقسیم داده در پایتون

حال می‌توان خروجی تابع را تعریف کرد؛ اما از آن جایی که 6 آرایه در خروجی دریافت می‌شود و ممکن است در هنگام استفاده باعث بروز خطاهایی شود، از نوع داده دیکشنری در پایتون استفاده شده است:

    Output = {'X':{'tr':trX,
                   'va':vaX,
                   'te':teX},
              'Y':{'tr':trY,
                   'va':vaY,
                   'te':teY}}

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

۸. شکل نهایی تابع تقسیم داده در یادگیری ماشین با پایتون

حال دیکشنری حاصل در خروجی بازگردانده می‌شود و تابع شکل نهایی زیر را به خود می‌گیرد:

def Split (X:np.ndarray, Y:np.ndarray, trS:float, vaS:float):
    trX, X2, trY, Y2 = ms.train_test_split(X, Y, train_size=trS)
    teS = 1 - trS - vaS
    vaX, teX, vaY, teY = ms.train_test_split(X2, Y2, train_size=vaS/(vaS+teS))
    Output = {'X':{'tr':trX,
                   'va':vaX,
                   'te':teX},
              'Y':{'tr':trY,
                   'va':vaY,
                   'te':teY}}
    return Output

حال می‌توان این تابع را به شکل زیر فراخوانی و استفاده کرد:

SD = Split(X, Y, 0.7, 0.15)

آرایه‌ها نیز به این شکل در دسترس خواهند بود:

trX = SD['X']['tr']
teY = SD['Y']['te']

به این ترتیب، احتمال خطا نیز پایین خواهد آمد.

آموزش یادگیری ماشین با پایتون – ماشین لرنینگ با Python
فیلم آموزش یادگیری ماشین با پایتون – ماشین لرنینگ با Python در تم آف

کلیک کنید

افزودن ویژگی‌هایی برای بهبود قابلیت تنظیم تابع تقسیم داده در پایتون

تابع تا اینجا کامل است، اما باید تعدادی ویژگی به آن اضافه شود تا رفتار آن قابل تنظیم‌تر باشد. اولین مورد، تنظیم Random State در ورودی و استفاده از آن برای تقسیم داده‌ها است. دومین مورد نیز کنترل کردن سایز Train و Validation است. پس از اصلاح این دو مورد، تابع ما شکل زیر را به خود می‌گیرد:

def Split (X:np.ndarray, Y:np.ndarray, trS:float, vaS:float, RS:int=None):
    assert trS + vaS 

باید توجه داشت که برای RS مقدار پیش‌فرض None قرار داده شده است، زیرا امکان دارد تحت شرایطی، قصد Fix کردن Random State وجود نداشته باشد. برای ایجاد پیام خطا در مورد اندازه داده‌ها نیز از assert استفاده می‌شود و برای مثال اگر تابع به اشتباه به شکل زیر فراخوانی شود، خطا رخ خواهد داد:

SD = Split(X, Y, 0.8, 0.4)

خطای مربوطه به صورت زیر خواهد بود:

Exception has occurred: AssertionError
Train Size + Validation Size Must be Smaller Than 1

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

مجموعه آموزش داده کاوی و یادگیری ماشین
فیلم مجموعه آموزش داده کاوی و یادگیری ماشین در تم آف

کلیک کنید

جمع‌بندی

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.