Seyrek vektörlerle çok yüksek boyutlu uzayda yakın çiftleri bulun


9

Ben (~ milyon) özellik vektörlerini. Orada (~ bir milyon) ikili özellikler, ancak her vektör sadece olacağını onlardan (~ bin) , geri kalanı . Ortak en az (~ yüz) özellikleri ( her ikisi de ) olan vektör çiftleri arıyorum . Bu çiftlerin sayısı, (~ bir milyon) benzer büyüklüktedir .NMK10L1N

Bence bu, çok yüksek boyutlu bir alanda yakın nokta çiftleri aramak olarak düşünülebilir. Mesafe işlevi, iki vektörün ortak özelliklerine dayanacak şekilde olabilir. Ancak muhtemelen daha geleneksel bir mesafe metriği (Öklid gibi) için de yararlı olacaktır.

Bu soruna yaklaşmak için hangi iyi bilinen algoritmalar yararlı olabilir? veya karesel olan hiçbir şey pratik olmayacaktır.NM


Problemin gerçek dünyadaki formülasyonuna örnek olarak kişiyi bir dizi yer arasında hareket ettirmektir. İki kişi aynı anda aynı yerde olsaydı, birbirleriyle tanıştıklarını söyleriz. (En az 1 kişinin bulunduğu yer-zaman kombinasyonlarının sayısı .) Arkadaş arıyoruz: En az kez karşılaşan insanlar .NML


1
Vektör 1, özellik 1 ve vektör 2, özellik 1 de , bu özellik "ortak" mıdır? 00
gung - Monica'yı eski

@ user777, hayır varsayıyorum , bu durumda cevabınız mükemmel, ama bunun OP tarafından açıkça belirtilmesi iyi olurdu.
gung - Monica'yı eski

@gung, doğru olduğunu varsayıyorsun. Soruyu açıklığa kavuşturmak için düzenledim. Teşekkürler!
Daniel Darabos

1
Kaç tane vektör çiftinin ortak> 100 özelliğe sahip olduğu - rastgele örnek + kaba kuvvet? 1M x 1M boyutları gerçek bir problem midir yoksa uydurulmuş mudur? Ayrıca stackoverflow üzerinde bit-string-en yakın-komşu arama yaklaşımına bakın .
denis

