در مقاله قبل با دیتاست یادگیری ماشین و انواع نمودارهای بصری سازی دادهها آشنا شدیم و فهمیدیم بیگ دیتا چیست. اما دادههای جمع آوری شدهای که در دیتاست میبینیم را نمیتوان مستقیما برای آموزش مدل استفاده کرد. مشابه برخی از انواع میوهها، معمولاً مجموعهدادهها هم قبل از استفاده بهنوعی پاکسازی اولیه و تغییرات انسانی نیاز دارند. برای علم داده و یادگیری ماشین بهصورت گستردهتر، روشهای مختلفی برای پیش پردازش دادهها وجود دارد که در این قسمت با آنها آشنا میشویم.
دیتاست رایگان یادگیری ماشین: در کانال تلگرام پرشین دیتا، به دیتاست رایگان برای پروژههای یادگیری ماشین و هوش مصنوعی دسترسی داشته باشید.
. . . .
پیش پردازش داده ها
پیش پردازش دادهها، فرایندی فنی باهدف بهبود مجموعهدادهها برای قابلاستفاده شدن آنهاست. این فرایند شامل تغییر و گاهی حذف دادههای ناکامل (Incomplete)، دارای فرمت نادرست، نامربوط و تکراری (Duplicate) است. همچنین گاهی نیاز به تبدیل داده متنی به مقادیر عددی و بازطراحی ویژگیها میشود. در یک پروژه تحلیل داده، معمولاً پیش پردازش داده ها زمانبرترین قسمت است.
انتخاب ویژگی (Feature Selection)
انتخاب ویژگی از مهمترین کارهایی است که برای پیش پردازش داده ها انجام میشود. برای تولید بهترین نتیجه و خروجی از داده، ابتدا باید مرتبطترین متغیرها به فرضیه خود را شناسایی کنید. باید در انتخاب متغیرها برای طراحی مدل سختگیرانه عمل کنید.
بهجای ساختن یک نمودار پراکندگی چهاربُعدی با چهار ویژگی در مدل، ممکن است فرصتی پیش بیاید تا بتوانید دو ویژگی بسیار مرتبط را انتخاب کنید و یک نمودار دوبُعدی تفسیر پذیرتر بسازید. همچنین، نگهداری ویژگیهایی که همبستگی (Correlate) قویای با مقدار خروجی ندارند، میتواند دقت مدل را دستکاری و از مسیر اصلی خارج کنند. به جدول دادههای مربوط به زبانهای در حال انقراض دانلود شده از Kaggle توجه کنید.
منبع: www.kaggle.com/the-guardian/extinct-languages
برای پاکسازی داده، فرض کنید هدف شناسایی متغیرهایی است که یک زبان را در معرض خطر قرار میدهند. بر اساس این هدف، احتمالاً نام زبان به اسپانیایی حاوی اطلاعات معناداری نیست. پس میتوانیم این بردار (ستون) را از مجموعهداده حذف کنیم. این کار از پیچیدگی بیش از حد و دقت پایین مدل جلوگیری میکند و همچنین باعث بهبود سرعت کلی پردازش مدل میشود.
دوم این که مجموعهداده، اطلاعات تکراری را در دو ستون جداگانه “کشورها” و “کد کشور” نگهداری میکند. حفظ هر دو، اطلاعات اضافهای ارائه نمیدهد؛ در نتیجه، میتوانیم یکی از دو بردار را انتخاب و نگهداریم و دیگری را حذف کنیم تا پاکسازی داده انجام شود.
روش دیگر برای کاهش تعداد ویژگیها در پیش پردازش داده ها، ترکیب دو ویژگی است. در جدول بعدی، لیستی از محصولات فروخته شده در یک پلتفرم تجارت الکترونیک (E-Commerce) داریم. مجموعهداده شامل چهار خریدار و هشت محصول است. این یک نمونه بزرگ از خریداران و محصولات نیست – علت آن محدودیت فضایی فرمت کتاب است. یک پلتفرم تجارت الکترونیک در دنیای واقعی تعداد بیشتری ستون دارد، ولی اجازه بدهید با همین مثال ادامه بدهیم.
برای تحلیل بهینهتر و پاکسازی دادهها، میتوانیم تعداد ستونها را با یکی کردن ویژگیهای (ستون) مشابه کاهش دهیم. برای مثال، میتوانیم نام هر محصول را حذف و 8 محصول را با تعداد کمتری از دستهها یا زیرگروهها جایگزین کنیم. چون تمام محصولات به تک دسته “تناسباندام” تعلق دارند، پس بر اساس زیرگروه مرتب میکنیم و تعداد ستونها را از 8 تا به 3 تا میرسانیم. 3 ستون زیرگروه محصولات “غذای سالم”، “پوشاک” و “دیجیتال” هستند.
این کار امکان تغییر مجموعهداده به صورتی که با تعداد کمتری متغیر، اطلاعات حفظ و نگهداری شوند را فراهم میکند. نکته منفی این تغییر این است که اطلاعات کمتری از ارتباط بین محصولات خاص داریم. در نتیجه بهجای پیشنهاد محصولات به کاربران بر اساس محصولات دیگر، پیشنهادات بر اساس رابطه بین زیرگروهها میباشد.
بااینوجود، این روش سطح بالایی از ارتباط بین داده را نگهداری میکند. به خریداران وقتی غذای سالم خرید میکنند، غذاهای سالم پیشنهاد میشود یا وقتی پوشاک میخرند (بسته به میزان همبستگی) کتابهای یادگیری ماشین را پیشنهاد نمیکند – البته درصورتیکه یک همبستگی زیادی وجود داشته باشد پیشنهاد خواهد داد! متأسفانه ولی چنین متغیری در چهارچوب مجموعهداده فعلی وجود ندارد. به یاد داشته باشید که کاهش داده (Data Reduction) همچنین یک تصمیم کسبوکاری هم هست و صاحبان کسبوکار در مشورت با تیم دانشمندان داده باید بین راحتی و دقت کلی مدل به یک توافق و مصالحه (Trade-Off) برسند.
دوره آموزشی: برای یادگیری روش های پیش پردازش داده ها در پروژه ها، آموزش رایگان یادگیری ماشین را در کانال یوتیوب دیتاهاب ببینید.
تبدیل دادهها (Data Transformation)
فشردهسازی ردیفها (Row Compression)
در پیش پردازش داده ها مشاهده می شود که برخی از دادهها، علاوه بر انتخاب ویژگی، امکان کاهش تعداد ردیفها و در نتیجه فشردهسازی تعداد کلی نقاط داده را فراهم میکنند. این کار میتواند شامل ادغام کردن دو یا تعداد بیشتری از ردیفها بشود. برای مثال، در مجموعهدادهای که در ادامه مشاهده میکنید، میتوان “ببر” و “شیر” را ادغام کرد و به “گوشتخوار” تغییر نام داد.
حال، با ادغام این دو ردیف (ببر و شیر)، مقدار ویژگیها برای هر دو ردیف باید ترکیب و در یک ردیف ثبت شوند. در این حالت، ادغام دو ردیف به علت اینکه مقادیر دستهای (Categorical) یکسانی را برای تمام ویژگیها به جز y (زمان دویدن) دارند، توجیهپذیر میکند. زمان دویدن ببر و شیر را میتوان جمع و تقسیم بر دو کرد.
مقادیر عددی، مثل زمان، معمولاً بهآسانی جمع میشوند مگر اینکه از نوع دستهای باشند. برای مثال، نمیتوان یک حیوان با چهارپا را با حیوانی با دوپا جمع کنیم! طبیعتاً امکان ادغام این ویژگی وجود ندارد و نمیتوان سه را بهعنوان میانگین تعداد پاها در نظر گرفت.
همچنین گاهی فشردهسازی ردیفها برای پیش پردازش داده ها، در زمانی که مقادیر عددی در دسترس نیستند، سخت میشود. برای مثال، مقادیر “ژاپن” و “آرژانتین” بسیار سخت ادغام میشوند. ولی کشورهای “ژاپن” و “کره جنوبی” میتوانند ادغام شوند، چون میتوان آنها را بهعنوان کشورهای یک قاره “آسیا” یا “آسیای شرقی” طبقهبندی کرد. بااینحال، اگر “پاکستان” و “اندونزی” را به همین گروه اضافه کنیم، احتمالاً نتایج یکپارچگی خود را از دست دهند، چون بین این چهار کشور تفاوتهای بزرگ فرهنگی، مذهبی، اقتصادی و دیگر تفاوتها وجود دارد.
به طور خلاصه، ردیفهایی با مقادیر غیرعددی و یا دستهای ممکن است برای ادغام مشکلساز شوند زیرا گاهی به مقادیر واقعی قبل از ادغام ردیفها احتیاج داریم. همچنین برای بیشتر دادهها، احتمال فشردهسازی ردیفها نسبت به فشردهسازی ویژگیها کمتر است.
روش کدگذاری وان هات (One Hot Encoding)
پس از انتخاب متغیرها و ردیفها، به دنبال ویژگیهای متنی (Text-based Feature) میروید تا آنها را به اعداد تبدیل کنید. جدای از مجموعهی ویژگیهای متنی مثل صحیح/غلط (که بهصورت خودکار به ترتیب به مقادیر “1” و “0” تبدیل میشوند)، بسیاری از الگوریتمها و همینطور نمودارهای پراکندگی از دادههای غیرعددی پشتیبانی نمیکنند.
یک راه برای تبدیل ویژگیهای متنی به مقادیر عددی در مرحله پیش پردازش داده ها استفاده از کدگذاری one-hot است که ویژگیها را به شکل دودویی (Binary) تبدیل میکند -“صحیح/1” یا “غلط/0”. “0”، نشاندهنده “غلط”، به این معنی است که ویژگی به یک دسته خاص تعلق ندارد، همانطور که “1” – صحیح یا hot- نشاندهنده تعلق ویژگی به یک دسته خاص میباشد.
در شکل زیر چکیدهی دیگری از مجموعهداده زبانهای در حال انقراض است که میتوانیم رمزگذاری one-hot را روی آن تمرین کنیم.
در ابتدا، توجه کنید مقادیر موجود در ستون “No. of Speakers” شامل کاما و فاصله نیست مثل “7,500,000” و “7 500 000”. اگرچه چنین فرمت عددنویسی برای چشم ما اعداد بزرگ را واضحتر میکند، ولی زبانهای برنامهنویسی به چنین نشانهگذاریهایی نیاز ندارند. در حقیقت، گاهی فرمتهای عددنویسی، بسته به زبان برنامهنویسی که استفاده میکنید، باعث خطاهای نحوی (Syntax) و یا باعث ایجاد یک نتیجه ناخواسته میشوند. پس به یاد داشته باشید که برای برنامهنویسی اعداد را بدون فرمت نگهدارید. ولی در مرحله بصریسازی با خیال راحت از کاما و فاصلهها استفاده کنید، چون درک اعداد را برای مخاطب آسانتر میکند!
در سمت راست جدول، یک بردار برای طبقهبندی درجه در خطر بودن 9 زبان مختلف وجود دارد. این ستون را با استفاده از شیوه رمزگذاری one-hot میتوانیم به مقادیر عددی تبدیل کنیم، همانطور که در جدول بعدی نشان داده شده است.
با استفاده از رمزگذاری one-hot، مجموعهداده به 5 ستون گسترشیافته است و از ویژگی اصلی (درجه در خطر بودن) که در ابتدا وجود داشته سه ویژگی جدید ساختیم. همینطور مقدار ستونهای جدید را باتوجه به مقدار ویژگی اصلی، “1” یا “0” قرار دادهایم.
این کار استفاده از داده بهعنوان ورودی برای مدلمان و انتخاب الگوریتم از بین یک طیف گستردهتر از الگوریتمهای یادگیری ماشین را امکانپذیر میکند. نکته منفی این است که ویژگیهای مجموعهداده بیشتر میشوند که ممکن است زمان پردازش را طولانیتر کند. البته این شرایط قابل مدیریت است ولی در مجموعهدادههایی که ویژگیهای اولیه به تعداد زیادی از ویژگیهای جدید شکسته میشوند، ممکن است مشکلساز شود.
یک ترفند برای حداقل کردن تعداد ویژگیها، محدودکردن حالتهای باینری به یک، تک ستون است. بهعنوان مثال، در مجموعهداده موجود در سایت kaggle، ویژگی “جنسیت” (Gender) با استفاده از رمزگذاری one-hot در یک ستون قرار گرفته است. بهجای ایجاد دو ستون مجزا برای “مرد” و “زن”، این دو ستون را در یک ستون ادغام کردهاند. باتوجهبه راهنمای مجموعهداده، مقدار”0” برای زنان و مقدار “1” برای مردان است. سازنده مجموعهداده از همین روش برای “هم نژاد (Same Race)” و “انطباق (Match)” استفاده کرده است.
منبع: http://www.kaggle.com/annavictoria/speed-dating-experiment
Binning
یکی دیگر از روش های پیش پردازش داده ها Binning است که روشی برای مهندسی ویژگی (Feature engineering) و تبدیل مقادیر عددی (Numerical) به یک دسته (Category) است.
سؤال مهمی که مطرح میشود آیا مقادیر عددی مناسب نبوده که به سراغ روش دیگری میرویم؟ خیر، مقادیر عددی در اکثر مواقع ترجیح داده میشوند مگر زمانی که مقادیر عددی یک ویژگی، شامل اطلاعاتی میشود که به هدف تحلیل ارتباطی ندارد. برای درک بهتر به سراغ مثال محاسبه قیمت خانه میرویم. احتمالاً ابعاد دقیق یک زمین تنیس، در ارزیابی قیمت خانه تأثیر مهمی نداشته باشد. ولی وجود یا عدم وجود زمین تنیس در خانه نکته مفیدتری است. همین منطق درباره داشتن پارکینگ و استخر نیز صدق میکند، در جایی که بودن یا نبودن یک ویژگی، از ابعاد دقیق آن اهمیت بیشتری پیدا میکند.
راهحل پیشنهادی برای چنین شرایطی، جایگزینکردن اندازههای عددی زمین تنیس با یک ویژگی از نوع صحیح/غلط یا یک مقدار دستهای مثل “کوچک”، “متوسط” و “بزرگ” است. یک راه دیگر استفاده از رمزگذاری one-hot با “0” برای خانههایی که زمین تنیس ندارند و “1” برای خانههایی که زمین تنیس دارند.
دوره آموزشی: می خواهید دادههایتان را خودتان جمع آوری کنید و یک دیتاست برای خودتان بسازید؟ پس دوره آموزش پروژه محور وب اسکرپینگ را در کانال یوتیوب دیتاهاب ببینید.
دادههای گمشده یا ناموجود (Missing Data)
معمولاً سروکله زدن با دادههای ناموجود ملالآور و خستهکننده است. تصور کنید یک بسته پازل را باز میکنید و متوجه میشوید که 5% از قطعات آن گمشده است. دادههای ناموجود در مجموعهداده نیز میتواند به همین اندازه آزاردهنده باشد و در تحلیل و پیشبینیهای نهایی تأثیرگذار باشد. بااینحال، استراتژیهایی برای کاهش تأثیر منفی دادههای ناموجود وجود دارد.
یکی از روشها، تخمین مقدار ناموجود با استفاده از مقدار مُد (Mode) است. مُد، متغیر با بیشترین مقدار فراوانی، در بین دادهها است. این روش برای مقادیر مربوط به متغیرهای دستهای و باینری بهتر است. شکل زیر یک مثال تصویری به ترتیب از مُد و میانه را نشان میدهد.
دومین روش برای مدیریت دادههای ناموجود در پیش پردازش داده ها، تخمین دادهها با استفاده از مقدار میانه است که از مقداری که در وسط مجموعهداده قرار میگیرد استفاده میکند. این روش برای اعداد صحیح و متغیرهای پیوسته (اعداد اعشاری) بهتر است.
بهعنوان آخرین گزینه، میتوان ردیفهای شامل مقادیر ناموجود را بهکلی حذف کرد. نکته منفی این کار، داشتن داده کمتر برای تحلیل و احتمالاً نتایجی که جامعیت کمتری داشته باشند.
. . . .
و در انتها…
در این مقاله، روشهای پیش پردازش داده ها شامل انتخاب ویژگی و فشردهسازی ردیفها، one-hot، دادههای ناموجود و Binning برای پیش پردازش داده ها بررسی شدند. در مقاله داده های آموزش و تست درباره آمادهسازی دادهها صحبت میکنیم.
دوره آموزشی: از بقیه شنیدید برای یادگیری هوش مصنوعی باید ریاضیات بلد باشید و نگرانید که ریاضی را فراموش کردید؟ آموزش سریع جبر خطی را در کانال یوتیوب دیتاهاب ببینید تا خیالتان راحت شود.