2013-11-25 4 views
5

Ich habe eine Distanzmatrix wie erwähnt in der Frage verwenden:Wie hier Apache DBSCANClusterer

Clustering with a distance matrix

Nun würde ich DBSCAN auf dieser Matrix, die die DBSCANclusterer.java Klasse von Apache ausführen möchte verwenden.

Die Methode 'Cluster' verwendet als Eingabe eine Sammlung von Punkten. Wie ist das Format dieser Punkte?

Mit Bezug auf die obige Matrix, was füge ich dem Sammelparameter hinzu?

Kann jemand bitte ein Code-Snippet einfügen? Ich möchte den Abstand angeben als:

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

Und dann, wenn ich mit dem Clustering fertig bin, sollten ähnliche Proben zusammen gruppiert werden.

+0

Was mache ich dann? Können Sie mich auch auf ein Programm verweisen, das die obige Matrix als Eingabe verwendet und DBSCAN/Hierarchial Clustering durchführt? Ich habe versucht, die verschiedenen Programme zu verstehen. Ich ging durch Kreuz validiert und Stackoverflow. Aber alle weisen auf Ansätze hin. Ich möchte nur ein Programm, dem ich die obige Matrix zuführen und Clustering durchführen kann. – Nikhil

+0

Fragen zum Finden von Programmen sind für StackOverflow off-topic. Dies ist eine * Programmierung * -Website. –

+0

Also entweder googeln Sie mehr (es gibt Clustering Toolkits, die externe Distanzmatrizen lesen können), oder Sie versuchen einfach DBSCAN selbst zu implementieren, es ist nicht sehr schwer ... –

Antwort

6

Hoffe, das hilft.

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; 
} 
} 

Beispieldaten:

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 

mit allen Dateien in einem Ordner mit dem Ort erklärte im GetFiles Methode namens files2.

+0

können Sie mir das Format der Datei sagen? Wie sollen die Daten in der Datei aussehen? – Nikhil

+0

Unixtimestamp, lat, lon –