مثال 1.03: کاربرد مهندسی ویژگی در داده‌های متنی

در این مثال قصد داریم تا فیچرهای متنی دیتاست tips را به داده‌های عددی تبدیل کنیم.
بمنظور تکمیل این مثال از نوت‌بوکی که قبلا ایجاد کرده بودیم استفاده میکنیم.

مراحل بشرح زیر میباشند:

1- در ابتدا، کلاسِ ()LabelEncoder را از scikit-learn به همراه کتابخانه‌ی pandas فراخوانی میکنیم:

Jupyter Notebook


from sklearn.preprocessing import LabelEncoder
import pandas as pd

2- حالا با استفاده از کلاسی که در بالا فراخوانی کردیم(LabelEncoder)، هرکدام از فیچرهای متنی را به مقادیر عددی تبدیل میکنیم:

Jupyter Notebook


enc = LabelEncoder()
tips["sex"] = enc.fit_transform(tips['sex'].astype('str'))
tips["smoker"] = enc.fit_transform(tips['smoker'].astype('str'))
tips["day"] = enc.fit_transform(tips['day'].astype('str'))
tips["time"] = enc.fit_transform(tips['time'].astype('str'))

در قطعه کد بالا، کار را با عینیّت بخشیدن به کلاسِ LabelEncoder شروع کردیم. سپس متد توکاری به نام: " ()fit_transform " را بر هر کدام از فیچرهای طبقه‌بندی شده اعمال کردیم. کاری که این متد میکند بدین صورت است که یک مقدار عددی به کتِگوری موردنظر اختصاص داده و خروجی را به ما ارائه میکند.

3- مقادیر ابتدایی دیتاست tips را چاپ میکنیم تا از این قضیه مطمئن شویم:

Jupyter Notebook


tips.head()

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

B15781_01_13

همانطوریکه مشاهده می‌کنید، ما موفق شدیم که داده‌های متنی را به مقادیر عددی تبدیل کنیم.


نکته:

توجه داشته باشید که شما باید کل نوت‌بوک موردنظر را از ابتدا پیاده و اجرا کرده باشید تا به نتیجه فوق برسید.


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

جمع بندی

تبدیل داده‌های متنی از طریق Feature Engineering صورت می‌پذیرد؛ بدین صورت که به هر کتِگوری متنی، یک مقدار عددی اختصاص یافته و جایگزینش میشود. حتی با وجود اینکه میتوان این کار را بصورت دستی هم انجام داد! ولی کلاس‌ها و متدهای توکار(Built-in) قدرتمندی وجود دارند که این پروسه را بشدت تسهیل کرده و به‌دقت به سرانجام میرسانند؛ از این بین میتوان به کلاسِ: " LabelEncoder " اشاره کرد که در این مثال از آن استفاده شد.