Temel Bileşen Analizi (Principal Component Analysis-PCA) (Makine Öğrenmesi-4)

Ayla Bilgin
3 min readMar 15, 2021

--

Bu yazıda daha önce kısaca bahsettiğimiz gözetimsiz öğrenme algoritmalardan biri olan Temel Bileşenler Analizi’nden bahsedeceğiz. Ardından bir Python kodu yazıp yazımızı tamamlayacağız.

https://www.analyticsvidhya.com/blog/2020/04/announcing-machine-learning-starter-program/

Temel Bileşen Analizi çok sayıda birbiri ile ilişkili değişkenler içeren veri setinin boyutlarını veri içerisinde var olan değişimlerin mümkün olduğunca korunarak daha az boyuta indirgenmesini sağlayan bir dönüşüm tekniğidir. Temel Bileşen Analizi, eldeki veriyi daha az sayıda değişkenle ifade edebilecek en iyi dönüşümü belirlemeyi amaçlar. Dönüşüm sonrasında elde edilen değişkenler ilk değişkenlerin temel bileşenleri olarak adlandırılır. İlk temel bileşen varyans değeri en büyük olandır ve diğer temel bileşenler varyans değerleri azalacak şekilde sıralanır. Gürültüye karşı hassasiyet, bellek ve kapasite ihtiyaçlarının azalması, az boyutlu uzaylarda daha etkin çalışması temel bileşen analizinin temel avantajları arasında sıralanabilir [1].

Bu kısım fazla uzun ve karmaşık gelmiş olabilir. Bir diğer deyişle temel bileşen analizi, istatistikte çok boyutlu uzaydaki bir verinin daha düşük boyutlu bir uzaya izdüşümünü, varyansı maksimize edecek şekilde bulma yöntemidir [2]. Uzayda bir noktalar kümesi için, en az olan ‘en uygun doğru’ seçilir. Aşağıdaki şekilde de bir dağılımın temel bileşenleri oklar şeklinde gösterilmiştir.

&lt;a href=&quot;//commons.wikimedia.org/wiki/User:Nicoguaro&quot; title=&quot;User:Nicoguaro&quot;&gt;Nicoguaro&lt;/a&gt; — &lt;span class=&quot;int-own-work&quot; lang=&quot;tr&quot;&gt;Yükleyenin kendi çalışması&lt;/span&gt;, <a href=”https://creativecommons.org/licenses/by/4.0" title=”Creative Commons Attribution 4.0">CC BY 4.0</a>, <a href=”https://commons.wikimedia.org/w/index.php?curid=46871195">Bağlantı</a>

Temel Bileşenler Analizi;

  • Veri kümelerinin boyutunu azaltmak (indirgemek),
  • Yorumlanabilirliği artırmak,
  • Bilgi kaybını en aza indirmek için kullanılan bir tekniktir.

Temel Bileşenler Analizi yüksek boyutlu verilerde ne kadar uygun görülse de; verilerin kaybolmama garantisi yoktur. Kullanıldığı yerlerin bazılarını söyleyecek olursak:

  • Yüz tanıma
  • Resim sıkıştırma
  • Örüntü tanıma

diyebiliriz.

Bu algoritmanın işleyiş sırası:

  • Verilerin boyutunu azaltma
  • Tahminleme yapma
  • Veriyi görüntüleme

Burada ek olarak bahsetmek istediğim bir kavram olan Kovaryans ise iki değişkenin birlikte ne kadar değiştiklerinin ölçüsüdür. Bu matrisin özvektörleri ve özdeğerleri, PCA’nın temelini oluşturur.

Şimdi bu algoritmayı bir Python kodu ile yazalım. Kütüphaneleri ekledikten sonra veri setini sklearn kütüphanesinden indirdik. Veri setinin 13 boyutlu olduğunu tespit ettik.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import pearsonr
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline

X,y = datasets.load_wine(return_X_y=True)
print(X.shape)

Korelasyon için corr kodunu kullandık. Doğrusal korelasyon için ise ‘pearson’ komutunu çağırdık.

X_df = pd.DataFrame(X)
X_df.corr(method = ‘pearson’)

Korelasyonu iki özellik arasında gösterdik ve Fit metodu ile veri setimizi eğittik. Verinin hala 13 boyutlu olduğunu gördük.

correlation, pvalue = pearsonr(X[:,5], X[:,6])
print(correlation)
plt.scatter(X[:,5], X[:,6])
plt.show
model = PCA()
transformed = model.fit_transform(X)
print(transformed.shape)

Dönüştürdüğümüz özelliklerin korelasyonuna tekrar bakalım. Veri setinin özellikleri arasındaki korelasyon, ortalama değer 0 olacak şekilde tekrardan düzenlendi.

transformed_df = pd.DataFrame(transformed)
transformed_df.corr(method = ‘pearson’)
plt.scatter(transformed[:,5], transformed[:,6])
plt.show

Bunların ardından son olarak verimizi normalize ettik. Görselleştirme yapılarak esas boyutun kaç olacağına karar verdik. ‘n_components’ ile değeri olarak düşürmek istediğimiz boyut sayısını belirledik. Boyutuna tekrar baktığımızda 13 boyutlu olan verinin 3'e düştüğünü görüyoruz.

scaler = StandardScaler()
pipeline = make_pipeline(scaler, model)
pipeline.fit(X)
features = range(model.n_components_)pca_features= PCA(n_components = 3)
dimension_reduction_result = pca_features.fit_transform(X)
print(dimension_reduction_result.shape)

Kodların tamamına aşağıdan ulaşabilirsiniz.

Bir sonraki yazıda görüşmek üzere…

--

--