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

یادگیری ماشین به زبان ساده ( مرحله 10 - انتخاب ويژگی Feature Selection)

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

  • سن (Age)

  • فشار خون (Blood Pressure)

  • کلسترول (Cholesterol)

  • ضربان قلب (Heart Rate)

  • گروه خونی

  • قد، وزن، رنگ چشم!

  • و کلی ویژگی دیگه...

اما واقعاً آیا همه‌ی این ویژگی‌ها برای پیش‌بینی بیماری مهم هستن؟ نه!

پس بیاید ویژگی های بدرد بخور رو انتخاب کنیم Feature Selections

انتخاب ویژگی ها
انتخاب ویژگی ها

چرا ؟

  • چون بعضی ویژگی‌ها اطلاعات تکراری یا بی‌ربط دارن

  • بعضی‌ها فقط باعث سردرگمی مدل و افت دقت می‌شن

  • داده‌ی کمتر = مدل سریع‌تر، ساده‌تر و دقیق‌تر

تفاوت با Feature Engineering ؟

  • Feature Engineering یعنی ساختن یا اصلاح ویژگی‌ها (مثلاً BMI رو از وزن و قد بسازی)

  • Feature Selection یعنی انتخاب بهترین‌ها و حذف بقیه

روش های انجام Feature Selection :


1-همبستگی (Correlation):
ابتدا میایم HeatMap رو رسم میکنیم و سپس ویژگی‌هایی که بیشترین همبستگی رو با Target دارن، نگه می‌داریم.

کد رسم HeatMap :

import seaborn as sns import matplotlib.pyplot as plt # انتخاب فقط ستون‌های عددی numeric_df = df.select_dtypes(include=["int64", "float64"]) # محاسبه همبستگی correlation_matrix = numeric_df.corr() # رسم heatmap plt.figure(figsize=(10, 6)) sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm", fmt=".2f", linewidths=0.5) plt.title("Correlation Matrix") plt.show()

نتیجه :

Wheatmeal matrix to solve correlation matrix
Wheatmeal matrix to solve correlation matrix

به نمودار بالا نگاه کنید .

میزان همبستگی داده ها رو با Heart_Disease که تارگتمونه میتونید مشاهده کنید

این اصطلاحات رو یاد بگیرید :

اصطلاحات تخصصی Correlation
اصطلاحات تخصصی Correlation


قدم‌های تحلیل دقیق

1. تحلیل ویژگی‌ها نسبت به تارگت (Target Correlation)

از سطر یا ستون مربوط به Heart_Disease استفاده کن تا بفهمی هر ویژگی چقدر روی تارگت اثر داره.

  • اگر مقدار همبستگی با Heart_Disease بزرگ باشه (مثلاً >0.4 یا <-0.4):
    این ویژگی احتمالاً اطلاعات مفیدی در مورد پیش‌بینی تارگت داره.
    ✅ نگه‌دار (Strong predictor)

  • اگر مقدار خیلی کم باشه (مثلاً بین -0.1 تا 0.1):
    نشون می‌ده که ارتباط خطی خاصی با تارگت نداره.
    🔍 بررسی کن که آیا در مدل‌های پیچیده‌تر مفید هست یا نه.
    ❌ در مراحل اولیه می‌تونه کاندید حذف (Low importance) باشه.

📌 این تکنیک اسمش هست: Target-wise Correlation Analysis

2. تحلیل همبستگی بین ویژگی‌ها (Multicollinearity Check)

  • اگر دو ویژگی با هم همبستگی بالا (مثلاً >0.85 یا <-0.85) داشته باشن:
    به احتمال زیاد اطلاعات تکراری دارن و یکی‌شون اضافه‌ست.
    این مشکل به اسم Multicollinearity شناخته می‌شه.
    🔁 راهکار: یکی از اون‌ها رو حذف کن (ترجیحاً اونی که با تارگت همبستگی کمتری داره)

📌 اسم این تحلیل هست: Redundancy Analysis یا بررسی Multicollinearity

2-روش (Wrapper - Recursive Feature Elimination (RFE)):

این روش با ترکیب خودش با Logistic Regression (که بعدا در موردش صحبت میکنیم) کار میکنه و برای ما بهترین ویژگی ها رو انتخاب میکنه

