2016-04-10 35 views
0

Verilerimi görselleştirmek için Boyut Azaltma (DR) tekniğini ve bunların birbirleriyle ne kadar ilişkili olduğunu görmek istiyorum. Barnes-hut tsne kullanmayı planlıyorum, ancak örnek uygulama user guide göre düzenli matris biçiminde verileri olduğundan, TSNE'ye nasıl girdi sağlayacağımı alamıyorum. 5000 farklı değerde yaklaşık 12 milyon kayıt var ve bunları ana belleğe kaydedemiyorum. Boyut küçültmeyi (DR) gerçekleştirmek istiyorum, böylece bu farklı değerleri 2 boyutlu dağılım grafiğinde görüntüledim. Bitişik liste formundaki verilerim var (çok seyrek olduğu için).Seyrek Matriste Boyut Azaltma (TSNE/PCA)

Let Kayıtları şu var ki:

2 3 10 
4 6 
7 
7 9 10 
2 
5 6 

Bunlar benim ilk 6 kayıt olması gerekiyordu. Ve bu durumda, sadece 10 ayrı değere sahibim. Ve yukarıdaki matris (tablo), 1. kaydın 1, 2, diğer sütunlar ise 0 (bitişik liste) olduğunu gösterir.

Bu farklı değerler, belgede (kayıtlarda) bulunan sözcüklere (etiketlere) eşlenir.

Bu tür verilerle hızlı TSNE'yi nasıl uygularım? Ya da bunu TSNE'nin gerektirdiği uyumlu formatta nasıl dönüştürebilirim? Hangi dili tercih etmeliyim?

Python veya Matlab kullanmayı tercih ediyorum ama başka bir şey de iyi. Önerilerinizi bana bildirin.

P.S. Görevi yapmak için çok yüksek bilgisayar makinem var.

cevap

1

Barnes-Hut t-SNE kodu bunu kutunun dışında desteklemez, ancak kodun bunu desteklemesi için kodda nispeten kolay bir değişiklik olmalıdır. https://github.com/lvdmaaten/bhtsne/blob/master/tsne.cpp#L123

Bu hat row_P, col_P ve val_P satır sıkıştırılmış eksik matris biçiminde bir NxN benzerlik matrisi ile doldurur: Özel olarak, aşağıdaki kod çizgi görünür. Bu row_P hem nnz elemanları (N satır sayısı ve nnz seyrek matrisin sıfır olmayan girişlerinin sayısı) sahiptir col_P ve val_P içine endeksleri içeren N+1 elemana sahiptir vardır. val_P'daki öğelerin negatif olmadığı varsayılır (örneğin, Gauss çekirdek değerleri).

Yapabileceğim en kolay şey, bu işlev çağrısını, kendi giriş verilerinize göre benzerlik matrisini hesaplayan yeni bir işleve yapılan çağrı ile değiştirmektir (seyrek formatın sizin için en uygun olanı üzerinde çalışır). Matlab'daki benzerlik matrisi hesaplamasını bile uygulayabilir ve daha sonra ortaya çıkan seyrek matrisi alan ve bu kodu row_P, col_P ve val_P'a kopyalayan bir miktar Mex kodu yazabilirsiniz. Bu kolay olmalıdır çünkü Matlab ayrıca satır sıkıştırılmış seyrek matris formatını kullanır; mxGetIr ve mxGetJc Mex işlevlerine bir göz atın.

Barnes-Hut t-SNE kodunun geri kalanı giriş benzerliklerinin nasıl hesaplandığını anlatabilmektedir, bu nedenle başka değişiklikler yapmanız gerekmemelidir.