Veri Boyutu Azaltma Yöntemleri (PCA, t-SNE ve UMAP)

Ilknurakcay
Huawei Developers - Türkiye
8 min readJul 19, 2024
Veri Boyutu Azaltma Yöntemleri

Giriş

Boyut azaltma (dimensionality reduction), yüksek boyutlu verilerdeki karmaşıklığı azaltarak veri setinin daha anlaşılır hale gelmesini sağlayan bir tekniktir. Büyük veri kümelerinde işlem yapmak, hesaplama gereksinimlerini ve karmaşıklığı artırarak, işlemlerin sonuçlanma süresini uzatabilir. Bu sorunların üstesinden gelmek, orijinal veri kaybını minimum şekilde tutarak verinin anlaşılır bir şekilde yorumlanabilmesi için özellik çıkarım (feature extraction) metotları kullanılır.
Bu yazıda en çok kullanılan feature extraction metotlarından PCA, t-SNE ve UMAP’den bahsedeceğim.

PCA(Principal Component Analysis)
PCA en çok kullanılan boyut azaltma yöntemlerinden biridir.
6 sample içeren ve 2 boyutlu olarak temsil edilen örnek bir veri üzerinde PCA’ in çalışma mantığını inceleyelim.

nn
Figür 1: 6 sample içeren 2 boyutlu verinin gösterimi

Burada Gene1 ve Gene2 iki ayrı özelliği temsil eder. Öncelikle verilerin Gene1 ve Gene2 eksenleri üzerinde orta noktası bulunur (Kırmızı x işaretleri) ve tüm verinin orta noktası belirlenir (Mavi x işareti). Bu merkez noktası orijin noktasının üzerinde olacak şekilde veriler Figür 2' deki gibi kaydırılır.

Figür 2: Veri setine en iyi uyum sağlayan doğruyu bulma

Orijinden geçen sonsuz adet doğrudan, veri setine en iyi şekilde uyum sağlayanı bulmak gerekir. Bunun için olası doğrular çizilir (Figür 2’ deki kırmızı doğrular bunlardan birkaçı) ve her bir noktanın bu doğrulara olan mesafeleri hesaplanır. Mesafelerin minimize edildiği doğru, veri setine en iyi uyum sağlayan doğru olarak kabul edilir (Figür 3’de kırmızı kesikli PC1 çizgi). PC1 doğrusuna dik ve orijinden geçen başka bir doğru çizilir ve bu doğruyada PC2 doğrusu denir (Figür 3’deki mavi kesikli çizgi)

dadad
Figür 3: PC1 ve PC2 nin 2D olarak gösterimi

Nokta şeklinde temsil edilen veriler PC1 ve PC2 eksenine yansıtılır. Verilerin PC1 veya PC2 üzerinde projeksiyonu alınarak, eigenvalue (öz değerler) belirlenir. Eigenvalue varyansın bir ölçüsüdür.
PC1 varyans değerinin 15, PC2 varyans değerinin 5 olduğunu varsayalım. Principal componentler arasındaki total varyans 20 olur. PC1 varyansı tüm principal compenentler içerisindeki varyans yüzdesi 15/20=%75 olur. Bu değer PC1 ekseninin toplam varyasyondan ne kadar sorumlu olduğunu gösterir.

Figür 4: Eigenvalue hesaplaması

Şimdi PCA algoritması ile basit bir uygulama yapalım.

Iris dataseti 3 farklı çiçek türü ve bunlara ait özellikler içerir. Daha iyi gözlem yapabilmek adına veriyi data frame’e çevirerek ilk 5 öğesini bastıralım.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# Iris veri setini yükleme
iris = load_iris()
X = iris.data
y = iris.target
#Veriyi data frame'e çevirme
df=pd.DataFrame(X,columns=iris.feature_names)
df.head(5)
Figür 5: İris data setinin ilk 5 satırının gösterimi
#2 boyutta PCA modelini oluştur
pca = PCA(n_components=2)
pca.fit(X)
X_pca = pca.transform(X)
pca.explained_variance_ratio_
sum(pca.explained_variance_ratio_)
Figür 6: Yeni oluşturulan eksenlerin varyans değerleri

