PCA

ABDULLAH ATCILI
Machine Learning Turkiye
8 min readFeb 2, 2022

PCA nedir?

PCA (Principal Component Analizi — Temel Bileşen Analizi). Yazıya giriş yaparken, neden PCA algoritmasına ihtiyacımız olduğu konusuyla başlayalım.

Datamızın boyutunun yüksek olduğu durumlarda (Örneğin 10 feature veya 150 feature), eğitim süreci uzun sürmektedir. Belki de bu kadar uzun süren eğitim süreçleri model skorları üzerinde çok fazla etki göstermektedir. Neden?

Çünkü bazı featurelar kendi aralarında korele olabilir veya benzer şekilde bilgi veriyor olabilirler. Bizim bu durumu tek tek ele almamız zorlu bir süreç olabilir. Dolayısıyla keşke bir algoritma olsa da bizim çok boyutlu datamızı, çok az veri kaybı ile boyutunu azaltarak bizlere geri verse. Evet PCA tam olarak bu işe yarar.

Tablo-1 https://dinhanhthi.com/principal-component-analysis/

Veya çok boyutlu data ile görselleştirme yapmak ve bu görselleri anlamlı olarak incelemek imkansızdır. PCA, data görselleştirmesi amacıyla da kullanılmaktadır.

Şimdi PCA analizinin detaylarına başlayabiliriz. Datanın çok boyuttan az boyuta nasıl indirileceği üzerine biraz sohbet edelim.

https://dinhanhthi.com/principal-component-analysis/

Şimdi yukarıdaki (solda) gösterilen datayı tek boyuta indirdiğimizi düşünelim. Sağda gösterilen mor eksenli olanı mı yoksa yeşil eksenli olanı mı tercih edelim. Yeşil eksenli tek boyutun tercih edilmesi daha sağlıklı olacaktır değil mi? Neden peki?

Çünkü data, yeşil eksenli gösterim de daha dağılmış ve daha iyi bir gösterim sağlamaktadır. Peki bu gözle gördüğümüz, bu durumu matematiksel olarak nasıl ifade edebiliriz.

https://www.youtube.com/watch?v=FgakZw6K1QQ

Şimdi burada bulunan iki boyutlu data üzerinden işlemlerimizi anlatmaya çalışalım. Burada bulunan datayı origine kaydıralım.

Yukarıda yeşil eksenli grafiğin en iyi eksen olduğunu söylemiştik. Şimdi bunu nasıl tespit edeceğimiz üzerine konuşalım. Originden geçen sonsuz adet doğrulardan hangisi dataya en iyi şekilde uyum sağlar (best fit line) ? Dataların bu doğrular üzerine projeksiyonları alındığında (data noktasının doğru üzerine dikmesinin alınmış şekli), mesafeyi minimize eden doğru, en uygun doğru olacaktır.

İşte burada görülen mesafeleri minimize etmeyi hedefliyoruz. Burada görülen 6 nokta ile kafamız karışabilir. İsterseniz tek bir nokta ile bu açıklamayı yapalım.

Yukarıda görülen tek bir yeşil noktanın origine mesafesi hep aynıdır (a uzunluğu). Kırmızı ile gösterilen eksen, en iyi uyum sağlayacak ekseni simgeleyecektir. Pisagor teoremine göre;

olduğunu biliyoruz. a uzunluğu sabit olduğuna göre, c uzunluğu ne kadar büyük olursa, b uzunluğunun o kadar az olacağı açık ve net bir şekilde anlaşılmaktadır. Şimdi bu durumun tüm noktalara uygulayalım. Her bir nokta için c uzunluğunu maksimum yapan noktalar tespit edilmelidir. Burada bütün noktaların c uzunluğunun kareleri alınarak toplanır. Bu toplamı maksimum yapan doğru, en uyum sağlayan (best fit) doğrudur.

Tekrar etmek gerekirse datasette temsil edilen 6 nokta için, her bir doğruya göre uzunluk kareleri toplanır. Bu toplamın maksimum olduğu doğru, best fit doğrudur. Yani Tablo-1 de gösterilen en uygun çizilecek doğru bulunabilir. İşte bu doğruya PC1 (Principal Component 1 ) doğrusu diyoruz.

Şimdi bu PC1 doğrusunun eğiminin 0.25 olduğunu farz ve kabul edersek, PC1 doğrusu, 4 birim x ekseni ve 1 birim y ekseninden oluşur.

