2016-11-14 59 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

數組的第一元素是元素[0]。你應該習慣使用這個。 – ControlAltDel

+0

如何排序'distance'並使用前三個元素?如果例如前四個元素具有相同的距離,也許有些代碼可以處理關係。 –

+0

@ControlAltDel,感謝您的輸入。我從1開始,因爲我的CSV文件在第0行有標題。 – AnthonyJ

回答

0

來完成是使用Arrays.sort最佳方式(INT [])

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

謝謝,我明白這一點。如果我確實收到了3個最小距離,那麼我如何將它們追溯到原始索引位置?假定排序後數組不再以相同的順序排列。非常感謝 – AnthonyJ

+0

聽起來好像你有兩個截然不同但相關的陣列 - 一個用於病人,另一個用於距離。你需要創建一個類來保持距離和病人之間的關係。在距離屬性上填充並排序該'PateintDistance'數組,這將爲您提供相關患者。 –

+0

@AnthonyJ最好的方法是讓你創建一個包含距離和索引的'class',並實現'Comparable' – ControlAltDel