/ / Ako používať apache DBSCANClusterer - java, matica, klastrová analýza

Ako používať apache DBSCANClusterer - java, matrix, cluster-analysis

Mám dištančnú maticu, ako je uvedené v otázke tu:

Zhlukovanie pomocou dištančnej matice

Teraz by som chcel vykonať DBSCAN na tejto matici pomocou triedy DBSCANclusterer.java z apache.

Metóda „klaster“ berie ako vstup množinu bodov. Aký je formát týchto bodov?

Čo s ohľadom na vyššie uvedenú maticu, čo pridám do parametra zbierky?

Môže niekto vložiť útržok kódu? Chcel by som špecifikovať vzdialenosť ako:

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

A keď skončím so zhlukovaním, podobné vzorky by sa mali zhlukovať.

odpovede:

6 pre odpoveď č. 1

Dúfam, že to pomôže.

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

Ukážkové údaje:

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

So všetkými súbormi v priečinku s názvom files2 s umiestnením deklarovaným v metóde getFiles.