یک روش بسیار پرکاربرد برای سرعت بخشیدن به الگوریتم یادگیری ماشین ، کاهش بعد مسئله با استفاده از تجزیه و تحلیل مولفه های اصلی (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]
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]
در نهایت با استفاده از قطعه کد زیر، ویژگی (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 ویدیو هایی را به این مطلب اضافه میکنم؛