Kurs
Bu eğitimde, boyut indirgeme ve veri görselleştirme için güçlü bir teknik olan t-SNE’nin nasıl çalıştığını ele alacağız. Bunu bir başka popüler teknik olan PCA ile karşılaştıracak ve hem t-SNE hem de PCA’yı scikit-learn ve plotly express kullanarak sentetik ve gerçek dünyadan veri kümeleri üzerinde nasıl uygulayacağımızı göstereceğiz.

t-SNE nedir?
t-SNE (t-distributed Stochastic Neighbor Embedding), yüksek boyutlu verileri keşfetmek ve görselleştirmek için kullanılan gözetimsiz, doğrusal olmayan bir boyut indirgeme tekniğidir. Doğrusal olmayan boyut indirgeme, algoritmanın düz bir çizgiyle ayrılamayan verileri ayırmamıza imkân tanıdığı anlamına gelir.

t-SNE, verilerin daha yüksek boyutlarda nasıl düzenlendiğine dair bir sezgi kazandırır. Çoğunlukla karmaşık veri kümelerini iki ya da üç boyutta görselleştirmek için kullanılır; bu sayede verideki temel örüntüler ve ilişkiler hakkında daha fazla anlayış elde ederiz.
Yüksek boyutlu verileri keşfetme, özellik seçimi ve özellik çıkarımı hakkında bilgi edinmek için Python ile Boyut Azaltma kursumuzu alın.
t-SNE ve PCA
Hem t-SNE hem de PCA, farklı mekanizmalara sahip boyut indirgeme teknikleridir ve farklı veri türlerinde en iyi şekilde çalışırlar.
PCA (Temel Bileşenler Analizi), doğrusal yapıya sahip verilerde en iyi sonuç veren doğrusal bir tekniktir. Veriyi daha düşük boyutlara yansıtarak altta yatan temel bileşenleri belirlemeye çalışır; varyansı en aza indirir ve büyük ikili uzaklıkları korur. Algoritmaların iç işleyişini R örnekleriyle anlamak için Principal Component Analysis (PCA) eğitimimizi okuyun.
Buna karşılık, t-SNE doğrusal olmayan bir tekniktir ve düşük boyutlu bir uzayda veri noktaları arasındaki ikili benzerlikleri korumaya odaklanır. t-SNE küçük ikili uzaklıkları korumakla ilgilenirken, PCA varyansı maksimize etmek için büyük ikili uzaklıkları korumaya odaklanır.
Özetle, PCA verideki varyansı korur. Buna karşın t-SNE, veri noktaları arasındaki ilişkileri düşük boyutlu bir uzayda korur; bu da onu karmaşık, yüksek boyutlu verileri görselleştirmek için oldukça iyi bir algoritma yapar.
Aşağıdaki tablo, t-SNE ve PCA’yı yan yana karşılaştırmanıza yardımcı olabilir:
| Özellik | t-SNE | PCA |
|---|---|---|
| Tür | Doğrusal olmayan boyut indirgeme | Doğrusal boyut indirgeme |
| Amaç | Yerel ikili benzerlikleri korumak | Küresel varyansı korumak |
| En uygun olduğu durum | Karmaşık, yüksek boyutlu verileri görselleştirme | Doğrusal yapılı veriler |
| Çıktı | Düşük boyutlu gösterim | Temel bileşenler |
| Kullanım alanları | Kümeleme, anomali tespiti, NLP | Gürültü azaltma, özellik çıkarımı |
| Hesaplama yoğunluğu | Yüksek | Düşük |
| Yorumlanabilirlik | Yorumlaması daha zor | Daha kolay yorumlanır |
t-SNE Nasıl Çalışır
t-SNE algoritması, yüksek ve düşük boyutlu uzayda örnek çiftleri arasındaki benzerlik ölçüsünü bulur. Ardından iki benzerlik ölçüsünü optimize etmeye çalışır. Tüm bunları üç adımda yapar.
- t-SNE, hem yüksek hem de düşük boyutlarda bir noktanın başka bir noktanın komşusu olarak seçilmesini modellemeyi amaçlar. Yüksek boyutlu uzayda tüm veri noktaları arasındaki ikili benzerliği bir Gauss çekirdeği kullanarak hesaplayarak başlar. Birbirinden uzak noktaların seçilme olasılığı, birbirine yakın noktalardan daha düşüktür.
- Ardından algoritma, ikili benzerlikleri koruyarak daha yüksek boyutlu veri noktalarını daha düşük boyutlu uzaya eşlemeye çalışır.
- Bu, orijinal yüksek boyutlu ve düşük boyutlu olasılık dağılımları arasındaki sapmanın en aza indirilmesiyle başarılır. Algoritma sapmayı en aza indirmek için gradyan inişi kullanır. Düşük boyutlu gömme kararlı bir duruma optimize edilir.
Optimizasyon süreci, düşük boyutlu uzayda benzer veri noktalarının küme ve alt kümeler oluşturmasına olanak tanır; bunlar, yüksek boyutlu verideki yapı ve ilişkileri anlamak için görselleştirilir.
Python ile t-SNE Örneği
Python örneğinde, sınıflandırma verisi oluşturacak, PCA ve t-SNE uygulayacak ve sonuçları görselleştireceğiz. Boyut indirgeme için scikit-learn kullanacağız ve görselleştirme için de Plotly Express kullanacağız.
Sınıflandırma veri kümesi oluşturma
scikit-learn’ün make_classification() fonksiyonunu kullanarak 6 özellik, 1500 örnek ve 3 sınıfa sahip sentetik veri oluşturacağız.
Ardından, verinin ilk üç özelliğini Plotly Express scatter_3d() fonksiyonunu kullanarak 3B olarak çizeceğiz.
import plotly.express as px
from sklearn.datasets import make_classification
X, y = make_classification(
n_features=6,
n_classes=3,
n_samples=1500,
n_informative=2,
random_state=5,
n_clusters_per_class=1,
)
fig = px.scatter_3d(x=X[:, 0], y=X[:, 1], z=X[:, 2], color=y, opacity=0.8)
fig.show()
Verinin 3B çizimini elde ettik; ayrıca Plotly Express’in scatter() fonksiyonunu kullanarak veriyi 2B grafikte de görselleştirebilirsiniz.

