Makine Öğreniminde Gömmeler: Karmaşık Verileri Basitleştirme

Yayınlanan: 2022-03-11

Sayısal olmayan verilerle çalışmak, deneyimli veri bilimcileri için bile zor olabilir. Tipik bir makine öğrenimi modeli, özelliklerinin kelimeler, e-postalar, web sitesi sayfaları, listeler, grafikler veya olasılık dağılımları değil sayılar olmasını bekler. Yararlı olması için, verilerin önce bir vektör uzayına dönüştürülmesi gerekir. Ama nasıl?

Popüler bir yaklaşım, sayısal olmayan bir özelliği kategorik olarak ele almak olacaktır. Bu, kategorilerin sayısı azsa (örneğin, veriler bir mesleği veya bir ülkeyi gösteriyorsa) işe yarayabilir. Ancak, bu yöntemi e-postalara uygulamaya çalışırsak, muhtemelen örnek sayısı kadar kategori elde edeceğiz. Hiçbir iki e-posta tam olarak aynı değildir, bu nedenle bu yaklaşım hiçbir işe yaramaz.

Başka bir yaklaşım, herhangi iki örneğin ne kadar yakın olduğunu bize söyleyen bir fonksiyon olan veri örnekleri arasında bir mesafe tanımlamak olacaktır. Veya iki yakın örnek arasındaki mesafenin küçük, benzerlik büyük olması dışında bize aynı bilgiyi verecek bir benzerlik ölçüsü tanımlayabiliriz. Tüm veri örnekleri arasındaki hesaplama mesafesi (benzerlik) bize bir mesafe (veya benzerlik) matrisi verir. Bu, kullanabileceğimiz sayısal verilerdir.

