2017-10-03 1 views
1

열이 "lat, lon, item1"인 여러 열이있는 CSV 파일이 있습니다. 나는 다음과 같은 코드를 사용하여 데이터를로드 할 수 있었다 :ELKI DBSCAN 열 무시

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(); 

나는 또한 DBSCAN를 실행하고 클러스터의 수를 검색하고 내가 클러스터에서 데이터를 뽑을 수있다.

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

나는 단지 위도 두 개의 열을 사용하는 경우 때문에 DBSCAN 스캔에 대한 모든 세 개의 열을 사용하고 있음을 알 수있다, 경도, 내가 클러스터의 다른 번호를 얻을.

나중에 액세스 할 수 있도록 모든 열을 데이터베이스에두고 싶지만 위도/경도 열만 클러스터링하십시오. 다른 열을 표시해야 사용할 수 있도록 올바른 열을 찾을 수 없기 때문에 뭔가 다른 열을 표시해야한다고 생각합니다. 다음과 같이 작동 할 것이라고 생각했지만 그렇지 않았습니다.

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

누군가 나를 도와 줄 수 있습니까? (당신이 new long[]{4L}을 할 수 있도록,이 현재 하지 정수 배열하지만, ​​비트 마스크입니다)

답변

0

당신은 long[] labelIndices 비트 마스크 매개 변수를 통해 NumberVectorLabelParser이 매개 변수를 전달해야합니다.

현재이 매개 변수가없는 데이터베이스에 매개 변수를 전달하고 있습니다.

또는 DimensionSelectingLatLngDistanceFunction을 사용할 수 있습니다. 어쨌든 위도와 경도에 유클리드 거리를 사용하지 않아야하기 때문입니다.

+0

도움 주셔서 감사합니다. 비트 마스크가 작동하는 방식을 파악하는 데는 약간의 시간이 걸렸지 만 lat 및 lon 열만 사용했습니다. 거리 함수와 Euclidean 및 DimensionSelectingLatLngDistanceFunction에 대한 결과도 매우 다르지만 클러스터 크기를 적절하게 조정하기 위해 엡실론을 조정할 것입니다. – SpiltMilk