40 گام به سوی آینده‌ای هوشمند - مجموعه وبینارهای رایگان در حوزه هوش مصنوعی
Filter by دسته‌ها
chatGTP
آموزش هوش مصنوعی و انواع آن
آموزش‌های پایه‌ای هوش مصنوعی
اصول هوش مصنوعی
پایتون و ابزارهای یادگیری عمیق
کتابخانه‌ های یادگیری عمیق
یادگیری با نظارت
یادگیری بدون نظارت
یادگیری تقویتی
یادگیری عمیق
یادگیری نیمه نظارتی
آموزش‌های پیشرفته هوش مصنوعی
بینایی ماشین
پردازش زبان طبیعی
پردازش گفتار
چالش‌های عملیاتی
داده کاوی و بیگ دیتا
رایانش ابری و HPC
سیستم‌‌های امبدد
علوم شناختی
دیتاست
اخبار
تیتر یک
رسانه‌ها
آموزش پردازش زبان طبیعی
آموزش علوم داده
اینفوگرافیک
پادکست
ویدیو
رویدادها
کاربردهای هوش مصنوعی
کسب‌و‌کار
تحلیل بازارهای هوش مصنوعی
کارآفرینی
هوش مصنوعی در ایران
هوش مصنوعی در جهان
 آنچه متخصصین علوم داده باید درباره پیش پردازش داده بدانند

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

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

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

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

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

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

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

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

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

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

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

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

import sklearn

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

from sklearn import preprocessing

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

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

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

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

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

from sklearn import preprocessing
import numpy as np
x = np.array([[1, 2, 3],
[ ۴,  ۵,  ۶],
[ ۷,  ۸, ۹]])
y_scaled = preprocessing.scale(x)
print(y_scaled)

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

پیش پردازش داده
داده‌های مقیاس بندی شده

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

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

from sklearn.preprocessing import MinMaxScaler
import numpy as np
x = MinMaxScaler(feature_range=(0,8))
y = np.array([[1, 2, 3],
[ ۴,  -۵,  -۶],
[ ۷,  ۸, ۹]])
scale = x.fit_transform(y)
scale

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

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

نرمال‌سازی

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

from sklearn import preprocessing
import numpy as np
X = [[1,2,3],
[۴,-۵,-۶],
[۷,۸,۹]]
y = preprocessing.normalize(X)
y

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

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

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

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

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

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

import sklearn.preprocessing
import numpy as np
enc = preprocessing.OrdinalEncoder()
X = [['a','b','c','d'], ['e', 'f', 'g', 'h'],['i','j','k','l']]
enc.fit(X)
enc.transform([['a', 'f', 'g','l']])

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

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

  • OneHotEncode: این انکودر با استفاده از مقادیر احتمالی n_categories  هر یک از ویژگی‌های رسته‌ای را به ویژگی‌های باینری n_categories  تبدیل می‌کند، به نحوی که یکی از آن‌ها ۱ و سایر ویژگی‌ها برابر با ۰ خواهند بود. برای درک بهتر این مطلب به مثال مقابل توجه کنید:
import sklearn.preprocessing
import numpy as np
enc = preprocessing.OneHotEncoder()
X = [['a','b','c','d'], ['e', 'f', 'g', 'h'],['i','j','k','l']]
enc.fit(X)
enc.transform([['a', 'f', 'g','l']]).toarray().reshape(4,3)
پیش پردازش داده
داده‌های کدبندی شده

گسسته‌سازی

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

import sklearn.preprocessing 
import numpy as np
X = np.array([[ 1,2,3],
              [-۴,-۵,۶],
              [۷,۸,۹]])
dis = preprocessing.KBinsDiscretizer(n_bins=[3, 2, 2], encode='ordinal')
dis.fit_transform(X)

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

پیش پردازش داده
گسسته سازی داده

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

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

from sklearn.impute import SimpleImputer
import numpy as np
impute = SimpleImputer(missing_values=np.nan, strategy='mean')
X = [[np.nan, 1,2], [3,4, np.nan], [5, np.nan, 6]]
impute.fit_transform(X)

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

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

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

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

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
x = np.array([[1,2],
              [۳,۴]])
nonl = PolynomialFeatures(2)
nonl.fit_transform(x)

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

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

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

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

import sklearn.preprocessing 
import numpy as np
transformer = preprocessing.FunctionTransformer(np.log1p, validate=True)
X = np.array([[1,2,3],
              [۴,۵,۶],
              [۷,۸,۹]])
transformer.transform(X)

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

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

جمع‌بندی

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

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

میانگین امتیاز / ۵. تعداد ارا :

مطالب پیشنهادی مرتبط

اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
[wpforms id="48325"]