PCA ile uyarlama ve dönüştürme
Şimdi, veri kümesi üzerinde PCA algoritmasını uygulayarak iki PCA bileşeni elde edeceğiz. fit_transform() veri setini aynı anda öğrenir ve dönüştürür.
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
Python’da t-SNE görselleştirmesi
Artık iki PCA bileşenini bir saçılma grafiğinde göstererek sonuçları görselleştirebiliriz.
- x: Birinci bileşen
- y: İkinci bileşen
- color: hedef değişken.
update_layout() fonksiyonunu da başlık eklemek ve x ile y eksenlerini yeniden adlandırmak için kullandık.
fig = px.scatter(x=X_pca[:, 0], y=X_pca[:, 1], color=y)
fig.update_layout(
title="PCA visualization of Custom Classification dataset",
xaxis_title="First Principal Component",
yaxis_title="Second Principal Component",
)
fig.show()

t-SNE’yi uyarlama ve dönüştürme
Şimdi t-SNE algoritmasını veri kümesine uygulayıp sonuçları karşılaştıracağız.
Veriyi uyarlayıp dönüştürdükten sonra, yüksek ve düşük boyutlu olasılık dağılımları arasındaki Kullback-Leibler (KL) sapmasını göstereceğiz. Düşük KL sapması genellikle daha iyi sonuçların işaretidir.
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, random_state=42)
X_tsne = tsne.fit_transform(X)
tsne.kl_divergence_
1.1169137954711914
Python’da t-SNE görselleştirmesi
PCA’ya benzer şekilde, iki t-SNE bileşenini bir saçılma grafiğinde görselleştireceğiz.
fig = px.scatter(x=X_tsne[:, 0], y=X_tsne[:, 1], color=y)
fig.update_layout(
title="t-SNE visualization of Custom Classification dataset",
xaxis_title="First t-SNE",
yaxis_title="Second t-SNE",
)
fig.show()
Sonuç PCA’dan oldukça daha iyi. Üç büyük kümeyi açıkça görebiliyoruz.

