Temel Bileşen Analizi (PCA): Teoriden Uygulamaya

Mustafa Durmuş
3 min readApr 22, 2024

--

1. PCA: Teorik Temelleri

Temel Bileşen Analizi (PCA), N boyutlu bir verinin daha küçük boyutlara indirgenmesi veya izdüşümünün alınması işlemidir. Bu yöntem, makine öğrenmesi ve veri biliminde, büyük veri kümelerinin daha yönetilebilir hale getirilmesi, gürültü temizleme veya veri görselleştirilme gibi alanlarda kullanılır.

PCA bir boyut azaltma algoritması olarak tanımlanabilir. Verideki boyut azalırken, varyans maksimize veya ham veridekine en yakın hale yakın tutulur. Bu sayede veriden minimum kayıp amaçlanır.

PCA, verideki özniteliklerin kovaryans matrisini hesaplar. Ardından, bu matrisin özdeğerlerini ve özvektörlerini bulur. Özvektörler, verisetindeki yönleri temsil ederken; özdeğerler, bu bileşenlerin veri setinde ne kadar varyansa sahip olduğunu gösterir. Genellikle, en büyük özdeğerlere sahip özvektörler, veri setinin en önemli yönlerini temsil eder ve bu yönler veri setinin boyutunu indirmek için kullanılır.

Algoritmanın temel aşamaları aşağıdaki gibidir:

  1. Veri Ortalamasının Hesaplanması: Veri setindeki her bir özniteliğin ortalama değeri hesaplanır.
  2. Kovaryans Matrisinin Hesaplanması: Kovaryans matrisi öznitelikler arasındaki ilişkiyi gösterir.
  3. Özdeğerler ve Özvektörlerin Hesaplanması: Elde edilen kovaryans matrisi üzerinden veri setinin ana yönleri belirlenir.
  4. Öznitelik Seçimi: En yüksek özdeğerlere sahip özvektörler seçilir.

2. PCA: Python Uygulaması

PCA uygulamasını scikit-learn kütüphanesinde bulunan diyabet veriseti üzerine uygulayalım ve sonuçları gözlemleyelim. Tüm kaynak koduna buradan erişebilirsiniz.

Veri Analizi

İlk olarak kütüphaneleri import edelim.

import sklearn
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.decomposition import PCA
from sklearn.datasets import load_diabetes

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

Verisetini yükleyelim ve pandas dataframe haline getirelim.

diabetes = load_diabetes()
diabetes_df = pd.DataFrame(data=diabetes.data, columns=diabetes.feature_names)
diabetes_df['Target'] = diabetes.target
diabetes_df.head()
Figur 1. Veriseti

Verisetinde toplam 10 adet öznitelik bulunmaktadır ve açıklamaları sırasıyla aşağıdaki gibidir:

1. Yaş

2. Cinsiyet

3. Vücut kitle indeksi

4. Ortalama kan şekeri

5. Ortalama kolesterol

6. Düşük yoğunluklu lipoprotein

7. Yüksek yoğunluklu lipoprotein

8. Toplam kolesterol

9. Trigliserid seviyesi

10. Kan şekeri

Verideki özniteliklerin birbirleriyle olan korelasyon değerleri aşağıdaki gibidir.

Burada gördüğümüz özniteliklerin birbiriyle ne kadar alakalı olduğu. Örneğin s3 özniteliği ile s4 arasındaki korelasyon değeri -0.74'tür. Neredeyse -1'e yakın bir değer olduğundan aralarında ters bir ilişki olduğunu ve biri artarken diğeri azalıyor olduğunu görebiliyoruz.

PCA ve Model Eğitimi

Şimdi veriye PCA uygulayalım. Bunu yaparken varyans değerini yavaş yavaş azaltalım ve bir makine öğrenmesi modelinin performans ölçme metriği olan RMSE (Root Mean Square Error) metrik değerinin değişimini ve öznitelik sayısındaki azalmayı gözlemleyelim. Target değişkeni sürekli değerlere sahip olduğu için makine öğrenmesi modeli olarak lineer regresyon modeli kullanılmıştır.

X = diabetes_df.data
y = diabetes_df.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=9)

model = LinearRegression()

results = pd.DataFrame(columns=['Variance', 'Number of Components', 'RMSE'])

for variance in np.arange(0.99, 0.85, -0.01):
pca = PCA(n_components=variance)
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
model.fit(X_train_pca, y_train)
y_pred = model.predict(X_test_pca)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))

new_row = pd.DataFrame({
'Variance': [variance],
'Number of Components': [pca.n_components_],
'RMSE': [rmse]
})
results = pd.concat([results, new_row], ignore_index=True)

results
Figür 2. PCA sonrası RMSE ve Öznitelik Sayısındaki Değişim

Sonuç

Yukarıda görüldüğü gibi PCA ile varyans azaldıkça öznitelik sayısında değişimler olmuştur. %99 oranında varyansın korunduğu verisetinde öznitelik sayısı 10'dan 8'e düşmüş ve RMSE değeri ise korunmuştur. Varyans daha da aşağılara indiğinde öznitelik sayısının 6'ya kadar düştüğü gözlemlenmiştir ve yine RMSE değeri korunmuştur. Daha büyük boyutlu verilerde bunun modelin çalışma hızına ve başarı metriklerine etkisi oldukça değerli görülmektedir.

Bu yazıda, PCA kullanarak veri boyutunu nasıl azaltabileceğimizi ve bu işlemin regresyon modellerinin performansına etkisini inceledik. Okuduğunuz için teşekkür ederim, bir başka yazıda görüşmek üzere.

Referanslar

--

--