Yani PC1 aslında değişkenlerin lineer kombinasyonudur. Yine pisagor teoremine göre hipotenüs 4.12 olarak bulunur. Dolayısıyla; x ekseni 4, y ekseni 1 ve hipotenüs ise 4.12 olarak tespit edildi. Peki bu sayıları normalize edersek (çünkü doğru uzunluğunun birim uzunluk yani 1'e eşit olmasını istiyoruz), hipotenüs 4.12/4.12=1 olur. X ekseni 4 / 4.12 = 0.97 olur ve y ekseni 1/4.12=0.242 olur.

Best fit doğrumuz, 0.97 x ekseni ve 0.242 y ekseni içermektedir. İşte bu değerlere, PC1 doğrusunun eigenvektorleri denir. Veya başka bir ifade ile PC1 doğrusunun singular vektörleri denilir.

PC1 doğrusu uzaklık karelerinin toplamını maksimum yapan değer ile bulunmuştu. İşte bu değere de PC1'in Eigenvalue değeri denir. Bu sayının köküne de PC1'in singular value (tekil değeri) denilir.

Peki umarım buraya kadar anlatabildim. Şimdi aklımıza PC2'nin nasıl bulunacağı sorusu geliyor sanırım. Hadi onuda bulup aradan çıkaralım.

Aslında PC2 doğrusu, PC1 doğrusuna dik olan doğrudur.

Kırmızı doğru, datamız için best fit olan doğru olarak bulunmuştu ve hatırlarsanız 4 birim x ekseni, 1 birim y ekseninden oluşuyordu. Mavi doğru ise kırmızı doğru dik olarak bulunan doğrudur. Mantıken, -1 birim x ekseni ve 4 birim y ekseninden oluştuğunu düşünebiliriz. Yine bu değerleri de normalize edersek (yukarıda olduğu gibi hipotenüs uzunluğuna bölersek), -0.242 x ekseni ve 0.97 y ekseni içerir. Bu değerler PC2 doğrusunun Eigenvektorleridir. Veya farklı ifade ile singular vektörüdür (tekil vektörüdür).

Şimdi verilerin PC2 üzerine projeksiyonları alındığında, PC1 değerinin PC2 değerinden 5kat daha değerli olduğunu düşünelim (bu şekilde kabul edelim, 5 simgesel bir sayıdır, dersin anlaşılması için söylenmiş bir değerdir.)

Yani PC1 değerinin 15 gibi bir değer ve PC2 değerinin 3 gibi bir değer olduğunu kabul etmiş olabiliriz. Dolayısıyla 15+3 = 18. PC1 toplam datanın 15/18= 0.83'lük kısmını temsil eder. PC2 ise 3/18 = 0.17'lik kısmını temsil eder. (PC1 ve PC2 değerlerini ben kendim uydurdum. PC1 ve PC2 değerleri değişse de oran hep aynı kalacaktır.)

Burada biz 2 boyutlu data için çalışma prensibinden bahsettik. Bu datanın 20,50 veya daha yüksek boyutlu datalar için yapıldığında her bir temel componentin (principal component) toplam datanın yüzde kaçını temsil ettiğini tespit ederiz. Şimdi bir örnek ile konumuzu daha açık şekilde ifade edelim isterseniz.

Datasetimizi hazır data olan digits veriseti ile yapalım.

from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape

Toplam dataset 64 feature’a sahip. Şimdi isterseniz bu boyutları nasıl azaltabileceğimizi değerlendirelim. Mesela 4 boyuta indirelim.

pca = PCA(n_components = 4) # project from 64 to 4 dimensions
projected = pca.fit_transform(digits.data)
print(digits.data.shape)
print(projected.shape)

4 boyut ile PCA bilgilerine bakalım. Mesela 4 boyut ile açıklanan varyanslar

4 boyut ile açıklanan varyansların oranları.

4 boyut ile toplam datanın ne kadarının açıkladığı. Aşağıda görüldüğü üzere 4 boyut ile toplam datanın %48.7'si temsil edilmektedir.

Şimdi artık PCA algoritmalarının attributeları ile ilgili biraz açıklama yapalım.

components_ : Verilerdeki maksimum varyans yönlerini temsil eden özellik uzayındaki ana eksenlerdir. Component sayısı algoritma kurulurlen girilebilir.

explained_variance_ : Seçilen bileşenlerin her biri tarafından açıklanan varyans miktarını açıklar. Varyans tahmini, n_samples — 1 serbestlik derecesini kullanır.

explained_variance_ratio_ : Seçilen bileşenlerin her biri tarafından açıklanan varyans yüzdesini temsil eder.

singular_values_ : Seçilen bileşenlerin her birine karşılık gelen tekil değerlerdir.

mean_ : Eğitim setinden tahmin edilen özellik başına ampirik ortalama.

n_components : Tahmin edilen component sayısı

n_features_ : Eğitim setindeki özellik sayısı

Şimdi yine aynı dataset ile 2 boyutta görselleştirme yapalım.

pca = PCA(n_components = 2) # project from 64 to 2 dimensions
projected = pca.fit_transform(digits.data)
print(digits.data.shape)
print(projected.shape)
plt.scatter(projected[:, 0], projected[:, 1],
c=digits.target, edgecolor=’none’, alpha=0.5,
cmap=plt.cm.get_cmap(‘Spectral’, 10))
plt.xlabel(‘component 1’)
plt.ylabel(‘component 2’)
plt.colorbar();

Şimdi yukarıdaki tanımladığımız digit datasetinden kaç principal komponent alırsak, ne kadarlık bir temsil sağlarız bunu konuşalım.

pca = PCA().fit(digits.data)
plt.figure(figsize=(18,6))
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.axhline(0.90, c=”r”)
plt.xlabel(‘number of components’)
plt.ylabel(‘cumulative explained variance’);

Yukarıdaki kod bloğunda, bütün datanın %90 temsilini sağlayan grafiği tespit etmeyi hedefledik.

Grafikten görüldüğü üzere, yaklaşık 20 component aldığımızda, toplam datanın %90'lık kısmını temsil edebilecek seviyeye geliyoruz. Veya 10 component alsaydık, yaklaşık %80'lik temsil sağlamış olabilirdik. Veya 30 component ile tüm datanın yaklaşık %95'lik kısmını temsil edebiliriz.

PCA algoritmalarında mesafeler önemli bir yer tuttuğundan dolayı datanın normalize edilmesi önem arz eder. Aşağıda PCA algoritmasının parametrelerinden whiten=True yapılırsa, nasıl bir durum olacağı gösterilmiştir.

Evet şu ana kadar sizlere PCA analizinin ispatı ve uygulaması ile ilgili açıklamalar yapmaya çalıştım. PCA analizinin çalışmalarına ait notebooku burada bulabilirsiniz. Şimdi isterseniz PCA analizi ile aklımıza gelecek bazı sorulara cevap verelim.

PCA algoritmasının avantajları nelerdir?

  • Korele olan sütunları yok eder
  • Algoritma performansını artırır. (Çok boyutlu data ile model yavaş çalışabilir. PCA ile model performansı artar)
  • Overfit olmayı azaltır.
  • Görselleştirme imkanı kazandırır.

PCA algoritmasının dezavantajları nelerdir?

  • Bağımsız değişkenler daha az yorumlanabilir hale gelir. Çünkü PCA’yı veri kümesine uyguladıktan sonra, orijinal özellikleriniz temel bileşenlere dönüşecektir. Temel Bileşenler, orijinal özelliklerimizin doğrusal birleşimidir (lineer combinasyonudur). Temel Bileşenler, orijinal özellikler kadar okunabilir ve yorumlanabilir değildir.
  • Data normalizasyonu kesinlikle PCA’den önce yapılmalıdır.
  • Boyut azaltılmasından dolayı, orjinal dataya kıyasla bir miktar bilgi kaybı olmaktadır.

PCA bir feature selection tekniği midir?

PCA, featurelardan, lineer kombinasyonlarını tespit ederek, farklı featurelar oluşturur ve datayı farklı bir şekilde temsil etmemizi sağlar. Yani bir feature selection tekniği değildir.

PCA analizi tekniği nedir?

Temel Bileşen Analizi (PCA), temel bileşenleri hesaplama ve bunları veriler üzerinde bir temel değişikliği gerçekleştirmek için kullanma sürecidir. PCA, veri varyasyonunun mümkün olduğu kadar çoğunu korurken daha düşük boyutlu veriler elde etmek için her veri noktasını yalnızca ilk birkaç temel bileşene yansıtarak boyutluluk azaltmada yaygın olarak kullanılır.

PCA’de datanın scale edilmesi neden önemlidir?

Ölçeklendirme, PCA’nın hesaplanma şekli nedeniyle önemlidir. Verileri kare anlamında en iyi temsil eden lineer alt uzayları bulan Tekil Değer Ayrıştırma yoluyla hesaplanır. Ölçekleme önemlidir, çünkü tekil değer ayrıştırması kareler anlamında yaklaşıktır. Dolayısıyla, bir değişken diğerinden farklı bir ölçekte ise, PCA prosedürüne hakim olacaktır.

Büyük datasetlerde PCA algoritması kullanılır mı?

PCA nesnesi çok kullanışlıdır ancak büyük veri kümeleri için belirli sınırlamaları vardır. En büyük sınırlama, PCA’de işlenen tüm verilerin ana belleğe sığması gerekliliğidir. Büyük veri kümesiyle kullanmak için daha iyi bir alternatif IncrementalPCA’dır, bu nesne farklı bir işleme biçimi kullanır ve verileri mini batch biçiminde işlerken PCA’nın sonuçlarıyla neredeyse tam olarak eşleşen kısmi hesaplamalara izin verir.

PCA analizi konusunda söyleyeceklerim bu kadar. Umarım faydalı olmuştur.

Referanslar:

--

--