Müşteri Terk Veri Kümesi Üzerinde t-SNE
Bu bölümde, İranlı bir telekom şirketinin müşteri terk veri kümesini kullanacağız. Veri kümesi, çağrı başarısızlıkları ve abonelik süresi gibi müşteri etkinlikleri ile bir terk etiketi hakkında bilgiler içerir.
Terk oranı, belirli bir zaman diliminde belirli bir hizmeti kullanmayı bırakan müşterilerin yüzdesi anlamına gelir.
Not: Her iki örneğin de kod kaynağı ve veri kümesi bu DataLab çalışma kitabında mevcuttur; kodla oynamak ve çalıştırmak isterseniz bir kopya oluşturmanız yeterlidir!
Müşteri terk veri kümesini içe aktarma
Veri kümesini pandas ile yükleyip ilk üç satırı görüntüleyeceğiz.
import pandas as pd
df = pd.read_csv("data/customer_churn.csv")
df.head(3)

PCA ile boyut indirgeme
Ardından şunları yapacağız:
- Churn sütununu kullanarak özellikleri (X) ve hedefi (y) oluşturmak.
- Özellikleri standart bir ölçekleyici ile normalize etmek.
- Veri kümesini eğitim ve test kümelerine ayırmak.
- Eğitim veri kümesine PCA uygulamak.
- Test veri kümesini kullanarak skoru almak. Skor, tüm örneklerin ortalama log-olasılığını temsil eder.
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X = df.drop('Churn', axis=1)
y = df['Churn']
scaler = StandardScaler()
X_norm = scaler.fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(
X_norm, y, random_state=13, test_size=0.25, shuffle=True
)
pca = PCA(n_components=2)
X_train_pca = pca.fit_transform(X_train)
pca.score(X_test)
-17.04482851288105
PCA sonuçlarını görselleştirme
Şimdi PCA sonucunu Plotly Express saçılma grafiğiyle görselleştireceğiz.
fig = px.scatter(x=X_train_pca[:, 0], y=X_train_pca[:, 1], color=y_train)
fig.update_layout(
title="PCA visualization of Customer Churn dataset",
xaxis_title="First Principal Component",
yaxis_title="Second Principal Component",
)
fig.show()
PCA kümeler oluşturmada başarılı olmadı. Düşük boyuttaki veriler rastgele görünüyor. Bu aynı zamanda veri kümesindeki özelliklerin yüksek derecede çarpık olabileceği veya güçlü bir korelasyon yapısına sahip olmadığı anlamına da gelebilir.

Çarpıklık (perplexity) ve sapmayı karşılaştırma
Çarpıklık, t-SNE algoritması için önemli bir hiperparametredir. Boyut indirgeme sürecinde her bir noktanın dikkate aldığı etkin komşu sayısını kontrol eder.
5’ten 55’e, 5’er artışla çeşitli çarpıklık değerleri üzerinde KL sapması metriğini almak için bir döngü çalıştıracağız. Ardından sonucu Plotly Express çizgi grafiğiyle göstereceğiz.
import numpy as np
perplexity = np.arange(5, 55, 5)
divergence = []
for i in perplexity:
model = TSNE(n_components=2, init="pca", perplexity=i)
reduced = model.fit_transform(X_train)
divergence.append(model.kl_divergence_)
fig = px.line(x=perplexity, y=divergence, markers=True)
fig.update_layout(xaxis_title="Perplexity Values", yaxis_title="Divergence")
fig.update_traces(line_color="red", line_width=1)
fig.show()
40 çarpıklık değerinden sonra KL sapması sabit hale geldi. Bu nedenle t-SNE algoritmasında 40 çarpıklık kullanacağız.

