수백만 개의 데이터 포인트에 대해 가장 가까운 인접 계산 반복


14

3D로 수백만 개의 데이터 포인트로 실행되는 데이터 세트가 있습니다. 내가하고있는 계산을 위해서는 반경의 각 데이터 점에 대한 이웃 (범위 검색)을 계산하고 함수를 맞추고 적합에 대한 오류를 계산하고 다음 데이터 점에 대해 이것을 반복해야합니다. 내 코드는 제대로 작동하지만 데이터 포인트 당 약 1 초가 걸리는 데 시간이 오래 걸립니다! 각 포인트마다 전체 데이터 세트를 검색해야하기 때문일 수 있습니다. 프로세스를 빠르게 만들 수있는 방법이 있습니까? 어떻게 든 첫 이웃 사이에 인접 관계를 설정할 수 있다면 이것이 느려질 수 있다는 생각이 있습니다. 도움이된다면 최적의 Parzen 창 너비를 3D로 찾으려고합니다.

답변:


9

볼륨 계층 구조 (특히 BSP 트리)에 대한 인터넷 검색을 제안합니다. 포인트 클라우드가 주어지면 두 개의 동일한 서브 클라우드로 분할 된 평면을 찾을 수 있습니다. 그런 다음 테스트 지점의 반경 R 내에있는 포인트 모음을 찾아야 할 경우 먼저 테스트 지점을 해당 평면과 비교할 수 있습니다. 높이가 R 이상인 경우 평면 아래의 전체 하위 구름 또한 R보다 멀리 떨어져 있어야합니다 (따라서 그 점을 확인할 필요가 없습니다). 이 아이디어를 재귀 적으로 적용하여 궁극적으로 n 제곱 대신 n log n 유형의 복잡성을 산출 할 수 있습니다. (이것은 BSP / 이진 공간 분할입니다.


7

위치 및 근접성에 관한 정보를 보존하는 데이터를 저장하기위한 몇 가지 데이터 구조가있다; 가장 가까운 가장 가까운 이웃 (들) 결정을 허용함으로써.

특히 R-trees (및 R * -trees 와 같은 특수 형식 ) 및 X-trees 입니다. 약간 다른 용도에 최적화 된 다양한 선택.

순진한 가장 가까운 이웃 조회가 아닌 R *-트리를 선택하는 것은 특정 코드에서 10000 배의 속도를내는 데 큰 도움이되었습니다. (OK, 그 아마 몇 백은 R은 순진 룩업이 심하게 캐시를 박살 너무 코딩 된했기 때문에 나머지 대부분이었다 * - 트리이었다. :: 한숨 :: )

이러한 구조에는 일반적인 ( N 저장 포인트 수) 삽입 성능 및 저장 요구 사항과 O ( log N ) 조회 성능이 있으므로 많은 조회를 수행 할 경우 (예 : DBSCAN에서와 같이 각 포인트); 그러나 그들 중 일부는 최악의 성능을 가지고 있습니다.영형(엔로그⁡엔)엔영형(로그⁡엔)


5

이것은 분자 결합 역학 분야에서 가장 큰 과제 중 하나 인 비 결합 입자 사이의 모든 쌍별 상호 작용을 계산하는 것과 매우 유사합니다.

여기에서 셀 목록 (또는 이웃 목록 )을 사용하여 근처에있는 것을 파악할 수 있습니다. 이 응용 프로그램의 경우 셀 목록이 사용하기 쉬운 알고리즘 일 것입니다.

  • 상자를 일련의 셀로 나눕니다.
  • 각 입자에 대해 어느 셀에 할당해야하는지 결정하십시오 (입자 당 O (1)).
  • 그런 다음 각 입자에 대해 "자체"셀과 인접 셀을 확인하십시오. 이들 중 하나라도 사용되면 추가 검색이 필요하지 않습니다.
  • 가장 가까운 이웃이 모두 비어 있으면 파티클이 발견 될 때까지 다음 인접 이웃 등으로 확장합니다.

시스템의 입자 분포가 다소 균일 한 경우 그리드의 거칠기에 따라 알고리즘 비용이 크게 줄어 듭니다. 그러나 약간의 미세 조정이 필요합니다. 그리드가 너무 거칠면 많은 시간을 절약 할 수 없습니다. 빈 격자 셀을 순환하는 데 많은 시간을 소비하게됩니다!


셀 가장자리 길이는 최소한 검색 반경이어야하거나 각 입자에 고유 한 검색 반경이 있으면 최대 반경이어야합니다.
— Pedro

MD 사례에서도 마찬가지입니다. 여기서 우리는 그 반지름이 선험적으로 무엇인지 모른다 .
— aeismail

대규모 입자 구름 중력 시뮬레이션에서 비슷한 방식이 오랫동안 사용되었습니다. 그것이 여전히 최신 기술의 일부인지 모르겠습니다.
— dmckee --- 전 moderator 고양이

4

점 세트에 대해 선택하는 방법 인 KD 트리 및 옥트리 를 반드시 확인해야 합니다 (BSP는 일반 객체 용이고 그리드는 다소 균일 한 밀도 용입니다). 메모리와 계산 모두에서 오버 헤드를 최소화하면서 매우 작고 빠를 수 있으며 구현이 간단합니다.

격자 모양의 비 계층 적 공간 세분을 시도하려는 경우 점이 다소 균일하게 분포되어있는 경우 (빈 영역이 있더라도 밀도 특이성 또는 다른 고농도가 없어야 함) 구 패킹을 확인하십시오.


3

들로네 삼각 분할 (3D 아날로그) 구축을 고려해야합니다 . 2D에서는 항상 가장 가까운 이웃을 포함하는 데이터 포인트의 특수 삼각 측량입니다. 3D에서도 마찬가지이지만 4 면체도 마찬가지입니다.

한 번에 모든 삼각 분할을 만든 다음 삼각 분할에서 가장 가까운 이웃을 직접 검색 할 수 있습니다. 삼각 측량을 구축하는 좋은 알고리즘이 있다고 생각합니다 .2D에서 삼각 측량의 구성은엔로그⁡(엔) 가장 가까운 이웃에 대한 이후의 검색은 데이터 포인트 수에서 선형입니다.

그것이 도움이되기를 바랍니다!

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