I vicini più vicini cercano dati di dimensioni molto elevate


17

Ho una grande matrice sparsa di utenti e oggetti che gli piacciono (nell'ordine di 1 milione di utenti e 100.000 articoli, con un livello molto basso di scarsità). Sto esplorando i modi in cui potrei eseguire la ricerca kNN su di esso. Date le dimensioni del mio set di dati e alcuni test iniziali che ho eseguito, la mia ipotesi è che il metodo che userò dovrà essere parallelo o distribuito. Quindi sto prendendo in considerazione due classi di possibili soluzioni: una disponibile (o implementabile in modo ragionevolmente semplice) su una singola macchina multicore, l'altra su un cluster Spark, ovvero come programma MapReduce. Ecco tre idee generali che ho considerato:

  • Supponendo una metrica di somiglianza del coseno, eseguire la moltiplicazione completa della matrice normalizzata per la sua trasposizione (implementata come somma di prodotti esterni)
  • Utilizzo dell'hashing sensibile alla località (LSH)
  • Ridurre innanzitutto la dimensionalità del problema con un PCA

Gradirei qualsiasi pensiero o consiglio su possibili altri modi in cui potrei affrontare questo problema.


1
Ho appena indagato su quest'area e ho scritto un post sul blog su ciò che ho trovato. Ho usato un LSH, ma penso che il mio livello di scarsità fosse superiore a quello che stai cercando. tttv-engineering.tumblr.com/post/109569205836/…
Philip Pearl

Risposte:


15

Spero che le seguenti risorse possano darti ulteriori idee per risolvere il problema:

1) Documento di ricerca "Il vicino K più vicino efficiente unisce gli algoritmi per dati sparsi ad alta dimensione" : http://arxiv.org/abs/1011.2807

2) Documento del progetto di classe "Sistema di raccomandazioni basato sul filtro collaborativo" (Stanford University): http://cs229.stanford.edu/proj2008/Wen-RecommendationSystemBasedOnCollaborativeFiltering.pdf

3) Progetto per il concorso a premi Netflix ( basato su k-NN ) : http://cs.carleton.edu/cs_comps/0910/netflixprize/final_results/knn/index.html

4) Documento di ricerca "Hub nello spazio: i vicini più vicini popolari nei dati ad alta dimensione" sulla maledizione del fenomeno della dimensionalità e la sua relazione con l'apprendimento automatico , in generale, e l' algoritmo k-NN , in particolare: http://jmlr.org /papers/volume11/radovanovic10a/radovanovic10a.pdf

5) Software per la classificazione sparsa di k-NN (gratuito, ma sembra non essere open source - potrebbe chiarire con gli autori): http://www.autonlab.org/autonweb/10408.html

6) Diversi thread di discussione su StackOverflow :

7) Prestare attenzione a GraphLab , un framework parallelo open source per l'apprendimento automatico ( http://select.cs.cmu.edu/code/graphlab ), che supporta il clustering parallelo tramite il MapReducemodello: http: //select.cs.cmu. edu / code / graphlab / clustering.html

Puoi anche controllare la mia risposta qui su Data Science StackExchange sulla regressione sparsa per collegamenti a Rpacchetti e CRAN Task Viewpagine pertinenti : /datascience//a/918/2452 .


4

Se stai lavorando al filtro collaborativo, dovresti porre il problema come un'approssimazione di matrice di basso rango, in cui entrambi gli utenti sono elementi incorporati nello stesso spazio di bassa dimensionalità. La ricerca della somiglianza sarà quindi molto più semplice. Raccomando di usare LSH, come hai suggerito. Un'altra strada fruttuosa per la riduzione della dimensionalità non ancora menzionata è la proiezione casuale .


1

Dovresti usare: PySparNN , una recente implementazione di Facebook in Python che è velocissimo. È anche facile da usare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.