ویرگول
ورودثبت نام
Mahdi Pakravan | مهدی پاکروان
Mahdi Pakravan | مهدی پاکروانهمون پسره که تو کلاس نمیفهمید ، روش نمیشد بگه میرفت به زبون خودش یاد میگرفت و به زبون خودش مینوشت تو ویرگول :)
Mahdi Pakravan | مهدی پاکروان
Mahdi Pakravan | مهدی پاکروان
خواندن ۳ دقیقه·۷ ماه پیش

یادگیری ماشین به زبان ساده ( مرحله ۸ - مهندسی ويژگی Feature Engineering)

مرحله ۸
مرحله ۸

فیچر یا ویژگی چیست؟

ویژگی‌ها همون متغیرها یا ستون‌های داده هستند که به مدل می‌گیم براساس اون‌ها پیش‌بینی یا تصمیم بگیره. مثلاً توی تشخیص بیماری، فیچرها می‌تونن سن، فشار خون، وزن و... باشن.

یادگیری ماشین خیلی ساده بهش نگاه کنیم دو بخشه :

  • ۱-ویژگی ها (Features)

  • ۲-هدف (Target)

یک مثال از ویژگی ها و هدف
یک مثال از ویژگی ها و هدف

شما تو هر مثال یادگیری ماشین باید بتونید ویژگی ها رو مدیریت کنید و در نهایت به هدفی که میخواید پیش بینی بکنید برسید .

هر ستونی که توی اون دیتاست داریم رو ویژگی مینامیم.


حالا این ويژگی ها رو قراره مهندسی کنیم . یعنی چی ؟ الان بهتون میگم .

اولا که یکسری وقت ها نیازی به مهندسی ويژگی به صورت پیچیده نیست . مثل مثالی که برای درس خوندن زدیم , ما کلا دو تا ویژگی داریم : میزان ساعت درس خوندن و نمره .

مثال حل مسئله بدون استفاده از مهندسی ویژگی :

تارگت : نمره

ویژگی : ۳ ساعت درس خوندن

مراحل :

1-Data Prepration

2-Missing Values

3-Categorical Values

4-Outliers

5-Regression

بعد از رسم رگرسیون هم که خیلی راحت به مدل میرسیم و با مدلی که داریم میتونیم به راحتی پیش بینی کنیم که در ازای فیچر (۳ ساعت درس خوندن) چه تارگتی (نمره ای) میگیریم .

تمام مراحلی که در بالا اشاره کردیم رو در مراحل بعدی هم خواهیم داشت فقط خواستم بگم یک وقت هایی که ویژگی ها کم هستن و تارگت با همون تک ویژگی به راحتی هندل میشه میریم سریع سراغ این مراحل و تمام .

ولی وقتی مسئله یکم پیچیده تر باشه باید مهندسی ویژگی هم انجام بدیم که کار خیلی سختی نیست و در ادامه باهم یاد میگیریم . پس برو بریم ادامه مطلب ...


مهندسی فیچر (Feature Engineering)

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

مهندسی ویژگی یعنی:

  • انتخاب،

  • ساخت،

  • اصلاح، و

  • تبدیل ویژگی‌های داده،

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


انواع مهندسی ویژگی

  • انتخاب ویژگی: حذف ویژگی‌های کم‌ارزش یا نویزی

  • ساخت ویژگی: ایجاد فیچرهای جدید با ترکیب فیچرهای موجود

  • تبدیل ویژگی: نرمال‌سازی، مقیاس‌بندی، کدگذاری متغیرهای دسته‌ای (مثلاً one-hot encoding)

  • مدیریت مقادیر گمشده: جایگزینی یا حذف داده‌های ناقص

حالا میریم سراغ مسائلی که بیشتر از یک ویژگی دارند :

این دیتاست رو ببینید :

دیتاست پزشکی
دیتاست پزشکی
import pandas as pd data = { 'PatientID': range(1, 11), 'Age': [45, 50, 39, 60, 55, 43, 48, 52, 46, 57], 'Blood_Pressure': [130, 120, 140, 150, 135, 125, 145, 138, 128, 142], 'Cholesterol': [220, 180, 240, 210, 190, 200, 230, 215, 195, 225], 'Heart_Rate': [80, 70, 90, 85, 78, 72, 88, 75, 82, 79], 'Smoker': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0], 'Target': [1, 0, 1, 1, 0, 0, 1, 1, 0, 1] } df = pd.DataFrame(data)

این دیتاست اطلاعات پزشکی بیماران یک بیمارستان میباشد .

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

مهندس ویژگی که پیشنهاد میدم :

  • Age_Group: دسته‌بندی سن به گروه‌های جوان، میانسال و سالمند

  • BP_Category: دسته‌بندی فشار خون (طبیعی، بالا، خیلی بالا)

  • Cholesterol_Level: دسته‌بندی کلسترول (عادی، بالا)

  • Risk_Factor_Score: نمره‌ای ترکیبی از سیگنال‌های خطر مثل سیگار کشیدن، فشار خون بالا و کلسترول بالا

مهندسی فیچر Age_Group

def age_group(age): if age < 40: return 'Young' elif 40 <= age <= 55: return 'Middle_Aged' else: return 'Senior' df['Age_Group'] = df['Age'].apply(age_group)

مهندسی فیچر BP_Category

def bp_category(bp): if bp < 130: return 'Normal' elif 130 <= bp <= 140: return 'High_Normal' else: return 'High' df['BP_Category'] = df['Blood_Pressure'].apply(bp_category)

مهندسی فیچر Cholesterol_Level

df['Cholesterol_Level'] = df['Cholesterol'].apply(lambda x: 'High' if x > 200 else 'Normal')

مهندسی فیچر Risk_Factor_Score (مثلا امتیاز از 3)

df['Risk_Factor_Score'] = df['Smoker'] + (df['Blood_Pressure'] > 140).astype(int) + (df['Cholesterol'] > 220).astype(int)

در نهایت :

بعد از مهندسی ویژگی
بعد از مهندسی ویژگی


خب , به انتهای مطلب رسیدیم , در قسمت بعدی آخرین مرحله از Data Preprocessing رو هم انجام میدیم و دیگه وارد بحث Train میشیم .


یادگیری ماشینهوش مصنوعی
۲
۰
Mahdi Pakravan | مهدی پاکروان
Mahdi Pakravan | مهدی پاکروان
همون پسره که تو کلاس نمیفهمید ، روش نمیشد بگه میرفت به زبون خودش یاد میگرفت و به زبون خودش مینوشت تو ویرگول :)
شاید از این پست‌ها خوشتان بیاید