Bununla birlikte, bu veri, örnekler kadar çok boyuta sahip olacaktır; bu, onu bir özellik olarak kullanmak (boyutluluğun lanetine bakın) veya görselleştirmek istiyorsak (bir çizim 6D'yi bile işleyebilirken, ben henüz 100D arsa görmek için). Boyutların sayısını makul bir miktara indirebilir miyiz?

Cevap Evet! Bunun için yerleştirmelerimiz var.

Gömme Nedir ve Neden Kullanılır?

Gömme, yüksek boyutlu verilerin düşük boyutlu bir temsilidir. Tipik olarak, bir yerleştirme, orijinal verilerde bulunan tüm bilgileri yakalamaz. Ancak iyi bir yerleştirme, eldeki sorunu çözmeye yetecek kadar yakalayacaktır.

Belirli bir veri yapısı için uyarlanmış birçok gömme vardır. Örneğin, metin verileri için word2vec'i veya şekil görüntü verileri için Fourier tanımlayıcılarını duymuş olabilirsiniz. Bunun yerine, bir mesafe veya benzerlik ölçüsü tanımlayabileceğimiz herhangi bir veriye yerleştirmelerin nasıl uygulanacağını tartışacağız. Bir uzaklık matrisi hesaplayabildiğimiz sürece, verilerin doğası tamamen önemsizdir. E-postalar, listeler, ağaçlar veya web sayfaları gibi aynı şekilde çalışacaktır.

Bu makalede, size farklı gömme türlerini tanıtacağız ve bazı popüler gömmelerin nasıl çalıştığını ve karmaşık verileri içeren gerçek dünya sorunlarını çözmek için gömmeleri nasıl kullanabileceğimizi tartışacağız. Ayrıca bu yöntemin artılarını ve eksilerini ve bazı alternatifleri inceleyeceğiz. Evet, bazı problemler başka yollarla daha iyi çözülebilir ancak ne yazık ki makine öğrenmesinde gümüş kurşun yoktur.

Başlayalım.

Yerleştirmeler Nasıl Çalışır?

Tüm yerleştirmeler, verilerdeki "temel" bilgileri korurken verilerin boyutluluğunu azaltmaya çalışır, ancak her yerleştirme bunu kendi yolunda yapar. Burada, bir mesafe veya benzerlik matrisine uygulanabilecek birkaç popüler yerleştirmeyi inceleyeceğiz.

Oradaki tüm yerleştirmeleri örtmeye çalışmayacağız bile. Bunu yapabilen en az bir düzine tanınmış gömme ve daha az bilinen pek çok gömme ve varyasyonları vardır. Her birinin kendi yaklaşımı, avantajları ve dezavantajları vardır.

Orada başka hangi yerleştirmelerin olduğunu görmek isterseniz, buradan başlayabilirsiniz:

  • Scikit-learn Kullanım Kılavuzu
  • İstatistiksel Öğrenmenin Unsurları (İkinci Baskı), Bölüm 14

Mesafe Matrisi

Uzaklık matrislerine kısaca değinelim. Veriler için uygun bir mesafe bulmak, problemin iyi anlaşılmasını, biraz matematik bilgisi ve bazen de tamamen şans gerektirir. Bu makalede açıklanan yaklaşımda, projenizin genel başarısına veya başarısızlığına katkıda bulunan en önemli faktör bu olabilir.

Ayrıca birkaç teknik ayrıntıyı da göz önünde bulundurmalısınız. Çoğu yerleştirme algoritması, $\textbf{D}$ uzaklık (veya farklılık ) matrisinin köşegeninde sıfır olduğunu ve simetrik olduğunu varsayacaktır. Simetrik değilse, bunun yerine $(\textbf{D} + \textbf{D}^T) / 2$ kullanabiliriz. Çekirdek hilesini kullanan algoritmalar ayrıca bir mesafenin bir metrik olduğunu varsayar, bu da üçgen eşitsizliğinin geçerli olduğu anlamına gelir:

\[\tüm a, b, c \;\; d(a,c) \leq d(a,b) + d(b,c)\]

Ayrıca, bir algoritma bunun yerine bir benzerlik matrisi gerektiriyorsa, bir mesafe matrisini benzerlik matrisine dönüştürmek için herhangi bir monoton azalan işlevi uygulayabiliriz: örneğin, $\exp -x$.

Temel Bileşen Analizi (PCA)

Temel Bileşen Analizi veya PCA, muhtemelen bugüne kadar en yaygın kullanılan gömmedir. Fikir basit: Yakalanan varyansı en üst düzeye çıkaran veya (eşdeğer olarak) ikinci dereceden yeniden yapılandırma hatasını en aza indiren özelliklerin doğrusal bir dönüşümünü bulun .

Özellikle, özelliklerin $\textbf{X} \in \mathbb{R}^{n \times p}$'ın $n$ özelliği ve $p$ boyutu olan bir örnek matris olmasına izin verin. Basitlik için, veri örneği ortalamasının sıfır olduğunu varsayalım. $\textbf{X}$'ı bir ortonormal matris $\textbf{V}_q \in \mathbb{R}^{p \times q}$ ile çarparak boyutların sayısını $p$'dan $q$'a düşürebiliriz :

\[\hat{\textbf{X}} = \textbf{X} \textbf{V}_q\]

Ardından, yeni özellikler kümesi $\hat{\textbf{X}} \in \mathbb{R}^{n \times q}$ olacaktır. Yeni özellikleri orijinal alana geri eşlemek için (bu işleme yeniden yapılandırma denir), onu tekrar $\textbf{V}_q^T$ ile çarpmamız yeterlidir.

Şimdi, yeniden yapılandırma hatasını en aza indiren $\textbf{V}_q$ matrisini bulacağız:

\[\min_{\textbf{V}_q} ||\textbf{X}\textbf{V}_q\textbf{V}_q^T - \textbf{X}||^2\]

$\textbf{V}_q$ matrisinin sütunları ana bileşen yönleri olarak adlandırılır ve $\hat{\textbf{X}}$ sütunlarının ana bileşenleri olarak adlandırılır. Sayısal olarak, $\textbf{X}$ öğesine SVD ayrıştırma uygulayarak $\textbf{V}_q$'ı bulabiliriz, ancak bunu yapmanın eşit derecede geçerli başka yolları da vardır.

PCA doğrudan sayısal özelliklere uygulanabilir. Veya özelliklerimiz sayısal değilse, onu bir uzaklık veya benzerlik matrisine uygulayabiliriz.

Python kullanıyorsanız, PCA scikit-learn'de uygulanır.

Bu yöntemin avantajı , hesaplanmasının hızlı olması ve verilerdeki gürültüye karşı oldukça sağlam olmasıdır.

Dezavantajı , yalnızca doğrusal yapıları yakalayabilmesidir, bu nedenle orijinal verilerde bulunan doğrusal olmayan bilgilerin kaybolması muhtemeldir.

Çekirdek PCA'sı

Çekirdek PCA, PCA'nın doğrusal olmayan bir sürümüdür. Buradaki fikir, Support Vector Machines SVM'ye aşina iseniz muhtemelen duymuş olduğunuz çekirdek hilesini kullanmaktır.

Spesifik olarak, PCA'yı hesaplamanın birkaç farklı yolu vardır. Bunlardan biri, $\textbf{X} \textbf{X}^T \in \mathbb{R}^{n \times n}$ gram matrisinin çift merkezli versiyonunun özkompozisyonunu hesaplamaktır. Şimdi, verilerimiz için bir $\textbf{K} \in \mathbb{R}^{n \times n}$ çekirdek matrisi hesaplarsak, Çekirdek PCA temel bileşenleri bulmak için bunu bir gram matrisi olarak ele alacaktır.

$x_i$, $i \in {1,..,n}$ özellik örnekleri olsun. Çekirdek matrisi bir çekirdek işlevi $K(x_i,x_j)=\langle \phi(x_i),\phi(x_j) \rangle$ tarafından tanımlanır.

Popüler bir seçim radyal bir çekirdektir:

\[K(x_i,x_j)=\exp -\gamma \cdot d(x_i,x_j)\]

burada $d$ bir mesafe fonksiyonudur.

Çekirdek PCA bir mesafe belirtmemizi istedi. Örneğin, sayısal özellikler için Öklid mesafesini kullanabiliriz: $d(x_i,x_j)=\vert\vert x_i-x_j \vert \vert ^2$.

Sayısal olmayan özellikler için yaratıcı olmamız gerekebilir. Hatırlanması gereken bir şey, bu algoritmanın mesafemizi bir metrik olarak varsaymasıdır.

Python kullanıyorsanız, Kernel PCA scikit-learn'de uygulanır.

Kernel PCA yönteminin avantajı , doğrusal olmayan veri yapılarını yakalayabilmesidir.

Dezavantajı ise verilerdeki gürültüye duyarlı olması ve uzaklık ve çekirdek fonksiyonlarının seçiminin sonuçları büyük ölçüde etkilemesidir.

Çok Boyutlu Ölçekleme (MDS)

Çok boyutlu ölçekleme (MDS), küresel olarak örnekler arasındaki mesafeleri korumaya çalışır. Fikir oldukça sezgiseldir ve uzaklık matrisleriyle iyi çalışır.

Spesifik olarak, $x_i$, $i \in {1,..,n}$ ve bir mesafe fonksiyonu $d$ verilen özellik örnekleri, $z_i \in \mathbb{R}^{q}$, $i \in {1,..,n}$ bir stres fonksiyonunu en aza indirerek :

\[\min_{z_1,..,z_n} \sum_{1 \leq i < j \leq n} (d(x_i, x_j) - ||z_i - z_j||)^2\]

Python kullanıyorsanız, MDS scikit-learn'de uygulanır. Bununla birlikte, scikit-learn, bir regresyon veya sınıflandırma modeliyle bağlantılı bir gömme kullanmak istiyorsak uygun olmayan, örnek dışı noktaların dönüşümünü desteklemez. Ancak prensipte mümkündür.

MDS'nin avantajı , fikrinin çerçevemize mükemmel şekilde uyması ve verilerdeki gürültüden fazla etkilenmemesidir.

Dezavantajı , scikit-learn'deki uygulamasının oldukça yavaş olması ve örnek dışı dönüşümü desteklememesidir.

Kullanım Örneği: Gönderi Takibi

Küçük bir tropik adadaki birkaç yerleşim yeri, yerel turizm endüstrisine hitap etmek için paket nakliye hizmetleri geliştirmiştir. Bu yerleşim yerlerinden birindeki bir tüccar, rekabette üstünlük sağlamak için harekete geçmeye karar verdi ve adadaki tüm paket gönderilerini takip eden bir uydu gözetim sistemi kurdu. Veriler toplandıktan sonra, tüccar şu soruyu yanıtlamasına yardımcı olması için bir veri bilimcisi (biziz!) çağırdı: Şu anda yolda olan bir paketin hedefini tahmin edebilir miyiz?

Veri seti, takip edilen 200 gönderi hakkında bilgi içerir. Takip edilen her gönderi için, paketin tespit edildiği tüm konumların (x,y) koordinatlarının bir listesi vardır; bu, tipik olarak 20 ila 50 gözlem arasında bir yerdedir. Aşağıdaki grafik, bu verilerin nasıl göründüğünü gösterir.

Kullanım Örneği: Gönderi Takibi

Bu veriler sorun gibi görünüyor - aslında iki farklı sorun çeşidi.

İlk sorun, uğraştığımız verilerin yüksek boyutlu olmasıdır. Örneğin, her paket 50 konumda tespit edilmiş olsaydı, verilerimizin 100 boyutu olurdu - sizin emrinizde olan 200 örneğe kıyasla kulağa çok fazla gibi geliyor.

İkinci sorun: Farklı sevkiyat rotalarının aslında farklı sayıda gözlemi vardır, bu nedenle verileri tablo biçiminde temsil etmek için listeleri koordinatlarla istifleyemeyiz (ve olsaydı bile, bu hala gerçekten mantıklı olmazdı).

Tüccar sabırsızca parmaklarıyla masanın üzerinde davul çalıyor ve veri bilimcisi herhangi bir panik belirtisi göstermemek için elinden geleni yapıyor.

Uzaklık matrislerinin ve yerleştirmelerin kullanışlı olacağı yer burasıdır. Sadece iki sevkiyat yolunu karşılaştırmanın bir yolunu bulmamız gerekiyor. Frechet mesafesi makul bir seçim gibi görünüyor. Bir mesafe ile bir mesafe matrisi hesaplayabiliriz.

Not: Bu adım biraz zaman alabilir. Her bir mesafenin $O(k^2)$ yinelemeli olduğu $O(n^2)$ mesafelerini hesaplamamız gerekir; burada $n$ örnek sayısı ve $k$ bir örnekteki gözlem sayısıdır. Bir mesafe fonksiyonunu verimli bir şekilde yazmak anahtardır. Örneğin, Python'da bu hesaplamayı birçok kat hızlandırmak için Numbayı kullanabilirsiniz.

Gömmeleri Görselleştirme

Şimdi, boyutların sayısını 200'den birkaça indirmek için bir gömme kullanabiliriz. Sadece birkaç ticaret yolu olduğunu açıkça görebiliyoruz, bu nedenle verilerin iki veya üç boyutta bile iyi bir temsilini bulmayı umabiliriz. Daha önce tartıştığımız yerleştirmeleri kullanacağız: PCA, Kernel PCA ve MDS.

Aşağıdaki grafiklerde, etiketlenmiş rota verilerini (göstermek amacıyla verilmiştir) ve 2B ve 3B (soldan sağa) bir gömme ile temsilini görebilirsiniz. Etiketli veriler, altı ticaret yolu ile birbirine bağlanan dört ticaret noktasını işaret ediyor. Altı ticaret yolundan ikisi çift yönlü olup, toplamda sekiz sevkiyat grubu (6+2) oluşturmaktadır. Gördüğünüz gibi, 3D yerleştirmelerle sekiz gönderi grubunun tamamında oldukça net bir ayrım elde ettik.

Gömmeleri Görselleştirme

Bu iyi bir başlangıç.

Model İşlem Hattındaki Gömmeler

Şimdi, bir yerleştirmeyi eğitmeye hazırız. MDS en iyi sonuçları gösterse de, oldukça yavaştır; ayrıca, scikit-learn'in uygulaması örnek dışı dönüşümü desteklemez. Bu araştırma için bir sorun değil ama üretim için olabilir, bu yüzden onun yerine Kernel PCA'yı kullanacağız. Kernel PCA için uzaklık matrisine önceden bir radyal çekirdek uygulamayı unutmamalıyız.

Çıktı boyutlarının sayısını nasıl seçersiniz? Analiz, 3D'nin bile iyi çalıştığını gösterdi. Sadece güvenli tarafta olmak ve önemli bilgileri atlamamak için, gömme çıktısını 10D olarak ayarlayalım. En iyi performans için, çıktı boyutlarının sayısı bir model hiper parametresi olarak ayarlanabilir ve ardından çapraz doğrulama ile ayarlanabilir.

Böylece, hemen hemen her sınıflandırma modeli için girdi olarak kullanabileceğimiz 10 sayısal özelliğe sahip olacağız. Bir doğrusal ve bir doğrusal olmayan modele ne dersiniz: diyelim, Lojistik Regresyon ve Gradyan Artırma? Karşılaştırma için, giriş olarak tam mesafe matrisi olan bu iki modeli de kullanalım. Üstüne üstlük, SVM'yi de test edelim (SVM, doğrudan bir mesafe matrisi ile çalışmak üzere tasarlanmıştır, bu nedenle gömme gerekmez).

Test setindeki model doğruluğu aşağıda gösterilmiştir (10 tren ve test veri seti, modelin varyansını tahmin edebilmemiz için oluşturulmuştur):

  • Bir gömme (KernelPCA+GB) ile eşleştirilmiş Gradient Boosting ilk sırayı alır. Gömme olmadan (GB) Gradient Boost'tan daha iyi performans gösterdi. Burada, Kernel PCA yararlı olduğunu kanıtladı.
  • Lojistik Regresyon başarılı oldu. İlginç olan, gömme olmadan (LR) Lojistik Regresyon'un gömmeden (KernelPCA+LR) daha iyi sonuç vermesidir. Bu tamamen beklenmedik bir durum değil. Doğrusal modeller çok esnek değildir, ancak görece fazla takılması zordur. Burada, bir gömmenin neden olduğu bilgi kaybı, daha küçük girdi boyutsallığının yararına ağır basıyor gibi görünüyor.
  • Son olarak, bu modelin varyansı oldukça önemli olmasına rağmen, SVM de iyi performans gösterdi.

Model Doğruluğu

Model doğruluğu

Bu kullanım durumu için Python kodu GitHub'da mevcuttur.

Çözüm

Gömmelerin ne olduğunu açıkladık ve gerçek dünya problemlerini çözmek için uzaklık matrisleriyle birlikte nasıl kullanılabileceğini gösterdik. Karar zamanı:

Yerleştirmeler, bir veri bilimcisinin kullanması gereken bir şey midir? Hikayenin her iki tarafına da bir göz atalım.

Gömmeleri Kullanmanın Artıları ve Eksileri

Artıları:

  • Bu yaklaşım, belirli bir düzeyde bilgi, hayal gücü ve şansla genellikle yapabildiğiniz bir mesafeyi tanımlayabildiğiniz sürece olağandışı veya karmaşık veri yapılarıyla çalışmamıza olanak tanır.
  • Çıktı, kolayca analiz edebileceğiniz, kümeleyebileceğiniz veya hemen hemen her makine öğrenimi modeli için model özellikleri olarak kullanabileceğiniz düşük boyutlu sayısal verilerdir.

Eksileri:

  • Bu yaklaşımı kullanarak, mutlaka bazı bilgileri kaybedeceğiz:

    • İlk adımda, orijinal verileri benzerlik matrisi ile değiştirdiğimizde
    • İkinci adımda, bir gömme kullanarak boyutluluğu azalttığımızda
  • Verilere ve mesafe fonksiyonuna bağlı olarak, bir mesafe matrisinin hesaplanması zaman alıcı olabilir. Bu, verimli bir şekilde yazılmış bir mesafe fonksiyonu ile hafifletilebilir.
  • Bazı yerleştirmeler verilerdeki gürültüye karşı çok hassastır. Bu, ek veri temizliği ile hafifletilebilir.
  • Bazı yerleştirmeler, hiper parametrelerinin seçimine duyarlıdır. Bu, dikkatli analiz veya hiper parametre ayarlaması ile hafifletilebilir.

Alternatifler: Neden Kullanmıyorsunuz…?

  • Neden bir mesafe matrisi yerine doğrudan veri üzerinde bir gömme kullanmıyorsunuz?
    Verilerinizi doğrudan verimli bir şekilde kodlayabilen bir gömme biliyorsanız, onu kullanın. Sorun şu ki, her zaman mevcut değil.
  • Neden sadece bir mesafe matrisinde kümeleme kullanmıyorsunuz?
    Tek amacınız veri kümenizi bölümlere ayırmaksa, bunu yapmanız tamamen sorun olmaz. Bazı kümeleme yöntemleri, yerleştirmelerden de yararlanır (örneğin, Spektral Kümeleme). Daha fazla bilgi edinmek isterseniz, burada kümeleme hakkında bir öğretici bulunmaktadır.
  • Neden özellikler olarak sadece bir mesafe matrisi kullanmıyorsunuz?
    Bir uzaklık matrisinin boyutu $(n_{samples}, n_{samples})$'dır. Tüm modeller bununla verimli bir şekilde başa çıkamaz - bazıları fazla sığabilir, bazıları sığdırmak için yavaş olabilir, bazıları tamamen uymayabilir. Doğrusal ve/veya düzenli modeller gibi düşük varyanslı modeller burada iyi bir seçim olacaktır.
  • Neden sadece bir mesafe matrisi ile SVM kullanmıyorsunuz?
    SVM, kullanım durumumuzda iyi performans gösteren harika bir modeldir. Ancak, bazı uyarılar var. İlk olarak, başka özellikler eklemek istersek (sadece basit sayısal sayılar olabilir), bunu doğrudan yapamayız. Bunları benzerlik matrisimize dahil etmemiz ve potansiyel olarak bazı değerli bilgileri kaybetmemiz gerekir. İkincisi, SVM ne kadar iyi olursa olsun, başka bir model sizin sorununuz için daha iyi çalışabilir.
  • Neden sadece derin öğrenmeyi kullanmıyorsunuz?
    Doğru, herhangi bir sorun için yeterince uzun ararsanız uygun bir sinir ağı bulabilirsiniz. Yine de, bu sinir ağını bulma, eğitme, doğrulama ve dağıtma sürecinin mutlaka basit olmayacağını unutmayın. Bu nedenle, her zaman olduğu gibi, en iyi kararınızı kullanın.

tek cümlede

Mesafe matrisleriyle bağlantılı gömmeler, karmaşık sayısal olmayan verilerle çalışıyorsanız, özellikle verilerinizi doğrudan bir vektör uzayına dönüştüremediğinizde ve modeliniz için düşük boyutlu bir girdiye sahip olmayı tercih ettiğinizde inanılmaz derecede yararlı bir araçtır.