t-SNE i UMAP¶

t-SNE i UMAP su nelinearne metode za smanjenje dimenzionalnosti podataka koje se često koriste za vizualizaciju. Njihova osnovna ideja jeste da se podaci iz prostora velike dimenzije preslikaju u prostor manje dimenzije tako da se, koliko je moguće, očuvaju odnosi bliskosti među instancama. Posebno su korisne kada želimo da uočimo grupe, obrasce ili lokalnu strukturu u podacima.
Ako u skupu podataka imamo, na primer, 50 atributa, cilj je da pomoću t-SNE ili UMAP dobijemo prikaz tih podataka u prostoru dimenzije 2 ili 3, koji je pogodan za vizualizaciju i interpretaciju.
Ideja ovih metoda jeste da se tačke preslikaju u prostor manje dimenzije tako da se što bolje očuva njihova međusobna bliskost. To znači da tačke koje su u originalnom prostoru bile blizu treba da ostanu blizu i u novom prikazu. Cilj, dakle, nije očuvanje svih rastojanja, već pre svega očuvanje lokalne strukture podataka, odnosno susedstva među tačkama.
Ukratko ćemo objasniti ideju t-SNE algoritma. Najpre je potrebno definisati kako merimo sličnost dve instance. Osnovna intuicija je da su dve instance slične ako su bliske u originalnom prostoru, dok su manje slične ako su međusobno udaljene. Zato se sličnost definiše kao opadajuća funkcija njihovog rastojanja.
U t-SNE algoritmu te sličnosti se predstavljaju pomoću verovatnoća. Oznakom pij obeležavamo sličnost i-te i j-te instance u originalnom prostoru, a oznakom qij sličnost tih istih instanci u prostoru manje dimenzije.
Cilj t-SNE algoritma jeste da raspodela sličnosti u prostoru manje dimenzije bude što sličnija odgovarajućoj raspodeli u originalnom prostoru. Zbog toga se kao funkcija cilja koristi Kullback-Leiblerova divergencija između raspodela pij i qij, definisana formulom:

$$ L = \sum_{i,j} p_{ij} \log \frac{p_{ij}}{q_{ij}} $$

Iz ove formule se vidi da model trpi veliku kaznu ukoliko tačke koje su bile bliske u originalnom prostoru postanu udaljene u prostoru manje dimenzije. Na taj način t-SNE posebno nastoji da očuva lokalnu strukturu podataka. Funkcija cilja se minimizuje primenom metode gradijentnog spusta.
Za detaljnije objašnjenje može se pogledati sledeći snimak: Video 1
Za objašnjenje UMAP algoritma mogu se pogledati sledeći snimci:
Video 2
Video 3
Za više detalja može se pogledati i zvanična dokumentacija: UMAP dokumentacija.

U radu ćemo koristiti Viskonsis skup podataka za klasifikaciju tumora na benigne i maligne. Dakle, imamo dve različite klase.

In [ ]:
# !pip install umap-learn
In [ ]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import umap.umap_ as umap
from sklearn import datasets
from sklearn.manifold import TSNE
In [ ]:
import warnings
warnings.filterwarnings('ignore')
In [ ]:
podaci = datasets.load_breast_cancer()
y = podaci.target
X = podaci.data
X.shape # originalni prostor je dimenzije 30
Out[ ]:
(569, 30)
In [ ]:
tsne = TSNE(n_components=2, perplexity=50) # novi prostor je dimenzije 2
# perplexity je parametar sa kojim je moguce eksperimentisati,
# razlicite vrednosti ce davati razlicite rezultate
X_tsne = tsne.fit_transform(X)
In [ ]:
plt.scatter(X_tsne[:,0][y==0], X_tsne[:,1][y==0], s=5, c='r')
plt.scatter(X_tsne[:,0][y==1], X_tsne[:,1][y==1], s=5, c='y')
plt.show()

Možemo primetiti da su klase sasvim dobro razdvojene.

In [ ]:
umap = umap.UMAP(n_components=2) # sad pomoću UMAP-a preslikavamo matricu atributa
# u dvodimenzioni prostor
X_umap = umap.fit_transform(X)
OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
In [ ]:
plt.scatter(X_umap[:,0][y==0], X_umap[:,1][y==0], s=5, c='r')
plt.scatter(X_umap[:,0][y==1], X_umap[:,1][y==1], s=5, c='y')
plt.show()