/ / Cómo usar el DBSCANClusterer de Apache - java, matrix, cluster-analysis

Cómo utilizar el DBSCANClusterer de apache: java, matriz, análisis de clúster

Tengo una matriz de distancia como se menciona en la pregunta aquí:

Agrupación con una matriz de distancia.

Ahora, me gustaría realizar DBSCAN en esta matriz utilizando la clase DBSCANclusterer.java de apache.

El método "cluster" toma como entrada, una colección de puntos. ¿Cuál es el formato de estos puntos?

Refiriéndose a la matriz anterior, ¿qué agrego al parámetro de colección?

¿Puede alguien pegar un fragmento de código? Me gustaría especificar la distancia como:

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

Y luego, cuando termine con el agrupamiento, se deben agrupar muestras similares.

Respuestas

6 para la respuesta № 1

Espero que esto ayude.

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

Data de muestra:

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 todos los archivos en una carpeta llamada files2 con la ubicación declarada en el método getFiles.