2016-11-14 7 views
1

현재 계산 된 거리가있는 "거리"배열에서 가장 작은 거리 값을 취하여 가장 짧은/가장 가까운 이웃을 찾습니다. 그런 다음 색인을 추적하기 위해 다른 검색을 수행하여 색인이 어떤 환자인지를 나에게 알려줍니다.K-Nearest 알고리즘 (Java)에서 가장 짧은 'K'거리 얻기

그러나 가장 가까운 이웃을 3 명 찾고 싶다고 말하면 어떻게해야합니까? 이를 위해 코드를 완전히 변경해야합니까?

많은 감사

int min = 99; 
    int d = 1; 
    String diagnosis; 
     //Finding smallest value from an array containing distance to new 'patient' 
     for(d=1; d<= numberOFinstances; d++){ 
      if(distance[d] < min) 
      min = distance[d]; 
     } 

     for (int p = 1; p < numberOFinstances; p++) 
     { 
     if (distance[p] == min){ 
      System.out.println("Nearest patient to new patient is Patient "+p+ " with a distance of: " + min); 
      //Here I'm saying 6 because the diagnosis is in column 6 within the matrix 
      diagnosis = data[p][6]; 
      System.out.println("The new patient's diagnosis is: " + diagnosis); 
     } 
     } 
+0

어레이의 첫 번째 요소는 요소 ([] INT) [0]. 당신은 이것을 익숙해 져야합니다. – ControlAltDel

+0

'distance'를 정렬하고 처음 세 요소를 사용하는 것은 어떻습니까? 예를 들어 첫 번째 네 요소가 같은 거리 인 경우 코드를 처리 할 코드가있을 수 있습니다. –

+0

@ControlAltDel, 입력 해 주셔서 감사합니다. 내 CSV 파일에 행 0에 헤더가 있기 때문에 1부터 시작합니다. – AnthonyJ

답변

0

Arrays.sort에를 사용하는 것이 달성하는 가장 좋은 방법은

Arrays.sort(distance); 
int[] toReturn = new int[k]; 
for (int i = 0; i < k; i++) { 
    toReturn[i] = distance[i]; 
} 
+0

고맙습니다. 이해합니다. 3 개의 가장 작은 거리를받는다면 어떻게 원래의 인덱스 위치로 되돌릴 수 있습니까? 배열이 정렬 후에 더 이상 같은 순서로 있지 않다고 가정합니다. 많은 thanks – AnthonyJ

+0

두 개의 별개의 상관 관계가있는 배열을 가지고있는 것처럼 들리지만, 하나는 환자 용이고 하나는 거리 용입니다. 거리와 환자의 관계를 유지하는 클래스를 만들어야합니다. 관련 환자에게 줄 거리 속성에'PateintDistance' 배열을 채우고 정렬하십시오. –

+0

@AnthonyJ 가장 좋은 방법은 거리와 인덱스가 포함 된 '클래스'를 만들고 'Comparable'을 구현하는 것입니다. – ControlAltDel