세트의 모든 점에 대해 k 번째로 가장 가까운 이웃까지의 거리 계산


9

기계 학습 응용 프로그램의 경우, 우리 그룹은 유클리드 거리를 계산해야합니다. k세트에서 가장 가까운 이웃 X 각각 x(XY)Rd (에 대한 d 5 내지 약 100, 및 |X||Y|수백에서 수백만까지). 우리는 현재 무차별 대입 중 하나를 사용하고 있습니다O(d|X||XY|) 접근 또는 kd 트리가있는 명백한 것 X언제 d 높고 |X|상대적으로 낮은 것은 이길 수 없습니다. (모든 것이 메모리에 있습니다.)

그러나 적어도 삼각형 부등식을 사용하거나 지역에 민감한 해시를 사용하는 무차별 대입보다 더 나은 방법이 있어야합니다. 합리적으로 가까운 근사치도 가능합니다.

내가 찾은 연구는 가장 가까운 단일 이웃 (또는 대략 가장 가까운 이웃)을 찾는 문제에 초점을 맞춘 것으로 보입니다. 찾고있는 문제가 다른 이름으로 진행됩니까, 아니면 생각하지 못한 관련 문제와 관련이 있습니까?


2
kd-trees는 삼각형 부등식을 이용합니다. 다른 공간 데이터 파티셔닝 트리를 사용해 보셨습니까? 특정 포인트가 구조를 갖는 경향이 있는지 여부를 살펴볼 수있는 또 다른 것은 (기계 학습 알고리즘에 대해서는 아무것도 모른다), 이는 초평면을 빠르게 찾고 일반적인 중간 평균 대신 kd와 같은 트리의 트리를 사용하는 데 도움이 될 수 있습니다. 높은 차원에서 성능이 좋지 않은 좌표 분할.
로스 스나이더

@RossSnider 제안에 감사드립니다. 그리고 KD 나무는 삼각형 부등식을 사용하지만 무차별 대입보다 더 빠른 것을 생각하고있었습니다. :) 다른 어떤 종류의 공간 데이터 파티셔닝 트리를 추천 하시겠습니까? Wikipedia의 목록 중 vp-tree 만 적용 가능한 것으로 보이며 유클리드 거리에 대해 kd-tree보다 나은 것처럼 보이지는 않습니다. 그리고 분리 초평면을 정의하는 더 나은 문제 별 방법이 있는지 생각할 것이지만 마음에 들지 않습니다.
Dougal

나는 우리가 우리가 이것을 알고 있다는 사실이 X(다른 점뿐만 아니라) 알고리즘에 도움이 될 것입니다. 그래도 확실하지 않습니다.
Dougal

뭐가 k일반적으로 응용 프로그램에서?
Suresh Venkat

1
@SureshVenkat 우리는 보통 k약 3, 때로는 조금 더 큽니다.
Dougal

답변:


10

다음은 유용한 유용한 트릭입니다. 확률 1 / k로 모든 점을 선택하는 무작위 표본을 고려하십시오. 좋은 확률로 k 개의 가장 가까운 이웃 중 하나가 표본에 있는지 확인하기 쉽습니다. 샘플에서 가장 가까운 이웃을 계산합니다. 이 O (k log n) 번 반복하십시오. 가능성이 높은 k는O(klogn)계산 된 포인트는 쿼리에서 가장 가까운 k 개의 이웃입니다. 따라서 가장 가까운 k를 찾는 것은O(klogn) 가장 가까운 이웃 쿼리.

요컨대, 가장 가까운 이웃 쿼리에 응답하는 빠른 데이터 구조를 제공하고 k- 최근 접 이웃의 빠른 데이터 구조를 제공하게되어 기쁩니다.


좋은 트릭. 다른 쿼리 포인트에 대해서도 샘플을 재사용해도 괜찮습니다. 그래서 계산k집합의 각 지점에 가장 가까운 이웃, 데이터 구조 만 작성하면됩니다. O(klogn)타임스.
Dougal

1
고정 된 샘플이 모든 쿼리에 대해 작동해야하므로 (양이 뒤집어 짐) 확률이 변경되므로 샘플을 재사용하기가 까다 롭습니다. 일반적인 아이디어는 더 큰 크기의 샘플 세트를 구성하고 (# 질문에 따라 다름) 문제가있는 경우이를 사용하는 것입니다.
Suresh Venkat

물론 @SureshVenkat 아. 저는 앉아서 실제 확률을 알아낼 것입니다. 모두 감사합니다!
Dougal

당신이 할 경우 O(klog(1/δ)) 샘플, 각 쿼리는 확률로 성공 1δ. 이 트릭은 처음 엿보는 것보다 약간 낫습니다.O(klogn) 각 크기의 샘플 O(n/k) (높은 확률로 k너무 크지 않습니다). 이는 각 샘플에 대해 더 나은 쿼리 시간을 의미합니다.
Sariel Har

3

"locality-sensitive hash"를 사용하는 저렴한 근사 솔루션은 각 포인트를 비트 인터리브 형식으로 변환하는 것입니다.

[xxx, yyy, zzz]-> xyzxyzxyz

전처리를위한 기수 정렬

문의 할 포인트를 고르세요 k 크기를 얻기 위해 양방향으로 포인트 2k세트; 그런 다음kth당신의 포인트에 가장 가깝습니다. Connor와 Kumar 의이 논문 도 참조하십시오 .

또한 칼라 한과 코 사라주의이 논문 을보십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.