1
Muhtemelen çılgın bir öneri: 1 Mbit uzun özellikli vektörlerinizi 1000 x 1000 piksel görüntü olarak görüntüleyin ve görüntü kümeleme yöntemlerine bakın, örneğin stackoverflow.com/search?q=[image Cialis+clustering . Afaik çalışmak için iyi özellikler (tek piksel değil) bulmak zorunda, ama ben uzman değilim.
denis

Yanıtlar:


6

Aradığınız yaklaşım, minhash imzaları ve Lokasyon Duyarlı Karma (LSH) birleşimidir; Massing Massive Veri Kümeleri'nin (serbestçe kullanılabilir) pdf'si bu yaklaşımı (ve diğer benzerlik önlemlerini) Bölüm 3'te biraz ayrıntılı olarak açıklamaktadır, ancak kısaca:

Bir minhash imza bir sayı uygulayarak oluşturulur orijinal matris yoğunlaştırılmış bir temsilidir n böylece gözlem başına özellikleri sayısını azaltarak özelliklere karma fonksiyonları. Bu, verilerinizin boyutunu azaltır, ancak bunun sizi hala birO(N2) sorun.

Bunu ele almak için MMDS, bulmak istediğiniz her şeyin belirli bir benzerlik eşiğinin üzerindeki çiftler olması durumunda (sizin durumunuzda geçerli görünen), o zaman sadece benzer olması muhtemel olan çiftlere odaklanabileceğinizi önerir - bu yaklaşım Lokasyon Duyarlı Hashing olarak adlandırılır ve bölüm 3.4'te minhash imza yaklaşımının LSH ile nasıl birleştirileceğine dair bir örnek üzerinde dururlar.

Metne ek olarak , aynı adı taşıyan Coursera kursunda dersler de verilmektedir .


7

En az sayıda vektör çiftini arıyorum L ortak özellikler.

Bu sadece ikili özellik vektörlerinin bir iç ürünüdür. İç çarpım daha büyük olduğundaL1, parite en azından Lortak unsurlar. Bu nispeten hızlı bir hesaplama olmalıdır - en azından, bu veriler için savurgan ve yavaş olacak olan öklid mesafesinden daha hızlı. Çiftleri aradığınızı şart koştuğunuz için, bu, her vektörü karşılaştırmak için doğası gereği hesaplamaları yapmanız gerektiği anlamına gelir .(N2)

Birbirine yakın olan noktaları bulmak aslında bir kümelenme sorunudur. Ancak, tanıdığım kümeleme algoritmalarının ilk adımı çift mesafeleri veya benzerlikleri hesaplamaktır. Eminim birisi daha verimli alternatifler geliştirmiştir. Terminoloji hakkında bir nokta: en az ortak komşusuna sahip olmak , bir uzaklık olarak değil, benzerlik olarak ifade edilir ! İç ürünler, bu durumda, normal olmayan kosinüs benzerlikleridir.L

Bunu, bir gözlem için özellik vektörünün toplamı (bu durumda norm ile aynıdır) büyük olduğunda iç ürün hesaplamasını gerçekleştirerek daha izlenebilir hale getirebilirsiniz , çünkü bu ikili özellik vektörü için imkansızdır. bu toplam den küçük olduğunda ölçütümü karşılayacak başka bir ikili özellik vektörü olan bir iç ürüne sahip olmak . Açıkçası, bu toplamları hesaplamak sadece karmaşıklığıdır, bu yüzden iç ürün adımının büyüklüğünü azaltmanın ucuz bir yoludur.L1LO(N)

Ancak bu sorunun kapsamını azaltmanın klasik yolu, ek ön filtreleme yapmaktır. Özellikle bir, nadir görülen bir özellik 1 değerini aldığında ilgileniyor musunuz? Öyleyse, yalnızca bu özellik vektörleri için hesaplama yapın.

Ya da belki probleminizi yeniden çerçevelemekten faydalanabilirsiniz. Örneğin, örneklemenin güzel özelliklere sahip olduğu bilinmektedir; çıkarımsal istatistikler bu fikir üzerinde oldukça derinlere doğru gelişir. Bu nedenle, belki de tüm veri kümesini analiz etmek mümkün değildir, ancak küçük bir örneği incelemek tamamen mümkündür. Hangi soruyu cevaplamaya çalıştığınızı bilmiyorum, ancak denemenizi dikkatli bir şekilde tasarlarsanız, doğrulama amacıyla yeterli veri kaldığında yalnızca birkaç bin gözlemden kaçınabilirsiniz.

Bazı ek düşüncelerden sonra, üzerinde çalıştığınız verilerin bir tür grafiği olduğuna dair güçlü bir önsezim var . birkaç bağlı bileşenden oluşması çok mantıklıdır, bu durumda bir grafik kümesine ayırabilirsiniz , verilerin yanlığını azaltmanın mutlu yan etkisi ile. Grafik kabaca aynı boyutta sadece iki bağlı bileşen olsa bile, bu çift ​​karşılaştırmaları kabaca toplam maliyete sahip demektir!GGGO(N2)14

Grafik simetrik ise, aşağıdaki gözlemler yardımcı olabilir:

  1. Grafiğinizin Laplacian'ı olarak tanımlayın; burada , diyagonal bir derece matrisidir (her özellik vektörünün toplamı) ve , bitişiklik matrisidir (özellik vektörlerinin bir matrise yığınlanması).P=DADA
  2. sayısı , bir öz değeri olarak bağlı bileşenlerinin sayısı olarak görünür . Grafiğin bağlı bileşenlerine ayrıştırılması ve yalnızca bu bileşenlerle çalışılması verilerinizin boyutunu azaltmanın yan etkisine sahip olacaktır; ilgi miktarınızı hesaplamak daha kolay olacaktır. Ancak özdüzenlemeyi hesaplamak bir milyon köşe için pahalı olacaktır ...0PG
  3. (Tam bir permütasyondan sonra) , bağlı bileşenlerinin Laplacians'ın blok çapraz matrisidir .PG
  4. P , pozitif semidefinittir. Bu neredeyse kesinlikle bir şekilde faydalıdır.
  5. cebirsel bağlantısı , ikinci en küçük öz değerinin değeridir . Bu, ne kadar iyi bağlandığını gösterir . Belki de ilgilendiğiniz bazı soruları cevaplayacaktır: ortak özelliklere sahip vektörler. Spektral grafik teorisi bu fikri biraz daha ayrıntılı olarak geliştirir.GPG

"Bu bir SNA sorunu mu?" Emin değilim. Bir uygulamada özellikler davranışı tanımlar ve benzer davranışlara sahip insanları birbirine bağlamak istiyoruz. Bu bir SNA sorunu yapar mı?

İnsanları davranışlara bağlayan iki taraflı bir grafiğiniz varsa, bunu bir bağlantı ağı , insanları satır ve davranışları sütun olarak düşünebilirsiniz . İnsanları ortak davranışları ile insanlara bağlamak istiyorsanız, hesaplayabilirsiniz . insanların ortak davranışlarıdır. Açıkçası, sorunuzu cevapladığı köşe noktaları kümesi .BBBT=AAijAijL


Mükemmel cevap için teşekkürler! Daha fazla araştırmam gereken bir çok şey var. Yine de ikili karşılaştırmaların kaçınılmaz olduğuna ikna olmadım. Bu,> 1 büyüklüğündeki kümeleri aradığım bir kümelenme sorunu değil mi? Bazı uzaysal bölümleme yaklaşımının, ikili karşılaştırmaların sayısını büyük ölçüde azaltacağını umuyordum.
Daniel Darabos

Üzgünüm, veri bilimi hakkında fazla bir şey bilmiyorum. Ama birbirine yakın olan noktaları bir araya getirmek istediğimizde bir kümelenme sorunu değil mi? Maksimum bir mesafem (L) var ve birbirimizin o mesafesi içindeki nokta gruplarını (çiftleri) bulmak istiyorum. Kümeleme tanımını çok mu uzatıyor?
Daniel Darabos

1
Gerçekten bir grafik problemi olarak ifade edilebilir. Bu durumda N noktalarının ve M özelliklerinin iki taraflı grafiğine sahibiz ve en az L ortak komşusu olan nokta çiftlerini bulmak istiyoruz. Özellikle şimdi bana yararlı olabilecek bir kümeleme yöntemi olduğunu umarak, şimdi vektör tabanlı cümle özelliğine bakıyorum. K-SVD, stats.stackexchange.com/questions/93366/… ' da benzer bir soruna önerildi , bu yüzden şu anda bunu okuyorum. Teşekkürler!
Daniel Darabos

"Bu bir SNA sorunu mu?" Emin değilim. Bir uygulamada özellikler davranışı tanımlar ve benzer davranışlara sahip insanları birbirine bağlamak istiyoruz. Bu bir SNA sorunu yapar mı? Beni terminolojiyle tanıştırdığın için teşekkürler, aramamı yönlendirmek çok yardımcı oluyor.
Daniel Darabos

Cevabımı gözden geçirdim. Nihai hedefiniz sadece ortak davranışları olan insanları sıralamak mı yoksa başka bir şey mi?
Sycorax, Reinstate Monica

2

Uzay-zaman bloklarında buluşan insanları ararken:
alanı bloklarına (şehir blokları, km kare, ne olursa olsun) ve zamanı bloklarına . İnsanlar buluşursa, aynı blokta buluşmaları için iyi bir şans var. Yani her blokta NN çalıştırın. Çalışma zamanları ve hata oranları elbette blok boyutlarına ve şekillerine (aynı zamanda neyi paralelleştirebileceğiniz / MapReduce'a da bağlı olabilir) bağlıdır, ancak oynamak için parametreleriniz vardır - geniş açık değil - mühendislik .NspaceNtime
O(N2)

Ayrıca bakınız:
veri biliminde çok yüksek boyutlu verileri aramak için en yakın komşular.

pairwise.py :

TF-IDF ve kosinüs mesafesini kullanan çok sayıda belge arasında çok hızlı ve ölçeklenebilir ikili karşılaştırmalar yapmak için standart kitaplıktaki Python Gensim kütüphanesini ve heapq'i kullanır.


1

Ters sözlük! noktasını , sıfır olmayan değerlere karşılık gelen anahtarlar (yani true değerine sahip özellikler) olarak . Bir elemanın ortalama depolama boyutu olacaktır . Gerçekten, sadece özellikleri saklamak için dizeleri ve değerleri tutmak için yüzen gerekir.xfeat1:value1,feat101:value101KKK

Her özellik için, bu özelliği paylaşan dizinleri tutan bir sözlük oluşturun. Umarım, bu sayı çok büyük olmaz (tüm dizinler tarafından paylaşılan bir özelliğiniz varsa, bu yaklaşım harap olur, burada okumayı durdurabilirsiniz).

Bu sözlük şuna benzer: . Hız kazanmak ve yerden tasarruf etmek istersem, yakın çiftler üretmeyecekleri için sadece bir elemanla (burada: ) bulunan özellikleri bile düşürebilirim . Bu sözlük işlemlerinde oluşturulmuştur.feat1:{1,101,202},feat2:{7,202},feat3:{202}...featM:{3,45,6}feat3O(NK)

Eğer bir eleman mesafesini değerlendirmek istediğinizde Şimdi, başkalarına ile en az bir özelliği paylaşan endeksler listesi (sözlükle) üretmek . Diğer tüm öğelerin uzak olduğunu biliyorsunuz (bir özelliği paylaşmıyorlar bile!). Ortalama "özellik başına öğe" sayısı düşükse ( ), artık olmanıza gerek yoktur .xxxPO(N2)

Şimdi, eğer başka bir büyük gelişme olduğunu ve için, hem de sözlüklerde olarak temsil edilir veya anahtarları üzerine yineleme değerlendirilebilir ve , içerisinde işlemleri.xyd(x,y)<x,y>xyO(K)

Son karmaşıklığınız, saf başlangıç ​​yaklaşımı yerine .O(NPK)O(MN2)

Büyük metin kümesi (tren: 2000 000 satır, test 35 000 satır, özellik sayısı: 10 000, eleman başına ortalama özellik sayısı: 20) üzerine bir saat süren bir KNN uygulamak için bu yöntemi uyguladım. .


Bu yaklaşımı tam olarak anlamıyorum - bunun sebebi sizi inkar etmem değil, tamamen veriyi temsil etmek için farklı stratejilere aşina olmamamdan kaynaklanıyor. Belki de ilk iki paragrafta neleri kapsadığınız hakkında daha fazla bilgi verebilir misiniz?
Sycorax, Reinstate Monica'ya

1) "bu sayı çok büyük olmayacak": ortalama sütun toplamı = ortalama satır toplamı = 1000. 2) yüzer? OP'nin özellikleri ikili 3) 3 koşu için çalışma zamanları N, 2N, 4N ilginç olurdu, kabaca olup olmadıklarını gösterecektiO(N2).
denis

