کاهش ویژگی (Feature reduction)

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

مثال کاهش ویژگی:

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

 

تقسیم‌بندی:

کاهش ویژگی‌ها را می‌توان به دو فرآیند تقسیم کرد: انتخاب ویژگی و استخراج ویژگی. که در مقاله‌ی  (انتخاب ویژگی و استخراج ویژگی) هوشواره مفصلاً به آنها پرداخته ‌شده است.

تکنیک‌های کاهش ویژگی:

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

Principal Component Analysis (PCA)

Linear Discriminant Analysis (LDA)

Generalized Discriminant Analysis (GDA)

Autoencoders

non-negative matrix

factorization

در اینجا تکنیک اول را مورد بررسی قرار میدهیم.

تحلیل مؤلفه های اصلی (PCA):

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

پیاده‌سازی PCA:

برای پیاده‌سازی PCA از کتابخانه scikit-learn  استفاده می‌کنیم. همان‌طور که در کد زیر مشاهده می‌کنید، با قرار دادن n_components=4 به‌عنوان آرگومان PCA درواقع می‌گوییم تعداد ویژگی‌ها را به 4 تا کاهش دهید. در انتهای کد واریانس هریک از ویژگی‌ها را به‌دست آوردیم .

from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot import plt
import pandas as pd
from sklearn.preprocessing import StandardScalar

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
df = pd.read_csv(url, names=['sepal length', 'sepal width', 'petal length', 'petal width', 'target'])
features = ['sepal length', 'sepal width', 'petal length', 'petal width']

x = df.loc[:, features].values
y = df.loc[:, ['target']].values
x = StandardScaler().fit_transform(x)
pca = PCA(n_components = 4)
principalComponents = pca.fit_transform(x)
per_var = np.round(pca.explained_variance_ratio_ * 100, decimals = 2)
labels = ['PC' + str(x) for x in range(1, len(per_var) + 1)]
plt.bar(x=range(1, len(per_var) + 1), height=per_var, tick_label=labels)
plt.ylabel('percentage of explained variance')
plt.ylabel('principal components')
plt.title('plot')
plt.show()

 

 

همان‌طور که می‌بینید واریانس ویژگی اول و دوم نسبت به دو متغیر دیگر بسیار بیشتر است. پس مدل را به ازای 2 ویژگی اول طبقه‌بندی می‌کنیم.

 

 

 

 

 

حال سؤال این است که دسته بندی بر اساس 2 ویژگی بهتر است یا 3 ویژگی؟ پاسخ به این سؤال تنها با رسم نمودارها و مشاهده و مقایسه نتیجه دسته‌بندی‌ها میسر است. هرکدام که بهتر دسته‌بندی کند، مسلماً انتخاب اصلح‌تری است.

همان‌طور که در خروجی زیر مشاهده می‌کنید نتیجه دسته‌بندی با 3 رنگ مختلف نشان داده‌ شده است که در دسته‌بندی با 3 ویژگی دسته‌ها به خوبی قابل‌ تفکیک نیستند در حالی‌ که در دسته‌بندی با 2 ویژگی دسته‌ها به خوبی قابل‌تشخیص هستند.

2 نظرات
  1. لوکاست تری سئو می گوید

    سلام، محتوای خوبی بود ، منم در مورد PCA مطالبی نوشتم ، اگه مایل بودید بخونیدش. دوست داشتم کدهاتون را پیاده سازی کنم اما نشد. در زمان دیگری سعی میکنم.
    این هم مقاله من راجع به PCA
    https://b2n.ir/717797

    1. فائزه غلامرضایی می گوید

      سلام.ممنون.اگر از colab برای پیادهسازی استفاده کنید مثلا بایستی اجرا شود.در صورت عدم اجرا، مشکلتون را به من اطلاع دهید.

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.