پیش پردازش داده
آموزش‌های پیشرفته هوش مصنوعیاصول هوش مصنوعیداده کاوی و بیگ دیتا

آنچه متخصصین علوم داده باید درباره پیش پردازش داده بدانند

    0
    مدت زمان مطالعه: ۷ دقیقه

    آشنایی با مفاهیم پیش پردازش داده و اجرای آن‌ها در هنگام استفاده از کتابخانه scikit learn

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

    پیش پردازش داده

    پیش از ساخت مدل ML و به منظور تحلیل داده‌ها و استخراج دانسته‌ها از آن‌ها لازم است داده‌ها را پردازش کنیم؛ به  بیان ساده‌تر باید داده‌ها را به صورتی درآوریم که برای مدل‌ قابل فهم باشند. دلیل آن هم این است که ماشین‌ها قادر به درک داده‌هایی با فرمت تصویر، فایل صوتی و غیره ارائه می‌شوند، نیستند.

    داده‌ها به نحوی پردازش (با فرمتی مناسب) می‌شوند که الگوریتم به سادگی بتواند آن‌ها را تفسیر کند و خروجیِ مورد انتظار را تولید کند.

    داده‌هایی که در دنیای واقعی استفاده می‌کنیم بی نقض نیستند؛ این داده‌ها ناکافی، غیرمنسجم ( دارای داده‌ پرت و مقادیر نویزی) و ساختارنیافته هستند. پیش پردازش داده های خام به سازمان‌دهی، مقیاس‌بندی، پاک‌سازی (حذف داده‌های پرت) و استانداردسازی آن‌ها کمک می‌کند؛ به عبارت دیگر در این فرایند داده‌های خام ساده می‌شوند و می‌توانیم آن‌ها را به الگوریتم ML تغذیه کنیم.

    فرایند پیش پردازش داده از چندین مرحله تشکیل شده است:

    • پاک‌سازی داده: داده‌هایی که استفاده می‌کنیم ممکن است داده گمشده Missing point (برای مثال سطرها و ستون‌هایی که هیچ مقداری در آن‌ها وجود ندارد) و یا داده نویزی (داده‌های بی‌ربط که ماشین در تفسیر آن‌ها به مشکل می‌خورد) داشته باشند. برای رفع مشکلاتی که به آن‌ها اشاره شد می‌توانیم سطرها و یا ستون‌های خالی را حذف کنیم و یا آن‌ها را با مقادیر دیگر پُر کنیم و برای داده‌های نویزی هم می‌توانیم از متدهای همچون رگرسیون و خوشه‌بندی استفاده کنیم.
    • تبدیل داده: تبدیل داده به فرایندی اطلاق می‌شود که طی آن داده‌های خام به فرمتی قابل فهم برای مدل تبدیل می‌شوند. فرایند تبدیل داده از مراحل گوناگونی از جمله کدبندی رسته‌ای Categorical encoding ، مقیاس‌بندی، نرمال‌سازی، استانداردسازی و غیره.
    • کاهش داده: این کار ضمن حفظ یکپارچگی داده‌های اصلی به کاهش اندازه داده‌ها کمک می‌کند (برای تحلیل آسان‌تر).

    کتابخانه Scikit-learn و پیش پردازش داده ها

    Scikit-learn یک کتابخانه ML است که به صورت متن‌باز در دسترس است. این کتابخانه دارای ابزارهای مختلفی است و برای نمونه می‌توان به الگوریتم‌هایی برای جنگل‌های تصادفی، طبقه‌بندی، رگرسیون و البته پیش پردازش داده ها اشاره کرد. این کتابخانه بر روی NumPy و SciPy ساخته شده و یادگیری و کار کردن با آن آسان است.

    برای بارگذاری این کتابخانه در فضای کاری (workspace) می‌توانید از کد مقابل استفاده کنید:

    برای بارگذاری ویژگی‌ها (ابزارها) که در فرایند پیش پردازش داده کاربرد دارند می‌توانید از کد زیر استفاده کنید:

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

    استانداردسازی

    استانداردسازی تکنیکی برای مقیاس‌بندی داده‌ها است به نحوی که میانگین داده‌ها صِفر (۰) و انحراف معیار یک (۱) شود. در این تکنیک داده‌ها به دامنه خاصی محدود نیستند.  زمانی‌که دامنه تغییرات (Range) میان ویژگی‌های دیتاست ورودی طولانی باشد می‌توانیم از تکنیک استانداردسازی استفاده کنیم.

    پیش پردازش داده

    فرمول استانداردسازی داده‌ها

    به مثال روبه‌رو توجه کنید:

    در این مثال ابعاد آرایه ورودی ۳×۳ است و مقادیر آن در بازه ۱ تا ۹ قرار دارند. با استفاده از تابع

    scale که در preprocessing قرار دارد می‌توانیم داده‌ها را مقیاس‌بندی کنیم.

    پیش پردازش داده

    داده‌های مقیاس بندی شده

    StandardScaler  یکی دیگر از توابع موجود در این کتابخانه است؛ با استفاده از این تابع می‌توانیم میانگین و انحراف معیارِ دیتاست آموزشی را محاسبه کنیم و با اجرای Transformer API  مجدداً همان تبدیلات را بر روی دیتاست آموزشی اعمال کنیم.

    اگر بخواهیم ویژگی‌ها در یک دامنه مشخص مقیاس‌بندی شوند می‌توانیم از MinMaxScaler  (با استفاده از پارامتر feature_range=(min,max )) و یا MinAbsScaler  استفاده کنیم ( تفاوت آن‌ها در این است که حداکثر مقدار مطلقِ هر ویژگی در MinAbsScaler طبق اندازه واحد مقیاس‌بندی می‌شود).

    در این مثال، مقادیر آرایه‌ای با ابعاد ۳×۳ در بازه (۰,۸) قرار دارند و با اجرای تابع .fit_transform() توانستیم همان تبدیلات را بر روی دیتاست دیگری هم اِعمال کنیم.

    پیش پردازش داده

    نرمال‌سازی

    در تکنیک نرمال‌سازی داده‌ها در بازه ۱- و ۱ قرار می‌گیرند؛ به عبارت دیگر مقادیر (مقیاس)‌ داده‌ها یکسان‌سازی می‌شود. اجرای این تکنیک این اطمینان را به ما می‌دهد که مقادیر بزرگِ دیتاست بر فرایند یادگیری مدل تأثیر نمی‌گذارند و تأثیر یکسانی بر روند یادگیری مدل دارند. در صورتی که بخواهیم شباهت میان دو نمونه، برای مثال ضرب نقطه‌ای، را به صورت عددی نشان دهیم، می‌توانیم از این تکنیک استفاده کنیم.

    پیش پردازش داده

    این ماژول جایگزین دیگری برای Transformer API دارد، با اجرای تابع Normalizer نیز می‌توانیم همین عملیات را انجام دهیم.

    کدبندی ویژگی‌های رسته‌ای

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

    این ماژول دارای دو تابع است که با اجرای آن‌ها می‌توانیم ویژگی‌های رسته‌ای را کدبندی کنیم:

    OrdinalEncoder: با اجرای این تابع ویژگی‌های رسته‌ای به مقادیر صحیح تبدیل می‌شوند، به این صورت که تابع هر یک از ویژگی‌های رسته‌ای را به یک ویژگی جدید از مقادیر صحیح (۰ تا ۱-n_categories ) تبدیل می‌کند.

    در این مثال سه رسته به صورت ۰,۱,۲ کدبندی شده‌اند و خروجیِ ورودی فوق به صورت زیر است:

    پیش پردازش داده

    • OneHotEncode: این انکودر با استفاده از مقادیر احتمالی n_categories  هر یک از ویژگی‌های رسته‌ای را به ویژگی‌های باینری n_categories  تبدیل می‌کند، به نحوی که یکی از آن‌ها ۱ و سایر ویژگی‌ها برابر با ۰ خواهند بود. برای درک بهتر این مطلب به مثال مقابل توجه کنید:
    پیش پردازش داده

    داده‌های کدبندی شده

    گسسته‌سازی

    در فرایند گسسته‌سازی ویژگی‌های پیوسته‌ی داده‌ها به مقادیر مجزا تبدیل می‌شوند ( این فرایند با نام‌های binning و کوانتیزاسیون هم شناخته می‌شود). این فرایند مشابه ایجاد یک هیستوگرام با استفاده از داده‌های پیوسته است ( که در آن گسسته‌سازی بر اختصاص مقادیر ویژگی به این binها تمرکز دارد). برخی مواقع به کمک گسسته‌سازی می‌توانیم غیرخطی را در مدل‌های خطی تعریف کنیم.

    این تابع با استفاده از KBinsDiscretizer()  ویژگی‌ها را به   k عدد bin گسسته‌سازی می‌کند. خروجی به صورت پیش‌ فرض one-hot encoded می‌شود و به کمک پارامتر encode می‌توانیم آن را تغییر دهیم.

    پیش پردازش داده

    گسسته سازی داده

    جایگذاری مقادیر گمشده

    در این فرایند مقادیر گمشده‌ ( Nanها، فضاهای خالی و غیره) با نسبت دادن یک مقدار به آن‌ها پردازش می‌شوند (فرایند جایگذاری بر مبنای بخش‌های مشخص دیتاست انجام می‌شود)، در نتیجه مدل می‌تواند داده‌ها را پردازش کند. برای درک بهتر این فرایند به مثال زیر توجه کنید:

    در این مثال، برای جایگذاری مقادیر گمشده از تابع SimpleImputer()  استفاده کردیم. پارامتر‌هاییی که در این تابع مورد استفاده قرار گرفتند عبارتند از: missing_values ، برای مشخص کردن مقادیر گمشده‌ای که باید جایگذاری شوند، strategy ، برای مشخص کردن شیوه جایگذاری مقادیر، همان‌گونه که در مثال فوق مشاهده می‌کنید ما از mean  استفاده کردیم؛ منظور از mean  این است که مقادیر گمشده با میانگین مقادیر موجود در ستون جایگزین خواهند شد. از پارامترهای دیگری همچون میانه و مد، most_frequent  (بر مبنای بشامد تکرار یک مقدار در یک ستون) یا constant  (مقدار ثابت) هم می‌توانیم برای strategy  استفاده کنیم.

    پیش پردازش داده

    جایگذاری مقادیر گمشده

    ایجاد ویژگی‌های چندجمله‌ای

    برخی مواقع برای اینکه مدل به نتایج دقیق‌تری دست پیدا کند بهتر است مدل را با غیرخطی کردن آن پیچیده کنیم. برای انجام این کار می‌توانیم تابع PolynomialFeatures()  را اجرا کنیم.

    پیش پردازش داده

    در مثال فوق، در تابع PolynomialFeatures()   میزان غیر خطی بودن مدل را  ۲ تعیین کردیم. مقادیر ویژگیِ آرایه ورودی از (X1,X2) به (۱,X1,X2,X1۲, X1*X2,X2۲) تبدیل شدند.

    مبدل‌های سفارشی

    اگر بخواهیم با استفاده از یک تابع خاص (موجود در پایتون) کُل داده‌ها را برای عملیات خاصی همچون پردازش و یا پاک‌سازی داده‌ها تبدیل کنیم، با اجرای تابع FunctionTransformer()  می‌توانیم یک مبدل سفارشی بسازیم و تابع مورد نظر را در آن بنویسیم.

    در این مثال، برای تبدیل مقادیر دیتاست از تابع لگاریتمی استفاده کردیم:

    پیش پردازش داده

    اجرای مبدل‌های سفارشی

    جمع‌بندی

    امیدوارم این مقاله به شما در درک بهتر مفاهیم و مراحل پیش پردازش داده در مدل‌های ML کمک کرده باشد و بتوانید این تکنیک‌ها را در داده‌های واقعی هم به کار ببندید.

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

    این مطلب چه میزان برای شما مفید بوده است؟
    [کل: ۰ میانگین: ۰]

    گفتگوی ویژه با دکتر علی رسولی زاده: پشتیبانی و مانع زدایی در شرکت‌های دانش‌بنیان

    مقاله قبلی

    اپلیکیشن های نسل بعد از GPT-3 تغذیه می‌کنند

    مقاله بعدی

    شما همچنین ممکن است دوست داشته باشید

    نظرات

    پاسخ دهید

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