t-SNE ile boyut indirgeme
Şimdi t-SNE’yi uyarlayıp veriyi en düşük KL sapmasını elde etmek için 40 çarpıklıkla düşük boyutlara dönüştüreceğiz.
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2,perplexity=40, random_state=42)
X_train_tsne = tsne.fit_transform(X_train)
tsne.kl_divergence_
0.258713960647583
t-SNE’yi görselleştirme
Şimdi bileşenleri ve hedef sınıfları göstermek için Plotly saçılma grafiğini kullanacağız.
fig = px.scatter(x=X_train_tsne[:, 0], y=X_train_tsne[:, 1], color=y_train)
fig.update_layout(
title="t-SNE visualization of Customer Churn dataset",
xaxis_title="First t-SNE",
yaxis_title="Second t-SNE",
)
fig.show()
Gördüğümüz gibi, birden çok küme ve alt küme var. Bu bilgiyi örüntüyü anlamak ve mevcut müşterileri elde tutma stratejisi geliştirmek için kullanabiliriz.

t-SNE’nin Sınırlamaları ve Zorlukları
t-SNE, yüksek boyutlu veriler için güçlü bir görselleştirme aracı olsa da bazı sınırlamalarla birlikte gelir:
- Hesaplama maliyeti: t-SNE hesaplama açısından pahalıdır, özellikle de büyük veri kümelerinde. İkili benzerlik hesaplamaları veri kümesinin boyutuyla birlikte kötü ölçeklenir; bu da milyonlarca noktaya sahip veri kümeleri için daha az uygun olmasına neden olur.
- Hiperparametrelere duyarlılık: t-SNE’nin performansı çarpıklık ve öğrenme hızı gibi hiperparametrelere oldukça bağlıdır. En uygun değerleri bulmak çoğu zaman deneme-yanılma gerektirir ve zaman alıcı olabilir.
- Yorumlanabilirlik eksikliği: t-SNE’de elde edilen gömmeler genellikle belirleyici değildir (rastgele başlatma ve gradyan inişi nedeniyle) ve orijinal yüksek boyutlu veriyle doğrudan yorumlanabilir bir ilişkiye sahip değildir.
- Örnek dışı veriler için uygun değil: t-SNE, gömmeleri baştan yeniden hesaplamadan yeni, görülmemiş verilere genelleyemez; bu da dinamik veri kümeleri için verimsizdir.
t-SNE ve UMAP: Bir karşılaştırma
Son yıllarda, UMAP (Uniform Manifold Approximation and Projection), t-SNE’ye popüler bir alternatif olarak öne çıktı. Her ikisi de görselleştirme için tasarlanmış doğrusal olmayan boyut indirgeme teknikleri olsa da UMAP, t-SNE’nin bazı sınırlamalarını giderir:
- UMAP, t-SNE’den daha hızlı ve daha bellek verimlidir; bu da onu büyük veri kümeleri için uygun kılar.
- UMAP, veride hem yerel hem de küresel yapıları daha iyi korur; t-SNE ise öncelikle yerel ikili benzerlikleri korumaya odaklanır.
- UMAP’ın t-SNE’ye kıyasla ayarlanacak daha az hiperparametresi vardır ve sonuçları genel olarak çalıştırmalar arasında daha tutarlıdır.
- t-SNE’nin aksine, UMAP yeni veri noktaları için dönüşümleri destekler; bu da onu dinamik veri kümeleri için daha uygun kılar.
Hesaplama karmaşıklığı: t-SNE vs. UMAP vs. PCA
Aşağıdaki tablo, t-SNE’nin UMAP ve PCA ile karşılaştırıldığında hesaplama karmaşıklığını özetler:
| Teknik | Hesaplama karmaşıklığı | Özellikler | Büyük veri kümeleri için uygunluk |
|---|---|---|---|
| t-SNE | O(N2) | Yerel yapıyı korur, yüksek özelleştirilebilirlik | Orta (büyük veri kümelerinde yavaş) |
| UMAP | O(N log N) | Yerel ve küresel yapıyı dengeler, daha hızlı | Yüksek (büyük veri kümelerini verimli işler) |
| PCA | O(Nd2) | Doğrusal indirgeme, yorumlanabilir bileşenler | Yüksek (çok verimli) |
- N: Veri noktası sayısı
- d: Verideki özellik sayısı
Özetle, t-SNE yerel ilişkiler hakkında ayrıntılı içgörüler sağlarken, UMAP modern veri kümeleri için çoğu zaman daha verimli ve ölçeklenebilir bir seçenektir. PCA ise doğrusal veriler için hızlı ve yorumlanabilir bir seçenek olarak kalır. Veri kümesine ve hedeflere bağlı olarak doğru tekniği seçmek, yorumlanabilirlik, hesaplama maliyeti ve verinin doğası arasında bir denge kurmayı gerektirir.
t-SNE’nin Uygulamaları
Karmaşık çok boyutlu verileri görselleştirmenin yanı sıra, t-SNE’nin diğer kullanım alanları şunlardır:
- Kümeleme ve sınıflandırma: benzer veri noktalarını düşük boyutlu uzayda bir araya kümelendirmek için. Ayrıca sınıflandırma ve veride örüntü bulma amacıyla da kullanılabilir.
- Anomali tespiti: verideki aykırı değerleri ve anomalileri belirlemek için.
- Doğal dil işleme: büyük bir metin külliyatından üretilen kelime gömmelerini görselleştirerek kelimeler arasındaki benzerlik ve ilişkileri belirlemeyi kolaylaştırmak için.
- Bilgisayar güvenliği: ağ trafiği örüntülerini görselleştirmek ve anormallikleri tespit etmek için.
- Kanser araştırmaları: tümör örneklerinin moleküler profillerini görselleştirmek ve kanser alt tiplerini belirlemek için.
- Jeolojik alan yorumlama: sismik öznitelikleri görselleştirmek ve jeolojik anomalileri belirlemek için.
- Biyomedikal işaret işleme: elektroensefalogramı (EEG) görselleştirmek ve beyin etkinliği örüntülerini tespit etmek için.
Sonuç
t-SNE, karmaşık veri kümelerinde gizli örüntüleri ve yapıları ortaya çıkarmak için güçlü bir görselleştirme aracıdır. Anomalileri ve örüntüleri belirlemek için görsellerde, seste, biyolojik verilerde ve tekil verilerde kullanılabilir.
Bu blog yazısında, yüksek boyutlu doğrusal olmayan verileri düşük boyutlu bir uzayda görselleştirebilen popüler bir boyut indirgeme tekniği olan t-SNE’yi öğrendik. t-SNE’nin ana fikrini, nasıl çalıştığını ve uygulamalarını açıkladık. Ayrıca, t-SNE’nin sentetik ve gerçek veri kümelerine uygulanmasına ve sonuçların nasıl yorumlanacağına dair bazı örnekler gösterdik.
t-SNE, Gözetimsiz Öğrenmenin bir parçasıdır; bir sonraki doğal adım ise hiyerarşik kümelemeyi, PCA’yı, ilişkisizleştirmeyi ve yorumlanabilir özellikler keşfetmeyi anlamaktır. Tüm bu konuları Unsupervised Learning in Python kursumuzu alarak öğrenin.
SSS
t-SNE büyük veri kümeleri için kullanılabilir mi ve sınırlamaları nelerdir?
t-SNE, hesaplama karmaşıklığı ve bellek kullanımı nedeniyle çok büyük veri kümeleriyle zorlanabilir. Çoğu zaman t-SNE’yi verinin bir alt kümesi üzerinde kullanmak veya daha büyük veri kümeleri için UMAP gibi alternatifleri değerlendirmek önerilir.
Çarpıklık (perplexity) seçimi t-SNE sonuçlarını nasıl etkiler?
Çarpıklık, t-SNE’de yerel ve küresel veri yapısını koruma dengesi üzerinde etkili olan kritik bir hiperparametredir. Düşük çarpıklık yerel ilişkileri vurgularken, yüksek çarpıklık daha geniş yapıları yakalar. Veriniz için en uygun ayarı bulmak adına farklı değerleri denemek genellikle gereklidir.
Çarpıklık dışında t-SNE’de hangi hiperparametreleri ayarlamayı düşünmeliyim?
Çarpıklığın yanı sıra öğrenme oranı ve yineleme sayısını da göz önünde bulundurmalısınız. Öğrenme oranı algoritmanın ne kadar hızlı yakınsadığını, yineleme sayısı ise optimizasyon sürecinin süresini belirler.
t-SNE verideki gürültüyle nasıl başa çıkar?
t-SNE, ikili benzerlikleri korumaya çalıştığı için gürültüye duyarlı olabilir; gürültülü özellikler bu benzerlikleri bozabilir. Özellik seçimi veya gürültü giderme gibi ön işleme adımları t-SNE sonuçlarını iyileştirmeye yardımcı olabilir.
t-SNE sonuçları kümeleme gibi nicel analizler için kullanılabilir mi?
t-SNE ağırlıklı olarak bir görselleştirme aracıdır ve gerçek mesafeleri veya yoğunlukları korumadığı için nicel analiz veya kümeleme için ideal değildir. Kümeleme için K-means veya DBSCAN gibi teknikler orijinal yüksek boyutlu veriye uygulanmalıdır.
t-SNE grafiklerinin yorumlanabilirliğini artırmanın bir yolu var mı?
Yorumlanabilirliği artırmak için veri noktalarını bilinen kategorilerle etiketleyebilir, etkileşimli grafikler kullanabilir veya küme sınırları ya da merkezler gibi ek bilgileri bindirebilirsiniz.
t-SNE, performans ve sonuçlar açısından UMAP ile nasıl karşılaştırılır?
UMAP çoğu zaman t-SNE’den daha hızlıdır ve daha büyük veri kümeleriyle benzer veya daha iyi kalite gömmeler üretebilir. Ayrıca UMAP, t-SNE’ye kıyasla verinin daha fazla küresel yapısını koruma eğilimindedir.
t-SNE gerçek zamanlı bir veri görselleştirme hattına entegre edilebilir mi?
Hesaplama yoğunluğu nedeniyle t-SNE genellikle gerçek zamanlı görselleştirme için uygun değildir. Ancak veri kümesi boyutu yönetilebilir ve güncellemeler seyrekse, optimizasyon ve örnekleme ile mümkün olabilir.
t-SNE grafiğinde oluşan kümeler nasıl yorumlanmalıdır?
t-SNE grafiğinde kümeler, orijinal yüksek boyutlu uzayda yüksek benzerliğe sahip veri noktaları gruplarını gösterir. Ancak t-SNE grafiklerindeki tam mesafeler ve şekiller, orijinal uzaydakiyle aynı şekilde anlamlı olmadığından aşırı yorumlanmamalıdır.
t-SNE’nin özellikle faydalı olduğu belirli uygulamalar var mı?
t-SNE, yerel yapı ve ilişkilerin anlaşılmasının kritik olduğu gen ifadesi profilleri, görüntü verileri veya kelime gömmeleri gibi keşif amaçlı veri analizlerinde özellikle faydalıdır.

Sertifikalı bir veri bilimcisi olarak, yenilikçi makine öğrenimi uygulamaları oluşturmak için en son teknolojileri kullanmaya büyük ilgi duyuyorum. Konuşma tanıma, veri analizi ve raporlama, MLOps, konuşma yapay zekası ve NLP alanlarında güçlü bir geçmişe sahip olarak, gerçek bir etki yaratabilecek akıllı sistemler geliştirme becerilerimi geliştirdim. Teknik uzmanlığımın yanı sıra, karmaşık kavramları açık ve özlü bir dille ifade etme yeteneğine sahip, becerikli bir iletişimciyim. Sonuç olarak, veri bilimi konusunda aranan bir blog yazarı oldum ve giderek büyüyen veri profesyonelleri topluluğuyla görüşlerimi ve deneyimlerimi paylaşıyorum. Şu anda, içerik oluşturma ve düzenlemeye odaklanıyorum. Büyük dil modelleriyle çalışarak, hem işletmelerin hem de bireylerin verilerinden en iyi şekilde yararlanmalarına yardımcı olabilecek güçlü ve ilgi çekici içerikler geliştiriyorum.