Tìm các cặp gần nhau trong không gian rất cao với các vectơ thưa thớt


9

Tôi có các vectơ đặc trưng (~ một triệu). Có (~ một triệu) tính năng nhị phân, nhưng trong mỗi vectơ chỉ có (~ một nghìn) trong số chúng là , phần còn lại là . Tôi đang tìm các cặp vectơ có ít nhất (~ một trăm) tính năng chung ( trong cả hai). Số lượng các cặp như vậy có độ lớn tương tự (~ một triệu).NMK10L1N

Tôi nghĩ rằng điều này có thể được tiếp cận khi tìm kiếm các cặp điểm gần trong một không gian rất cao. Hàm khoảng cách có thể sao cho dựa trên số điểm chung của hai vectơ. Nhưng nó có thể sẽ hữu ích với một thước đo khoảng cách thông thường hơn (như Euclide).

Những thuật toán nổi tiếng nào sẽ hữu ích cho việc tiếp cận vấn đề này? Bất cứ điều gì là bậc hai trong hoặc sẽ không thực tế.NM


Một ví dụ về công thức trong thế giới thực của vấn đề là xem xét người di chuyển giữa một số địa điểm. Nếu hai người ở cùng một địa điểm cùng một lúc, chúng tôi nói họ đã gặp nhau. (Số lượng kết hợp vị trí theo thời gian với ít nhất 1 người có mặt là ) Chúng tôi đang tìm kiếm bạn bè: những người đã gặp ít nhất lần.NML


1
Nếu vectơ 1, tính năng 1 là , và vectơ 2, tính năng 1 cũng là , liệu chúng có tính năng đó "chung" không? 000
gung - Phục hồi Monica

@ user777, tôi giả sử là không , trong trường hợp câu trả lời của bạn là hoàn hảo, nhưng sẽ rất tốt nếu điều này được OP tuyên bố rõ ràng.
gung - Phục hồi Monica

@gung, bạn giả sử đúng. Tôi đã chỉnh sửa câu hỏi để làm rõ. Cảm ơn!
Daniel Darabos

1
Khoảng bao nhiêu cặp vectơ có> 100 tính năng chung - mẫu ngẫu nhiên + lực lượng vũ phu? Các kích thước 1M x 1M là một vấn đề thực sự, hoặc tạo thành? Xem thêm cách tiếp cận trong tìm kiếm bit-string-láng giềng gần nhất trên stackoverflow.
chối

