2013-11-25 21 views
5

ho una matrice di distanza come menzionato nella domanda qui:Come usare Apache DBSCANClusterer

Clustering with a distance matrix

Ora, vorrei svolgere DBSCAN su questa matrice utilizzando la classe DBSCANclusterer.java da apache.

Il metodo 'cluster' prende come input, una raccolta di punti. Qual è il formato di questi punti?

In riferimento alla matrice precedente, cosa devo aggiungere al parametro di raccolta?

Qualcuno può incollare uno snippet di codice? Vorrei specificare la distanza come:

A, B: 20 ​​ A, C: 20 . . .

E quindi quando ho finito con il clustering, campioni simili dovrebbero essere raggruppati insieme.

+0

Allora cosa faccio? Inoltre, puoi indicarmi un programma che accetta la matrice sopra come input ed esegue il cluster DBSCAN/Gerarchiale? Ho provato a capire i diversi programmi. Sono passato attraverso cross convalidato e stackoverflow. Ma tutti indicano approcci. Voglio solo un programma a cui posso alimentare la matrice sopra e fare il clustering. – Nikhil

+0

Le domande per trovare i programmi sono fuori tema per StackOverflow. Questo è un sito * di programmazione *. –

+0

Quindi, google ancora di più (ci sono toolkit di clustering in grado di leggere matrici a distanza esterna), o semplicemente prova ad implementare DBSCAN da solo, NON è molto difficile ... –

risposta

6

Spero che questo aiuti.

public class App { 

public static void main(String[] args) throws FileNotFoundException, IOException { 
    File[] files = getFiles("./files2/"); 

    DBSCANClusterer dbscan = new DBSCANClusterer(.05, 50); 
    List<Cluster<DoublePoint>> cluster = dbscan.cluster(getGPS(files)); 

    for(Cluster<DoublePoint> c: cluster){ 
     System.out.println(c.getPoints().get(0)); 
    }      
} 

private static File[] getFiles(String args) { 
    return new File(args).listFiles(); 
} 

private static List<DoublePoint> getGPS(File[] files) throws FileNotFoundException, IOException { 

    List<DoublePoint> points = new ArrayList<DoublePoint>(); 
    for (File f : files) { 
     BufferedReader in = new BufferedReader(new FileReader(f)); 
     String line; 

     while ((line = in.readLine()) != null) { 
      try { 
       double[] d = new double[2]; 
       d[0] = Double.parseDouble(line.split(",")[1]); 
       d[1] = Double.parseDouble(line.split(",")[2]); 
       points.add(new DoublePoint(d)); 
      } catch (ArrayIndexOutOfBoundsException e) { 
      } catch(NumberFormatException e){ 
      } 
     } 
    } 
    return points; 
} 
} 

dati di esempio:

12-01-99 11:31:01 AM, -40.010, -70.020 
12-01-99 11:32:01 AM, -41.010, -71.020 
12-01-99 11:33:01 AM, -42.010, -72.020 
12-01-99 11:34:01 AM, -43.010, -73.020 
12-01-99 11:35:01 AM, -40.010, -74.020 

Con tutti i file in una cartella denominata JPEG2 con la posizione dichiarata nel metodo GetFiles.

+0

puoi dirmi il formato del file? Come dovrebbero apparire i dati nel file? – Nikhil

+0

Unixtimestamp, lat, lon –

Problemi correlati