مراحل انجام RFE:

  1. شروع با تمام ویژگی‌ها: ابتدا مدل رو با همه فیچرها آموزش می‌ده.

  2. محاسبه اهمیت ویژگی‌ها: بررسی می‌کنه که هر فیچر چقدر در پیش‌بینی تارگت نقش داره.

  3. حذف ضعیف‌ترین فیچر: ضعیف‌ترین فیچر رو حذف می‌کنه.

  4. تکرار مراحل بالا: این فرآیند رو تکرار می‌کنه تا به تعداد مشخصی از ویژگی‌ها (که ما مشخص می‌کنیم) برسه.

مزایای RFE:

  • سفارشی‌پذیر: می‌تونی تعداد ویژگی نهایی رو خودت تعیین کنی (n_features_to_select).

  • قابل ترکیب با مدل‌های مختلف: مثلاً با Logistic Regression برای داده‌های خطی یا با Random Forest برای داده‌های پیچیده‌تر.

  • یادگیرنده‌محور: چون از خود مدل برای تعیین اهمیت ویژگی استفاده می‌کنه، معمولاً دقت خوبی داره.

معایب RFE:

  • هزینه محاسباتی زیاد: چون مدل چندین بار آموزش داده می‌شه.

  • ممکنه گیر کنه در local minimum: چون ویژگی‌ها به‌صورت greedy حذف می‌شن.

مثال کدی که داریم :

from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import LabelEncoder import pandas as pd categorical_columns = ["Age_Group", "BP_Category", "Cholesterol_Level"] df_encoded = df.copy() for col in categorical_columns: df_encoded[col] = LabelEncoder().fit_transform(df_encoded[ X = df_encoded.drop(columns=["PatientID", "Target"]) y = df_encoded["Target"] model = LogisticRegression() rfe = RFE(model, n_features_to_select=4) rfe.fit(X, y) selected_features = X.columns[rfe.support_]

که در خروجی به شما یک آرایه میده که بهترین پیشنهادش برای ویژگی ها کدوم ویژگی ها میباشد .

['Blood_Pressure', 'Cholesterol', 'Heart_Rate', 'BP_Category']

یک روش بهتر , Feature Selection Wrapper‌:

انتخاب چند زیرمجموعه از ویژگی‌ها → آموزش مدل روی هر زیرمجموعه → ارزیابی عملکرد مدل → انتخاب بهترین زیرمجموعه.

۱. Forward Selection

  • تعریف:
    شروع با مجموعه خالی از ویژگی‌ها و به تدریج اضافه کردن ویژگی‌هایی که بیشترین بهبود عملکرد مدل را دارند.

  • مزیت: کم‌هزینه‌تر از جستجوی همه زیرمجموعه‌ها

  • کد نمونه:

pythonCopyEditfrom sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression from sklearn.feature_selection import SequentialFeatureSelector X, y = load_iris(return_X_y=True) model = LogisticRegression(max_iter=200) sfs = SequentialFeatureSelector(model, n_features_to_select=2, direction='forward') sfs.fit(X, y) print("Selected features indices:", sfs.get_support(indices=True))

۲. Backward Elimination

  • تعریف:
    شروع با تمام ویژگی‌ها و حذف تدریجی ویژگی‌هایی که کمترین تاثیر را دارند.

  • مزیت: مناسب وقتی تعداد ویژگی‌ها کم است و می‌خواهیم اطمینان داشته باشیم هیچ ویژگی مهمی حذف نمی‌شود

  • کد نمونه:

pythonCopyEditsbs = SequentialFeatureSelector(model, n_features_to_select=2, direction='backward') sbs.fit(X, y) print("Selected features indices:", sbs.get_support(indices=True))

۳. Recursive Feature Elimination (RFE)

  • تعریف:
    یک مدل آموزش داده می‌شود و ویژگی‌های کم‌اهمیت بر اساس وزن مدل به صورت تکراری حذف می‌شوند تا تعداد مشخصی ویژگی باقی بماند.

  • مزیت: دقت بالا به خاطر ارزیابی دقیق وزن هر ویژگی در مدل

  • کد نمونه:

pythonCopyEditfrom sklearn.feature_selection import RFE rfe = RFE(estimator=model, n_features_to_select=2) rfe.fit(X, y) print("Selected features indices:", rfe.get_support(indices=True))
یادگیری ماشینهوش مصنوعی
۲
۰
Mahdi Pakravan | مهدی پاکروان
Mahdi Pakravan | مهدی پاکروان
همون پسره که تو کلاس نمیفهمید ، روش نمیشد بگه میرفت به زبون خودش یاد میگرفت و به زبون خودش مینوشت تو ویرگول :)
شاید از این پست‌ها خوشتان بیاید