나는 벡터를 저장하고 사용자가 사용자의 쿼리 벡터에 가장 유사한 n 개의 벡터를 찾을 수있는 시스템을 가지고 있습니다. 즉, 사용자가 벡터를 제출하면 (이 벡터를 쿼리 벡터라고 부름) 시스템이 "여기에 n 개의 가장 유사한 벡터가 있습니다."라고 말합니다. 나는 KD-Tree를 사용하여 유사한 벡터를 생성하고 모든 것이 잘 작동하지만 더 많이하고 싶다. 사용자가 완전한 벡터 (값이없는 벡터)를 제출하지 않아도 n 개의 가장 유사한 벡터의 목록을 제시하고자합니다. 즉, 사용자가 3 차원 벡터를 제출하면 여전히 저장 한 n 개의 가장 가까운 벡터 (저장된 벡터는 11 차원 임)를 찾고자합니다.KD- 나무와 누락 값 (벡터 비교)
나는 분명 솔루션의 몇 가지있다,하지만 난 둘 중 하나는 아주 좋은 것 잘 모르겠어요 :
각 사용자가 검색됩니다 차원의 가장 인기있는 하위 집합을 사용하여 구축 된 여러 KD-나무 만들기 . 즉, 사용자가 차원, x, y, z 차원의 쿼리 벡터를 제출하면 x, y, z 차원의 벡터 만 포함 된 이미 작성된 KD 트리에 해당 쿼리를 일치시킵니다.
사용자가 누락 값이있는 쿼리 벡터를 제출하고 쿼리 벡터를 점 제품과 같은 것을 사용하여 하나씩 (DB의 테이블에 저장된) 벡터와 비교할 때 KD- 트리를 무시합니다.
이것은 일반적인 문제 일 수 있습니다. 도와 주셔서 감사합니다.
숫자의 벡터에 대해 이야기하고 있습니다. 맞습니까? 실수, 자연수? 그리고 당신이 당신의 벡터 사이에 "유사성"을 정의하는 방법에 대해 더 자세히 알려주십시오. –
닥 브라운, 예, 실제 자연 숫자입니다. 특히, double 유형의 배열을 사용하는 Java 구현이 있습니다. 숫자는 인체의 치수입니다. 따라서 대퇴골의 뼈는 센티미터 단위로 측정되며 이것은 벡터의 값입니다. 경골은 센티미터 단위로 측정되며 벡터의 값입니다. 곧. 현재 유사성은 KD-Tree API (http://www.cs.wlu.edu/~levy/software/kd/)에서 만들어 지지만 설명 된 것처럼 수동으로 유사성을 추정하려면 접근법 2에서 점 제품을 사용했습니다 (합리적인가?). 감사. – labratmatt
비교할 값의 수에 따라 다릅니다. 그리고 당신은 "내 제품"을 의미하지 않습니다, 그렇죠? 당신은 "최소 제곱"과 같은 것을 생각하고 있습니까? –