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