Yukarıda head() fonksiyonu ile data frame’i bastırdığımızda X değerinin 4 boyutlu olduğunu gördük(sepal length, sepal width, petal length ve petal width) ve bu değeri PCA fonksiyonu sayesinde 2 boyuta indirdik. Teorik kısımda dimension reduction metodunu uyguladıktan sonra her bir PC ekseninin datanın ne kadarını temsil ettiğini hesaplamıştık. Aynı işlemi “explained_variance_ratio_” fonksiyonu ile uygulama kısmında da görmek istiyoruz. Oluşturduğumuz 2 yeni eksenden birisi datanın varyansını 0.92 olarak gösterirken diğeri 0.05 olarak gösteriyor. Toplam varyans değeri ise 0.97 olarak bulunuyor.
Buradan şu sonucu çıkarabiliriz; PCA ile veri boyutunu 2 bileşene indirgemek, verilerin toplam varyansının yaklaşık % 97.7'sini korumuştur.

plt.figure(figsize=(8, 6))
for i in range(len(np.unique(y))):
plt.scatter(X_pca[y == i, 0], X_pca[y == i, 1], label=iris.target_names[i])
plt.title('PCA with Irıs Dataset')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.legend()
plt.show()
Figüre 7: 4 boyutlu İris veri setinin PCA uygulandıktan sonraki dağılımı

t-SNE (T-distributed Stochastic Neighbor Embedding)
t-SNE doğrusal olmayan boyut azaltma yöntemidir ve noktaların birbirlerine olan benzerliklerini kullanır. Şimdi t-SNE çalışma mantığını inceleyelim.
2D bir gösterimde 3 farklı sınıfa ait verilerin kümeler şeklinde birbirinden ayrı konumlarda bulunduğunu varsayalım. Bunların dışında sınıfı belirli olmayan bir veri örneğimiz (siyah ile temsil edilmiştir) olduğunu düşünelim.

Figür 8: 3 ayrı sınıfı temsil eden veri kümeleri ve hangi sınıfı ait olduğu bilinmeyen (siyah renkli) örnek veri

Bu belirsiz veri noktasının diğer noktalarla arasındaki mesafe ölçülür, mesafeler korunarak veriler normal dağılım grafiği üzerine yerleştirilir ve benzerlik puanı içeren bir matris (S1) oluşturulur.
*High dimensionda(Yüksek boyutta) gösterilen verilerde Normal dağılım kullanılır.

Figür 9: Veri setinin normal dağılım grafiği üzerindeki temsili ve benzerlik puanı matrisi(S1)

Sonrasında, data random olarak tek boyuta dağıtılır. Her bir veri örneği ile diğer noktalar arasındaki mesafeler ölçülür. Bunu yaparken t-dağılım kullanılır ve benzerlik puanı içeren bir matris (S2) oluşturulur.
* Low dimensionda(Düşük boyutta) gösterilen verilerde t — dağılım kullanılır.

Figür 10: Veri setinin t dağılım grafiği üzerindeki temsili ve benzerlik puanı matrisi(S2)

t-dağılım sonucu elde edilen benzerlik matrisi orijinal matristen daha farklıdır. Son aşamada yineleme kullanılarak benzer noktalar birbirine yaklaşarak kümeleşir ve benzer olmayanlar birbirinden uzaklaşır. S1 ve S2 matrisleri kıyaslanır. Yüksek boyutlu uzay ile düşük boyutlu uzaydaki benzerlik matrisleri arasındaki farkı Kullback-Leibler Divergence ile en aza indirmek amaçlanır. Bu da verinin yerel yapısını korumasına yardımcı olur.
*Kullback-Leibler Divergence iki olasılık dağılımı arasındaki farkı ölçer.

Figür 11: Normal dağılım ve t dağılım arasındaki fark

İki dağılım da çan şeklinde bir eğriye sahiptir. t dağılım , normal dağılıma göre daha düşük bir tepe noktasına ve daha geniş açılan kuyruklara sahiptir. Kuyruk kısmının bu şekilde olması dağılımdaki büyük sapmalara karşı daha fazla direnç sağladığını gösterir.

Şimdi t-SNE algoritması ile de basit bir uygulama yapalım.