1
Một gợi ý có thể điên rồ: xem các vectơ đặc trưng dài 1 Mbit của bạn dưới dạng hình ảnh 1000 x 1000 pixel và tìm kiếm các phương thức để phân cụm hình ảnh, ví dụ stackoverflow.com/search?q=[image[+clustering . Afaik bạn phải tìm các tính năng tốt (không phải pixel đơn lẻ) để hoạt động, nhưng tôi không phải là chuyên gia.
chối

Câu trả lời:


6

Có vẻ như cách tiếp cận mà bạn đang tìm kiếm là sự kết hợp giữa chữ ký minhash và Băm nhạy cảm cục bộ (LSH); pdf (có sẵn miễn phí) của Bộ dữ liệu khai thác khổng lồ mô tả phương pháp này (và các biện pháp tương tự khác) một cách chi tiết trong Chương 3, nhưng ngắn gọn:

Một chữ ký minhash là một đại diện đặc của ma trận ban đầu của bạn cũng được xây dựng bằng cách áp dụng một số số n của hàm băm để tính năng, do đó làm giảm số tính năng mỗi quan sát. Điều này làm giảm kích thước dữ liệu của bạn, tuy nhiên bạn có thể sẽ nhận thấy rằng điều này vẫn khiến bạn gặp vấn đề .Ôi(N2)

Để giải quyết vấn đề này, MMDS khuyên rằng nếu tất cả những gì bạn muốn tìm là các cặp vượt quá ngưỡng tương tự nhất định (dường như sẽ áp dụng trong trường hợp của bạn), thì bạn chỉ có thể tập trung vào các cặp có khả năng giống nhau nhất - phương pháp này được gọi là Băm nhạy cảm cục bộ và trong phần 3,4, họ đi qua một ví dụ về cách kết hợp phương pháp chữ ký minhash với LSH.

Ngoài các văn bản, cũng có các bài giảng có sẵn về khóa học Coursera cùng tên.


7

Tôi đang tìm các cặp vectơ có ít nhất các đặc điểm chung của L

Đây chỉ là một sản phẩm bên trong của các vectơ đặc trưng nhị phân. Khi sản phẩm bên trong lớn hơn , cặp sẽ có ít nhất các yếu tố L chung. Đây phải là một tính toán tương đối nhanh - ít nhất, nhanh hơn khoảng cách euclide, sẽ gây lãng phí và chậm cho dữ liệu này. Vì bạn quy định rằng bạn đang tìm kiếm các cặp, điều này vốn có nghĩa là bạn phải thực hiện các phép tính để so sánh mọi vectơ.L-1L(N2)

Tìm các điểm gần nhau thực sự là một vấn đề nhóm. Nhưng bước đầu tiên của thuật toán phân cụm mà tôi quen thuộc là tính toán khoảng cách hoặc điểm tương đồng theo cặp. Tôi chắc rằng ai đó đã phát triển các lựa chọn thay thế hiệu quả hơn. Một điểm về thuật ngữ: có ít nhất hàng xóm chung được gọi là tương tự , không phải là một khoảng cách! Trong trường hợp này, các sản phẩm bên trong là sự tương đồng cosin không chuẩn hóa.L

Bạn có thể làm cho điều này trở nên dễ hiểu hơn bằng cách chỉ thực hiện tính toán sản phẩm bên trong khi tổng của vectơ đặc trưng (trong trường hợp này giống như định mức) cho một quan sát lớn hơn , vì không thể cho vectơ đặc trưng nhị phân đó để có một sản phẩm bên trong với một vector đặc trưng nhị phân mà sẽ làm hài lòng tiêu chí của tôi khi tổng này nhỏ hơn . Rõ ràng, tính toán các khoản tiền này chỉ là độ phức tạp , vì vậy tôi là một cách rẻ tiền để giảm độ lớn của bước sản phẩm bên trong.L O ( N )L-1LÔi(N)

Nhưng cách cổ điển để giảm phạm vi của vấn đề này là lọc thêm trước. Bạn có đặc biệt quan tâm khi một, tính năng không phổ biến có giá trị 1 không? Nếu vậy, chỉ thực hiện tính toán cho các vectơ đặc trưng đó.

Hoặc có lẽ bạn có thể hưởng lợi từ việc đóng khung lại vấn đề của bạn. Ví dụ, lấy mẫu được biết là có các thuộc tính đẹp; thống kê suy luận phát triển trên ý tưởng này đến một số chiều sâu. Vì vậy, có lẽ không thể phân tích toàn bộ tập dữ liệu, nhưng hoàn toàn khả thi khi kiểm tra một mẫu nhỏ. Tôi không biết câu hỏi nào bạn đang cố gắng trả lời, nhưng nếu bạn cẩn thận thiết kế thử nghiệm của mình, bạn có thể thoát khỏi việc chỉ nhìn vào vài nghìn quan sát, với hơn đủ dữ liệu cho mục đích xác nhận.

Sau một vài suy nghĩ thêm, tôi có một linh cảm mạnh mẽ rằng các dữ liệu bạn đang làm việc với một số loại đồ thị . Rất có lý khi bao gồm một số thành phần được kết nối, trong trường hợp đó bạn có thể phân tách thành một tập hợp các biểu đồ, với tác dụng phụ hạnh phúc là giảm tính chiều của dữ liệu. Ngay cả khi biểu đồ chỉ có hai thành phần được kết nối có cùng kích thước, điều đó có nghĩa là các phép so sánh cặp có khoảng tổng chi phí!G G O ( N 2 ) 1GGGÔi(N2)14

Nếu biểu đồ là đối xứng, các quan sát sau đây có thể hữu ích:

  1. Xác định Laplacian của đồ thị của bạn là , trong đó là ma trận đường chéo bậc (tổng của mỗi vectơ đặc trưng) và là ma trận kề (xếp các vectơ đặc trưng thành ma trận).D AP= =D-MộtDMột
  2. Giờ số xuất hiện như một eigenvalue của là số của các thành phần kết nối của . Phân tách biểu đồ thành các thành phần được kết nối và chỉ hoạt động với các thành phần đó sẽ có tác dụng phụ làm giảm kích thước dữ liệu của bạn; tính toán số lượng quan tâm của bạn sẽ dễ dàng hơn. Nhưng tính toán quá trình xuất tinh sẽ tốn kém cho một triệu đỉnh ...P G0PG
  3. (Sau một hoán vị đầy đủ) là một khối ma trận đường chéo của Laplacians của các thành phần kết nối của .GPG
  4. P là nửa cực dương. Điều này gần như chắc chắn hữu ích bằng cách nào đó.
  5. Các kết nối đại số của là giá trị của các eigenvalue thứ hai nhỏ nhất của . Điều này cho bạn biết được kết nối tốt như thế nào . Có lẽ điều đó sẽ trả lời một số câu hỏi mà bạn quan tâm đến: các vectơ có các tính năng chung. Lý thuyết đồ thị phổ phát triển ý tưởng này chi tiết hơn.P GGPG

"Đây có phải là vấn đề SNA không?" Tôi không chắc. Trong một ứng dụng, các tính năng mô tả hành vi và chúng tôi đang tìm cách kết nối mọi người với các hành vi tương tự. Điều đó làm cho vấn đề này SNA?

Nếu bạn có một biểu đồ lưỡng cực kết nối mọi người với các hành vi, bạn có thể nghĩ đây là một mạng lưới liên kết , với mọi người là các hàng và hành vi như các cột. Nếu bạn muốn kết nối mọi người với mọi người thông qua những hành vi mà họ có điểm chung, bạn có thể tính toán . là số hành vi mà mọi người có chung. Rõ ràng, tập hợp các đỉnh trong đó trả lời câu hỏi của bạn.B B T = A A i j A i jLBBBT= =MộtMộtTôijMộtTôijL


Cảm ơn câu trả lời tuyệt vời! Đó là rất nhiều điều tôi sẽ phải điều tra thêm. Mặc dù vậy, tôi không tin rằng việc so sánh cặp đôi là không thể tránh khỏi. Đây không phải là một vấn đề phân cụm trong đó tôi đang tìm kiếm các cụm có kích thước> 1? Tôi đã mong đợi một số phương pháp phân vùng không gian có thể cắt giảm đáng kể số lượng so sánh cặp.
Daniel Darabos

Xin lỗi, tôi không biết nhiều về khoa học dữ liệu. Nhưng đó không phải là một vấn đề nhóm khi chúng ta đang tìm cách nhóm các điểm nằm gần nhau? Tôi có một khoảng cách tối đa (L) và muốn tìm các nhóm (cặp) điểm nằm trong khoảng cách đó của nhau. Là kéo dài định nghĩa của cụm quá nhiều?
Daniel Darabos

1
Nó thực sự có thể được phrased như là một vấn đề đồ thị. Trong trường hợp đó, chúng ta có một biểu đồ lưỡng cực gồm N điểm và tính năng M và muốn tìm các cặp điểm có ít nhất L lân cận chung. Bây giờ tôi đặc biệt xem xét các cụm từ dựa trên vectơ, hy vọng rằng có một phương pháp phân cụm có thể được sử dụng cho tôi. K-SVD đã được đề xuất cho một vấn đề tương tự trong stats.stackexchange.com/questions/93366/ , vì vậy tôi đang đọc về điều đó vào lúc này. Cảm ơn!
Daniel Darabos

"Đây có phải là vấn đề SNA không?" Tôi không chắc. Trong một ứng dụng, các tính năng mô tả hành vi và chúng tôi đang tìm cách kết nối mọi người với các hành vi tương tự. Điều đó làm cho vấn đề này SNA? Cảm ơn đã giới thiệu cho tôi thuật ngữ, rất hữu ích để hướng dẫn tìm kiếm của tôi.
Daniel Darabos

Tôi đã sửa đổi câu trả lời của mình. Là mục tiêu cuối cùng của bạn chỉ là liệt kê những người có nhiều hành vi chung, hay đó là một cái gì đó khác?
Sycorax nói Phục hồi lại

2

Trên tìm kiếm gặp gỡ mọi người trong khối không gian-thời gian:
không gian chia thành khối (khối phố, vuông km, bất cứ điều gì), và thời gian vào N t i m đ khối. Có một cơ hội tốt mà nếu mọi người gặp nhau, họ sẽ gặp nhau trong cùng một khối. Vì vậy, chạy NN trong mỗi khối. Thời gian chạy và tỷ lệ lỗi tất nhiên sẽ phụ thuộc vào kích thước và hình dạng khối (cũng dựa trên những gì bạn có thể song song hóa / MapReduce), nhưng bạn có các tham số để chơi - kỹ thuật, không mở O ( N 2 ) .NspaceNtime
O(N2)

Xem thêm: dữ liệu
gần nhất-hàng xóm-tìm kiếm dữ liệu rất cao trên datascience.stackexchange

cặpwise :

sử dụng thư viện Python Gensim và heapq từ thư viện tiêu chuẩn để thực hiện so sánh cặp đôi nhanh và có thể mở rộng giữa một số lượng lớn tài liệu sử dụng khoảng cách TF-IDF và khoảng cách cosine.


1

xfemộtt1:vmộttôibạne1,femộtt101:vmộttôibạne101KKK

Đối với mỗi tính năng, xây dựng một từ điển giữ các chỉ mục chia sẻ tính năng này. Hy vọng, con số này sẽ không quá lớn (nếu bạn có một tính năng được chia sẻ bởi tất cả các chỉ mục, cách tiếp cận này bị hủy hoại, bạn có thể dừng đọc tại đây).

femộtt1:{1,101,202},femộtt2:{7,202},femộtt3:{202}...femộttM:{3,45,6}femộtt3Ôi(NK)

xxxPÔi(N2)

xyd(x,y)<x,y>xyÔi(K)

Ôi(NPK)Ôi(MN2)

Tôi đã áp dụng phương pháp này để triển khai KNN trên tập văn bản lớn (tàu: 2 000 000 dòng, kiểm tra 35 000 dòng, số tính năng: 10 000, số tính năng trung bình trên mỗi phần tử: 20), chạy trong khoảng một giờ .. .


Tôi hoàn toàn không hiểu cách tiếp cận này - điều này không phải vì tôi không tin bạn, hoàn toàn là do tôi không quen với các chiến lược khác nhau để thể hiện dữ liệu. Có lẽ bạn có thể giải thích nhiều hơn về những gì bạn trình bày trong hai đoạn đầu tiên?
Sycorax nói phục hồi Monica

O(N2)

1

kÔi(LNđăng nhập(N))

L. Erotz, M. Steinbach và V. Kumar. "Một thuật toán phân cụm lân cận gần nhất được chia sẻ mới và các ứng dụng của nó." Kỷ yếu của Hội thảo đầu tiên về Phân cụm dữ liệu có chiều cao và các ứng dụng của nó, 2002.


Cảm ơn, đó là một bài đọc thú vị. Làm thế nào bạn có được thời gian O (LN log (N))? Nghe có vẻ tuyệt vời. Nhưng mô tả thuật toán bắt đầu bằng "Xây dựng ma trận tương tự" và đó sẽ là ma trận NxN theo như tôi hiểu.
Daniel Darabos

@DanielDarabos Sự phức tạp được mô tả trong cuốn sách Khai thác đồ thị thực tế với R.
Sycorax nói Phục hồi lại

1

Ôi(kđăng nhậpn)k<<n

Cho rằng k của bạn là 100 và n của bạn là 1e6, điều này sẽ giúp bạn tăng tốc độ ~ 1e4x so với FFT cổ điển.

Nếu bạn cần thêm 20 lần tốc độ và bạn là người thích mạo hiểm, thì thay vì kết hợp tất cả các hàng với tên miền và tìm kiếm đỉnh, bạn có thể khởi động một tập hợp con của các hàng.

Bạn cũng có thể tiền lọc các cột bằng cách xóa các cột có tổng dưới 50 hoặc một số ngưỡng khác theo thứ tự một nửa số hàng bạn đang tìm để khớp. Ít nhất bạn nên loại bỏ các cột của tất cả các số không và tất cả 1 là không có thông tin. Tương tự với các hàng hoàn toàn trống hoặc đủ trống hoặc các hàng đầy đến mức không liên quan.

Việc cần làm: Tôi nên đặt một ví dụ ở đây bằng cách sử dụng dữ liệu tổng hợp và so sánh một số phương pháp.


0

Tôi chỉ đi qua một bài báo có liên quan trực tiếp.

Các thuật toán ngẫu nhiên và NLP: sử dụng hàm băm nhạy cảm cục bộ để phân cụm danh từ tốc độ cao (Ravichandran et al, 2005)

Nó thực sự được triển khai trong https://github.com/soundcloud/cosine-lsh-join-spark , nơi tôi tìm thấy nó.

Nó dựa trên băm nhạy cảm cục bộ (đã được đề cập trong các câu trả lời khác). Sau khi nó giảm các vectơ đặc trưng xuống một không gian chiều thấp, nó sử dụng phép nối khoảng cách Hamming nhanh để tìm các lân cận gần nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.