2017-10-03 5 views
1

Ich habe eine CSV-Datei mit mehreren Spalten, wobei die Spalten "lat, lon, item1" sind. Ich in der Lage gewesen, die Daten mit dem folgenden Code zu laden:ELKI DBSCAN Ignorieren von Spalten

ListParameterization params = new ListParameterization(); 
List<ObjectFilter> filterlist = new ArrayList<>(); 
filterlist.add(new FixedDBIDsFilter(1)); 
NumberVectorLabelParser<DoubleVector> parser = new NumberVectorLabelParser<>(DoubleVector.FACTORY);   
FileBasedDatabaseConnection dbc = new FileBasedDatabaseConnection(filterlist, parser, is);  
params.addParameter(AbstractDatabase.Parameterizer.DATABASE_CONNECTION_ID, dbc); 
Database db = ClassGenericsUtil.parameterizeOrAbort(StaticArrayDatabase.class, params); 
db.initialize(); 

Ich habe auch eine DBSCAN laufen und die Anzahl der abgerufenen Cluster und ich kann die Daten aus den Clustern ziehen.

ListParameterization params1 = new ListParameterization(); 
params1.addParameter(DBSCAN.Parameterizer.EPSILON_ID, 0.05); 
params1.addParameter(DBSCAN.Parameterizer.MINPTS_ID, 2); 
DBSCAN<DoubleVector> dbscan = ClassGenericsUtil.parameterizeOrAbort(DBSCAN.class, params1); 
Clustering<Model> result = dbscan.run(db); 

Ich kann sehen, dass die DBSCAN alle drei Spalten für den Scan verwendet, weil, wenn ich nur zwei Spalten verwenden, lat, lon, erhalte ich eine andere Anzahl von Clustern.

Ich möchte alle Spalten in meiner Datenbank für den späteren Zugriff haben, aber nur aus den lat/lon Spalten Cluster. Ich glaube, dass ich etwas brauche, um die anderen Spalten zu markieren, damit sie nicht verwendet werden, aber ich kann die richtige Antwort nicht finden. Ich dachte das folgende würde funktionieren aber es tat nicht:

params.addParameter(NumberVectorLabelParser.Parameterizer.LABEL_INDICES_ID, 2); 

Kann mir jemand dabei helfen?

Antwort

0

Sie müssen diese Parameter auf die NumberVectorLabelParser über seine long[] labelIndices bitmask Parameter zu übergeben (dies derzeit nicht ein Array von ganzen Zahlen, aber eine Bitmaske, so dass Sie new long[]{4L} wollen).

Sie übergeben den Parameter zur Zeit an die Datenbank, die diesen Parameter nicht enthält.

Oder Sie könnten DimensionSelectingLatLngDistanceFunction verwenden; weil Sie den euklidischen Abstand auf Längen- und Breitengrad sowieso nicht verwenden sollten.

+0

Danke für die Hilfe. Es brauchte ein wenig, um herauszufinden, wie die Bitmaske funktionierte, aber ich benutze nur die Spalten lat und lon. Ich habe auch die Abstandsfunktion geändert und die Ergebnisse für Euklidisch und DimensionSelectingLatLngDistanceFunction sind sehr unterschiedlich, aber ich werde das Epsilon optimieren, um die Cluster passend zu sortieren. – SpiltMilk

Verwandte Themen