from sklearn.manifold import TSNE
#t-SNE modeli oluşturma
tsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(X)
print('Old Shape of X: ', X.shape)
#Old Shape of X: (150, 4)
print('New Shape of X: ', X_tsne.shape)
#New Shape of X: (150, 2)
plt.figure(figsize=(8, 6))
for i in range(len(np.unique(y))):
plt.scatter(X_tsne[y == i, 0], X_tsne[y == i, 1], label=iris.target_names[i])
plt.title('t-SNE with Irıs Dataset')
plt.xlabel('Component 1')
plt.ylabel('Component 2')
plt.legend()
plt.show()
Figüre 12: 4 boyutlu İris veri setinin t-SNE uygulandıktan sonraki dağılımı

UMAP (Uniform Manifold Approximation and Projection for Dimension Reduction)
UMAP veri noktaları arasındaki benzerlik skorunu hesaplayarak düşük boyutlu gösterimde, aynı sınıfa ait noktaların kümelenmesini korumayı hedefler. Öncelikle veri yüksek boyutlu olarak temsil edilir ve her bir veri noktası arasındaki mesafe hesaplanır. Sonra bu mesafeler kullanılarak benzerlik skoru hesaplanacaktır.

Figür 13: High dimensional veriler ve arasındaki mesafelerin belirlenmesi

