2016-11-14 10 views
1

現在、私は計算された距離を持つ私の "距離"配列から最小の距離値を取ることによって私に最短/それからそれはそれがそれが属する患者を私に示すインデックスを追跡する別の検索を行います。K-最近接アルゴリズム(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'をソートし、最初の3つの要素を使うのはどうですか?たとえば、最初の4つの要素が同じ距離を持つ場合、結びつきを処理するコードがあります。 –

+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つの最小距離を受け取った場合、元のインデックス位置に戻す方法を教えてください。おそらく、並べ替えの後、配列はもはや同じ順序にはなりません。多くのありがとう – AnthonyJ

+0

2つの異なるが相関のある配列を持っているように聞こえます.1つは患者用で、もう1つは距離用です。距離と患者との関係を保持するクラスを作成する必要があります。あなたに関連する患者を与えるdistance属性の 'PateintDistance'配列を読み込み、並べ替えます。 –

+0

@AnthonyJ距離とインデックスを含み、 'Comparable'を実装する' class'を作るのが最善の方法です – ControlAltDel

関連する問題