나는 종이가 옳다고 생각한다. 첫째, 시험 : 시험에서 한 가지 문제는 너무 적은 점수를 사용하고있는 것일 수 있습니다. 나는 10000 포인트를 사용했고 내 결과는 (모든 차원에서 [0.0 ... 1.0]의 균등하게 분산 된 포인트입니다). DIM = 2의 경우, min/max는 거의 1000의 계수로 다르며 DIM = 1000의 경우에는 DIM = 10000의 계수가 1.248에 불과합니다. 그래서 나는이 결과가 종이의 가설을 확인했다고 말하고 싶습니다. 세 무작위로 생성 된 벡터, A, B 및 C의 총 거리가 이러한 벡터들의 각 행의 거리의 합에 기반을하자 :
DIM/N = 2/10000
min/avg/max= 1.0150906548224441E-5/0.019347838262624064/0.9993862941797146
DIM/N = 10/10000.0
min/avg/max= 0.011363500131326938/0.9806472676701363/1.628460468042207
DIM/N = 100/10000
min/avg/max= 0.7701271349716637/1.3380320375218808/2.1878136533925328
DIM/N = 1000/10000
min/avg/max= 2.581913326565635/3.2871335447262178/4.177669393187736
DIM/N = 10000/10000
min/avg/max= 8.704666143050158/9.70540814778645/10.85760200249862
DIM/N = 100000/1000 (N=1000!)
min/avg/max= 30.448610133282717/31.14936583713578/31.99082677476165
난 설명은 다음과 같다. 벡터의 치수가 커질수록 차이의 총합이 일반적인 평균에 가까워집니다. 즉, 벡터 C가 모든 요소에서 다른 벡터 B가 A보다 큰 거리를 가질 가능성은 거의 없습니다. 치수가 커지면 C와 B는 A와 (그리고 서로) 거리가 점점 멀어집니다.
내 테스트 데이터 세트는 다음과 같이 작성되었습니다. 데이터 세트는 본질적으로 0.0에서 1까지의 큐브입니다.모든 차원에서 0. 좌표는 0.0과 1.0 사이의 모든 차원에서 균일 한 분포로 작성되었습니다. 실시 예 번호 (N = 10,000, DIM = 2..10000]) : 허용 대답 here의 하단에 주어진 다음 식
public double[] generate(int N, int DIM) {
double[] data = new double[N*DIM];
for (int i = 0; i < N; i++) {
int pos = DIM*i;
for (int d = 0; d < DIM; d++) {
data[pos+d] = R.nextDouble();
}
}
return data;
}
우리 얻을 :
D = 2 -> 98,460
D = 10 -> 142.3
D = 100 -> 1.84
D = 1,000 -> 0.618
D = 10,000 -> 0.247
D = 10 -> 0.0506 (N = 1000 사용)
I는 통계 부 [참조] (또한,이 질문을
안녕하세요 [여기] (http://example.com)를 참조하십시오, 거리 자체가 커야하지만 상대 거리가 작아진다. – U66
링크가 작동하지 않는다고 생각합니다. 내 결과에 따르면 거리가 커지면 거리가 멀어지고 거리 차이가 줄어 듭니다. '친척'거리 란 무엇을 의미합니까? – TilmannZ
내 잘못이 사실 [링크] (http://stats.stackexchange.com/questions/253344/generating-a-high-dimensional-dataset-where-nearest-neighbor-becomes-meaningless)입니다. 선택한 대답과 설명을보십시오. – U66