Benzerlik skorunu high dimensional gösterimde hesaplayabilmek için 1 veri noktası referans olarak seçilir ve bu nokta temsili doğrumuzun başlangıcına konumlandırılır. Figür 14’de A noktası referans olarak seçilmiştir. Tüm veri noktaları, referans noktasına olan uzaklığına göre doğru üzerine yerleştirilir. Veriler üzerindeki benzerlik puanını hesaplamak için bir eğri çizilir (Figür 14'de yeşil ile gösterilmiştir). Eğrinin y eksenindeki değerler komşuluk ilişkilerine bağlı olarak belirlenir.

Figür 14: High dimensional verinin doğru üzerinde konumlandırılması

Yukarıdaki örnek veri setinde her bir sınıfta 3 veri bulunmaktadır. Bu verilerin y eksenindeki karşılığını bulabilmek adına aşağıdaki formül kullanılır.
log2(num neighborhood) = log2(3)=1.6
Formülden elde edilen 1.6 değeri A noktasının komşularının y eksenine karşılık gelen değerlerinin toplamını ifade eder.

Bu sonuca göre B noktasının değerinin 1.0 , C noktası değerinin 0.6 olduğunu varsayalım. A noktasından oldukça uzakta bulunan D, E ve F noktaları 0 benzerlik puanına sahip olacaktır. Fakat noktalar referans alınarak benzerlik skoru hesaplanmak istendiğinde skorların simetrik olmadığı anlaşılır.

Örneğin C noktasını referans olarak seçseydik, B ve C noktası arasındaki benzerlik skoru 1 olacaktı fakat B noktası referans seçilseydi, B ve C noktası arasındaki benzerlik skoru 0.6 olacaktı. UMAP algoritması ortalama hesaplamaya benzer bir yöntemle bu sorunun üstesinden gelmektedir.

Figür 15: Farklı referans noktaları ile benzerlik skorlarının hesaplanması

Şimdi verileri low dimensional olarak görselleştirelim. Veri dağılımı 1D olarak gösterilirken (Figür 16' daki gibi ) doğru şekilde konumlanmamıştır. Burada amaç görselleştirme yapılırken aynı sınıfa ait verilerin bir arada bulunmasını sağlamaktır.

Figür 16: Low dimensional verinin görselleştirilmesi

Bunu düzeltebilmek için bir veri noktası seçilir ve bu noktanın komşuları arasında benzerlik skoru yüksek olan ikinci bir nokta seçilir.(Benzerlik skorları Figür 15' de hesaplanmıştır). Bu örnekte ilk nokta A , ikinci nokta B olarak seçilmiştir.
A noktasını referans aldığımızda buna en yakın noktanın (benzerlik değeri en yüksek olan) B noktası olduğunu Figür 16'da belirledik. Seçilen nokta çifti skor puanının yüksekliğine göre birbirine yaklaştırılır.

Algoritmanın çalışmaya devam edebilmesi için bu işlem devamlı olarak yapılmalıdır. Bir sonraki adımda E noktasını seçelim. E noktası A ve B noktası ile aynı sınıfta bulunmadığı için doğru üzerinde de uzaklaştırılmalıdır.

Figüre 17: Low dimensional verilerin hareketi

1D doğru üzerinde hangi noktanın nereye , ne kadar yaklaştırılması gerektiğini hesaplamak için low dimensional gösterimde benzerlik skoru hesaplanmalıdır. Bu skor t — dağılım benzeri bir yapıyla hesaplanır.

Figüre 18: Low dimensional verilerin benzerlik skorunun maksimize edilmesi

A noktasını dağılım grafiğinin merkezine yerleştirirsek, aynı sınıfta olan B noktasını A noktasına doğru yaklaştırız(Figür 18). Bu şekilde low dimensional skoru maksimize etmeyi hedefleriz.

Figüre 19: Low dimensional verilerin benzerlik skorunun minmize edilmesi

Benzer şekilde E noktasını dağılım grafiğinin ortasına yerleştirirsek, B noktası E noktasından uzaklaşacaktır. Bu şekilde E ve B noktaları arasındaki low dimensional skor minimize edilir(Figür 19). İşlemler her veri noktası için tekrarlanır ve yapı korunarak, boyut azaltma işlemi geçekleştirilir.

import umap.umap_ as umap
umap_obj = umap.UMAP()
embedding = umap_obj.fit_transform(X)
print('Old Shape of X: ', X.shape)
print('New Shape of X: ', embedding.shape)
#Old Shape of X: (150, 4)
#New Shape of X: (150, 2)
for i in range(len(np.unique(y))):
plt.scatter(embedding[y == i, 0], embedding[y == i, 1], label=iris.target_names[i])
plt.title('UMAP Embedding')
plt.xlabel('UMAP Dimension 1')
plt.ylabel('UMAP Dimension 2')
plt.legend()
plt.show()
Figüre 20: 4 boyutlu İris veri setinin UMAP uygulandıktan sonraki dağılımı

PCA , t-SNE ve UMAP Karşılaştırması

t-SNE’de her runda datalar farklı bir konumda 1D olarak konumlanırken, UMAP’de veri noktaları her runda aynı konumda bulunur. t-SNE’ de her bir nokta her iterasyonda hareket ederek en uygun konumu bulmaya çalışır, fakat UMAP’ de mümkün oldukça az nokta kümesi hareket ettirilir. Bu da büyük veri setlerinin iyi ölçeklenmesini sağlar.

t-SNE’nin aksine UMAP’de data 1D şeklinde temsil edilirken random olarak dağıtılmaz. UMAP’de ise Spectral Embedding olarak adlandırılan bir initilaze yöntemi sayesinde başlangıçta veri kümeleri daha iyi bir şekilde temsil edilir.
* Spectral Embedding , verinin yerel yapısını koruyarak noktaları benzerliklerine göre kümelemeye yardımcı olur.

t-SNE verinin yerel yapısını koruma konusunda UMAP’den daha başarılıdır. Buna karşı UMAP ise verinin küresel yapısını korur. PCA ise yalnızca verinin küresel yapısına odaklanır.
*Yerel yapı veri noktaları arasındaki yakın ilişkileri ve komşulukları ifade eder. Küresel yapı ise veri kümesinin genel düzenini ve ilişkilerini anlamak için önemlidir.

Aşağıdaki linkten UMAP parametrelerinin veri üzerindeki değişikliklerini interaktif olarak gözlemleyebilirsiniz.
https://pair-code.github.io/understanding-umap/

Sonuç

Örnek veri setimize 3 farklı veri boyutu azaltma yöntemini uyguladığımızda, en iyi çıktıyı UMAP’dan aldığımızı söyleyebiliriz. PCA ve t-SNE çıktılarında veri sınıfları daha iç içe görünürken, UMAP’ de sınıflar birbirinden daha net bir şekilde ayrılmıştır. Veri kümesinin büyük olduğu senaryolarda bu ayrım daha net görülebilir. Hiçbir boyut azaltma tekniği mükemmel şekilde çalışmaz fakat büyük veri setleri ile çalışmak zorunda kaldığımızda veriyi anlamada ve görselleştirmede bizlere yardımcı olur.

--

--