Tetangga terdekat mencari data dimensi yang sangat tinggi

17

Saya memiliki matriks jarang pengguna dan item yang mereka sukai (dalam urutan pengguna 1M dan item 100K, dengan tingkat sparsitas yang sangat rendah). Saya mencari cara di mana saya bisa melakukan pencarian kNN di atasnya. Mengingat ukuran dataset saya dan beberapa tes awal yang saya lakukan, asumsi saya adalah bahwa metode yang akan saya gunakan harus paralel atau didistribusikan. Jadi saya sedang mempertimbangkan dua kelas solusi yang mungkin: satu yang tersedia (atau dapat diterapkan dengan cara yang cukup mudah) pada mesin multicore tunggal, yang lain pada cluster Spark, yaitu sebagai program MapReduce. Berikut adalah tiga ide luas yang saya pertimbangkan:

  • Dengan asumsi metrik kesamaan kemiripan, lakukan penggandaan penuh dari matriks yang dinormalisasi dengan transposnya (diimplementasikan sebagai jumlah dari produk luar)
  • Menggunakan hashing sensitif-lokalitas (LSH)
  • Mengurangi dulu dimensi masalah dengan PCA

Saya menghargai pemikiran atau saran tentang kemungkinan cara lain di mana saya bisa mengatasi masalah ini.

cjauvin
sumber
1
Saya baru saja menyelidiki area ini dan menulis posting blog tentang apa yang saya temukan. Saya menggunakan LSH, tapi saya pikir tingkat sparsity saya lebih tinggi daripada yang Anda cari. tttv-engineering.tumblr.com/post/109569205836/…
Philip Pearl

Jawaban:

15

Saya harap sumber daya berikut dapat memberi Anda ide tambahan untuk menyelesaikan masalah:

1) Makalah penelitian "Efisien K-Nearest Neighbor Bergabung Algoritma untuk Data Sparse Dimensi Tinggi" : http://arxiv.org/abs/1011.2807

2) Makalah proyek kelas "Sistem Rekomendasi Berdasarkan Penyaringan Kolaboratif" (Stanford University): http://cs229.stanford.edu/proj2008/Wen-RecommendationSystemBasedOnCollaborativeFiltering.pdf

3) Proyek untuk Kompetisi Hadiah Netflix ( berbasis k-NN ) : http://cs.carleton.edu/cs_comps/0910/netflixprize/final_results/knn/index.html

4) Makalah penelitian "Hubs in Space: Tetangga Terdekat Terdekat dalam Data Dimensi Tinggi" pada kutukan fenomena dimensi dan hubungannya dengan pembelajaran mesin , secara umum, dan algoritma k-NN , khususnya: http://jmlr.org /papers/volume11/radovanovic10a/radovanovic10a.pdf

5) Perangkat lunak untuk klasifikasi k-NN yang jarang (gratis, tetapi tampaknya bukan open source - dapat diperjelas dengan penulis): http://www.autonlab.org/autonweb/10408.html

6) Beberapa utas diskusi di StackOverflow :

7) Perhatikan GraphLab , kerangka paralel sumber terbuka untuk pembelajaran mesin ( http://select.cs.cmu.edu/code/graphlab ), yang mendukung pengelompokan paralel melalui MapReducemodel: http: //select.cs.cmu. edu / code / graphlab / clustering.html

Anda juga dapat memeriksa jawaban saya di sini di Data Science StackExchange pada regresi jarang untuk tautan ke Rpaket dan CRAN Task Viewhalaman yang relevan : /datascience//a/918/2452 .

Aleksandr Blekh
sumber
4

Jika Anda bekerja pada pemfilteran kolaboratif Anda harus mengajukan masalah sebagai pendekatan matriks peringkat rendah, di mana kedua pengguna adalah item yang dimasukkan bersama ke dalam ruang dimensi rendah yang sama. Pencarian kesamaan akan jauh lebih sederhana. Saya sarankan menggunakan LSH, seperti yang Anda sarankan. Jalan lain yang bermanfaat untuk pengurangan dimensi yang belum disebutkan adalah proyeksi acak .

Emre
sumber
1

Anda harus menggunakan: PySparNN , implementasi terbaru oleh Facebook dalam python yang sangat cepat. Ini juga mudah digunakan.

Syzygyyy
sumber