1

Yararlı bulabileceğiniz bir referans buldum ve şimdiye kadar sunulan diğer tüm çözümlerden asimptotik olarak daha verimli olduğuna inanıyorum. Doğru anlarsam,k-En yakın komşu (KNN) grafiği O(LNlog(N)) saati.

L. Erotz, M. Steinbach ve V. Kumar. "Yeni bir paylaşılan en yakın komşu kümeleme algoritması ve uygulamaları." Yüksek Boyutlu Verilerin Kümelenmesi Çalıştayı ve Uygulamaları, 2002.


Teşekkürler, ilginç bir okuma. O (LN günlüğü (N)) zamanını nasıl aldınız? Kulağa harika geliyor. Ancak algoritma açıklaması "Benzerlik matrisini oluştur" ile başlar ve anladığım kadarıyla bu bir NxN matrisi olacaktır.
Daniel Darabos

@DanielDarabos Karmaşıklık R ile Pratik Grafik Madenciliği
Sycorax, Reinstate Monica

1

Çılgın ama işe yaraması muhtemel bir yaklaşım frekans alanına gitmek olabilir. Önem verdiğiniz mod sayısını (100 özellik sayınız) belirlediğiniz ve daha sonra kıvrımlarda çalıştığınız ve bir eşik değerden daha büyük bir satır için arama yaptığınız " seyrek FFT " adlı çılgın / hasta hızlı bir fft var numaralarınızın üst kayıtlarındaki bitler). OlacakO(klogn) nerede k<<n.

