انتخاب ویژگی داده ها در یادگیری ماشین با پایتون (Feature Selection) یکی از مراحل مهم است که شامل انتخاب زیرمجموعهای از ویژگیهای موجود بهمنظور بهبود عملکرد مدل میباشد. در ادامه، برخی از روشهای متداول انتخاب ویژگی معرفی شدهاند:
روشهای فیلتر (Filter Methods)
در این روش، میزان مرتبط بودن هر ویژگی با هدف مدل بهصورت آماری (مانند همبستگی، اطلاعات متقابل، آزمون کایدو و …) محاسبه و بر اساس امتیاز بهدستآمده رتبهبندی میشود. ویژگیهایی که امتیاز پایینی دارند، از مدل حذف میگردند.
برای پیادهسازی روشهای فیلتر در زبان پایتون، میتوانید از توابع SelectKBest
یا SelectPercentile
از ماژول sklearn.feature_selection
استفاده کنید. در ادامه، یک قطعه کد ساده برای این منظور آمده است:
1 2 3 |
from sklearn.feature_selection import SelectPercentile, chi2 selector = SelectPercentile(chi2, percentile=10) X_new = selector.fit_transform(X, y) |
روشهای پوششی (Wrapper Methods)
در این روش، با افزودن یا حذف ویژگیها، عملکرد مدل ارزیابی میشود و آن زیرمجموعهای از ویژگیها انتخاب میگردد که بهترین عملکرد را به همراه دارد. اگرچه این روش از نظر محاسباتی هزینهبر است، اما دقت بالاتری نسبت به روشهای فیلتر دارد.
برای پیادهسازی روشهای پوششی در پایتون، میتوانید از تابع RFE
(حذف بازگشتی ویژگیها – Recursive Feature Elimination) از ماژول sklearn.feature_selection
استفاده نمایید. در زیر، مثالی از نحوه استفاده از این روش آورده شده است:
1 2 3 4 5 6 7 |
from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression estimator = LogisticRegression() selector = RFE(estimator, n_features_to_select=5) selector = selector.fit(X, y) X_new = selector.transform(X) |
روشهای توکار (Embedded Methods)
در این روش، انتخاب ویژگی بهطور مستقیم در فرآیند ساخت مدل ادغام میشود. این کار با استفاده از تکنیکهایی مانند رگرسیون لاسو (Lasso)، رگرسیون ریج (Ridge) یا درخت تصمیم (Decision Tree) انجام میگیرد. این مدلها به هر ویژگی یک وزن اختصاص میدهند و ویژگیهایی که وزن پایینی دارند، از مدل حذف میشوند.
برای پیادهسازی روشهای توکار در پایتون، میتوانید از توابع رگرسیون Lasso
یا Ridge
از ماژول sklearn.linear_model
استفاده نمایید. نمونهای از کد پیادهسازی روش توکار با استفاده از لاسو در ادامه آمده است:
1 2 3 4 5 6 |
from sklearn.linear_model import Lasso lasso = Lasso(alpha=0.1) lasso.fit(X, y) coef = pd.Series(lasso.coef_, index = X.columns) important_features = coef[coef != 0] |
تحلیل مؤلفههای اصلی (PCA)
این روش، نوعی یادگیری بدونناظر (unsupervised learning) محسوب میشود که در آن ویژگیهای اصلی داده به مجموعهای از مؤلفههای غیرهمبسته تبدیل میگردند؛ این مؤلفهها بیشترین واریانس موجود در داده را توضیح میدهند. با تعیین آستانهای برای تعداد مؤلفهها، میتوان ابعاد داده را کاهش داد.
برای پیادهسازی PCA در پایتون، میتوانید از تابع PCA
از ماژول sklearn.decomposition
استفاده نمایید. در مثال زیر، تعداد ویژگیها با استفاده از ۳ مؤلفه اصلی کاهش یافته است:
1 2 3 |
from sklearn.decomposition import PCA pca = PCA(n_components=3) X_new = pca.fit_transform(X) |
حذف بازگشتی ویژگیها (RFE)
در این روش، ویژگیهایی که کمترین اهمیت را دارند، بهصورت بازگشتی حذف میشوند تا در نهایت یک زیرمجموعه از مهمترین ویژگیها بهدست آید. این روش مبتنی بر مدل است و میتواند از نظر محاسباتی پرهزینه باشد؛ با این حال، در دادههایی با ابعاد بالا عملکرد مطلوبی دارد.
برای پیادهسازی RFE در پایتون، میتوانید از تابع RFECV
(حذف بازگشتی ویژگی با اعتبارسنجی متقابل) از ماژول sklearn.feature_selection
استفاده نمایید. در ادامه نمونهای از کد پیادهسازی آورده شده است:
1 2 3 4 5 6 |
from sklearn.feature_selection import RFECV from sklearn.tree import DecisionTreeClassifier estimator = DecisionTreeClassifier() selector = RFECV(estimator, step=1, cv=5) selector = selector.fit(X, y) X_new = selector.transform(X) |
مثال
در این مثال، سه روش انتخاب ویژگی را پیادهسازی میکنیم:
-
انتخاب ویژگی تکمتغیره با آزمون کایدو
-
حذف بازگشتی ویژگی با اعتبارسنجی متقابل (RFECV)
-
تحلیل مؤلفههای اصلی (PCA)
ما از مجموعهداده تشخیص سرطان سینه ویسکانسین (Breast Cancer Wisconsin – Diagnostic) استفاده خواهیم کرد که در کتابخانه scikit-learn موجود است. این دادهها شامل ۵۶۹ نمونه با ۳۰ ویژگی هستند و هدف، طبقهبندی تومور به خوشخیم یا بدخیم است.
در ادامه، کدهای مربوط به پیادهسازی هر یک از این روشها ارائه شدهاند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# Import necessary libraries and dataset import pandas as pd from sklearn.datasets import load_diabetes from sklearn.feature_selection import SelectKBest, chi2 from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # Load the dataset diabetes = pd.read_csv(r'C:\Users\Leekha\Desktop\diabetes.csv') # Split the dataset into features and target variable X = diabetes.drop('Outcome', axis=1) y = diabetes['Outcome'] # Apply univariate feature selection using the chi-square test selector = SelectKBest(chi2, k=4) X_new = selector.fit_transform(X, y) # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.3, random_state=42) # Fit a logistic regression model on the selected features clf = LogisticRegression() clf.fit(X_train, y_train) # Evaluate the model on the test set accuracy = clf.score(X_test, y_test) print("Accuracy using univariate feature selection: {:.2f}".format(accuracy)) # Recursive feature elimination with cross-validation (RFECV) estimator = LogisticRegression() selector = RFECV(estimator, step=1, cv=5) selector.fit(X, y) X_new = selector.transform(X) scores = cross_val_score(LogisticRegression(), X_new, y, cv=5) print("Accuracy using RFECV feature selection: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) # PCA implementation pca = PCA(n_components=5) X_new = pca.fit_transform(X) scores = cross_val_score(LogisticRegression(), X_new, y, cv=5) print("Accuracy using PCA feature selection: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) |
خروجی
با اجرای کد فوق، خروجی مشابه زیر در ترمینال چاپ خواهد شد:
1 2 3 |
Accuracy using univariate feature selection: 0.74 Accuracy using RFECV feature selection: 0.77 (+/- 0.03) Accuracy using PCA feature selection: 0.75 (+/- 0.07) |
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.
- انتشار: ۳۰ مرداد ۱۴۰۴
دسته بندی موضوعات
- آموزش ارز دیجیتال
- آموزش برنامه نویسی
- آموزش متنی برنامه نویسی
- اطلاعیه و سایر مطالب
- پروژه برنامه نویسی
- دوره های تخصصی برنامه نویسی
- رپورتاژ
- فیلم های آموزشی
- ++C
- ADO.NET
- Adobe Flash
- Ajax
- AngularJS
- apache
- ARM
- Asp.Net
- ASP.NET MVC
- AVR
- Bootstrap
- CCNA
- CCNP
- CMD
- CSS
- Dreameaver
- EntityFramework
- HTML
- IOS
- jquery
- Linq
- Mysql
- Oracle
- PHP
- PHPMyAdmin
- Rational Rose
- silver light
- SQL Server
- Stimulsoft Reports
- Telerik
- UML
- VB.NET&VB6
- WPF
- Xml
- آموزش های پروژه محور
- اتوکد
- الگوریتم تقریبی
- امنیت
- اندروید
- اندروید استودیو
- بک ترک
- بیسیک فور اندروید
- پایتون
- جاوا
- جاوا اسکریپت
- جوملا
- دلفی
- دوره آموزش Go
- دوره های رایگان پیشنهادی
- زامارین
- سئو
- ساخت CMS
- سی شارپ
- شبکه و مجازی سازی
- طراحی الگوریتم
- طراحی بازی
- طراحی وب
- فتوشاپ
- فریم ورک codeigniter
- فلاتر
- کانستراکت
- کریستال ریپورت
- لاراول
- معماری کامپیوتر
- مهندسی اینترنت
- هوش مصنوعی
- یونیتی
- کتاب های آموزشی
- Android
- ASP.NET
- AVR
- LINQ
- php
- Workflow
- اچ تی ام ال
- بانک اطلاعاتی
- برنامه نویسی سوکت
- برنامه نویسی موبایل
- پاسکال
- پایان نامه
- پایتون
- جاوا
- جاوا اسکریپت
- جی کوئری
- داده کاوی
- دلفی
- رباتیک
- سئو
- سایر کتاب ها
- سخت افزار
- سی اس اس
- سی پلاس پلاس
- سی شارپ
- طراحی الگوریتم
- فتوشاپ
- مقاله
- مهندسی نرم افزار
- هک و امنیت
- هوش مصنوعی
- ویژوال بیسیک
- نرم افزار و ابزار برنامه نویسی
- وردپرس