دسته‌بندی نشده

کاهش ابعاد با استفاده از تحلیل مولفه های اصلی(PCA) با پایتون

کاهش-ابعاد-با-روش-pca

یک روش بسیار پرکاربرد برای سرعت بخشیدن به الگوریتم یادگیری ماشین ، کاهش بعد مسئله با استفاده از تجزیه و تحلیل مولفه های اصلی (PCA) است.
یکی از تکنیک‌‌‌‌‌های مرسوم برای کاهش بعد، PCA یا Principal Component Analysis است. معمولا کار با داده‌‌‌‌‌های حجیم با بعدهای زیاد امکان‌‌‌‌‌پذیر نیست و نیاز داریم قبل از انجام امور پردازشی، در صورت امکان، برخی از بعدهایی را که اهمیت زیادی ندارند، حذف کنیم.

در ادامه این مطلب، از مجموعه داده معروف IRIS استفاده خواهد شد. مجموعه داده IRIS دارای اندازه‌گیری‌های مربوط به طول و عرض کاسبرگ و گلبرگ سه گونه مختلف از گیاه زنبق، در مجموع برای ۱۵۰ نمونه است. سه دسته موجود در مجموعه داده IRIS عبارتند از:

  • (Iris-setosa (n=50
  • (Iris-versicolor (n=50
  • (Iris-virginica (n=50

و چهار ویژگی (ستون) این مجموعه داده عبارتند از:

  • طول کاسبرگ به سانتی‌متر (sepal length)
  • عرض کاسبرگ به سانتی‌متر (sepal width)
  • طول گلبرگ به سانتی‌متر (petal length)
  • عرض گلبرگ به سانتی‌متر (petal width)

هدف: برای مصورسازی و ترسیم بهتر این مجموعه داده، ما سعی میکنیم که چهار ویژگی آن را به دو ویژگی کاهش دهیم و در یک فضای دوبعدی آن را ترسیم کنیم.

1. فراخوانی دیتاست

در ابتدا با استفاده از قطعه کد زیر مجموعه داده های IRIS را وارد میکنیم:

[py]import pandas as pd

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'])[/py]
دیتاست IRIS

2. استانداردسازی داده ها

PCA توسط مقیاس تأثیر می پذیرد بنابراین شما باید قبل از استفاده از PCA ، ویژگی های داده های خود را مقیاس بندی کنید. برای استاندارد کردن ویژگی های مجموعه داده از StandardScaler استفاده میکنیم.

[py]from sklearn.preprocessing import StandardScaler

features = ['sepal length', 'sepal width', 'petal length', 'petal width']

# Separating out the features
x = df.loc[:, features].values

# Separating out the target
y = df.loc[:,['target']].values
# Standardizing the features

x = StandardScaler().fit_transform(x)[/py]
استانداردسازی داده ها

3. دوبعدی کردن با PCA

داده های اصلی دارای 4 ستون (طول کاسبرگ ، عرض کاسبرگ ، طول گلبرگ و عرض گلبرگ) هستند. در این بخش ، داده اصلی را که 4 بعدی است را به 2 بعد تبدیل می کنیم.

[py]from sklearn.decomposition import PCA

pca = PCA(n_components=2)
principalComponents = pca.fit_transform(x)

principalDf = pd.DataFrame(data = principalComponents
             , columns = ['principal component 1', 'principal component 2'])[/py]
کاهش ابعاد با استفاده از PCA

در نهایت با استفاده از قطعه کد زیر، ویژگی (Target) یا همان Y را به دیتافریم اضافه میکنیم:

[py]finalDf = pd.concat([principalDf, df[['target']]], axis = 1)[/py]
دیتاست کاهش ابعاد یافته

4. ترسیم داده های دوبعدی شده توسط PCA

برای مصورسازی داده ها و مشاهده آن ها در یک فضای دو بعدی، با استفاده از کد زیر مقادیر دیتاست را ترسیم میکنیم:

[py]fig = plt.figure(figsize = (8,8))
ax = fig.add_subplot(1,1,1) 
ax.set_xlabel('Principal Component 1', fontsize = 15)
ax.set_ylabel('Principal Component 2', fontsize = 15)
ax.set_title('2 component PCA', fontsize = 20)
targets = ['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']
colors = ['r', 'g', 'b']
for target, color in zip(targets,colors):
    indicesToKeep = finalDf['target'] == target
    ax.scatter(finalDf.loc[indicesToKeep, 'principal component 1']
               , finalDf.loc[indicesToKeep, 'principal component 2']
               , c = color
               , s = 50)
ax.legend(targets)
ax.grid()[/py]
مصورسازی داده ها

در این مطلب به صورت کاملا ساده با نحوه استفاده از PCA برای کاهش ابعاد برای مصورسازی بهتر داده ها و همینطور کارکرد سریعتر الگوریتم های یادگیری ماشین، آشنا شدید. در پشت این کدهای ساده پایتون ریاضیات بسیاری نهفته است که PCA را تشکیل میدهند. معمولا از PCA برای کاهش ابعاد تصاویر و کم کردن مقدار پیکسل ها و رنگ های آن استفاده می شود. به زودی در رابطه با کاهش ابعاد تصویر و محاسبات ریاضی PCA ویدیو هایی را به این مطلب اضافه میکنم؛

author-avatar

درباره محمد اسماعیلی

علاقه مند به مفاهیم هوش مصنوعی، دیتاساینس و سئو؛ مطالبی که برام جالب باشه رو اینجا می نویسم، و این دلیل بر متخصص بودن من در اون حوزه ها نمیشه😊

دیدگاهتان را بنویسید

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