K değerinizin 100 ve n'nizin 1e6 olduğu göz önüne alındığında, bu klasik FFT ile karşılaştırıldığında size ~ 1e4x hız kazandırmalıdır.

Başka bir 20x hıza ihtiyacınız varsa ve bir risk alıcıysanız, tüm satırları alan adına katıştırmak ve zirveyi aramak yerine, bir satır alt kümesini önyükleyebilirsiniz.

Toplamları 50'nin altında olan sütunları veya eşleştirmek istediğiniz satır sayısının yarısı kadar olan başka bir eşiği kaldırarak da sütunları önceden filtreleyebilirsiniz. En azından bilgilendirici olmayan tüm sıfırların ve 1'lerin sütunlarını kaldırmalısınız. Tamamen boş veya yeterince boş olan satırlarla veya alakasız olacak kadar dolu satırlarla aynı.

Yapılacaklar: Buraya sentetik verileri kullanarak bir örnek koymalı ve bazı yöntemleri karşılaştırmalıyım.


0

Az önce doğrudan alakalı bir makaleyle karşılaştım.

Rasgeleleştirilmiş algoritmalar ve NLP: yüksek hızlı ad kümeleme için yere duyarlı karma işlevini kullanma (Ravichandran et al, 2005)

Aslında bulduğum yer olan https://github.com/soundcloud/cosine-lsh-join-spark içinde uygulanmaktadır .

Bölgeye duyarlı karma işlemine dayanır (diğer yanıtlarda zaten belirtilmiştir). Özellik vektörlerini düşük boyutlu bir alana indirdikten sonra en yakın komşuları bulmak için hızlı bir Hamming mesafe birleşimi kullanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.