ELKI DBSCAN 忽略列
ELKI DBSCAN Ignore Columns
我有一个包含多列的 CSV 文件,其中的列是 "lat, lon, item1"。我已经能够使用以下代码加载数据:
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 使用所有三列进行扫描,因为当我只使用两列(纬度、经度)时,我得到了不同数量的聚类。
我想让我的数据库中的所有列供以后访问,但只将 lat/lon 列聚类。我相信我需要一些东西来标记其他列,这样它们就不会被使用,但我找不到正确的答案。我认为以下方法可行,但没有:
params.addParameter(NumberVectorLabelParser.Parameterizer.LABEL_INDICES_ID, 2);
有人可以帮我解决这个问题吗?
您需要通过其 long[] labelIndices
位掩码参数将此参数传递给 NumberVectorLabelParser
(目前这 不是 整数数组,但有点面具,所以你想要 new long[]{4L}
).
您当前正在向数据库传递参数,数据库中没有该参数。
或者您可以使用 DimensionSelectingLatLngDistanceFunction
;因为无论如何你都不应该在纬度和经度上使用欧氏距离。
我有一个包含多列的 CSV 文件,其中的列是 "lat, lon, item1"。我已经能够使用以下代码加载数据:
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 使用所有三列进行扫描,因为当我只使用两列(纬度、经度)时,我得到了不同数量的聚类。
我想让我的数据库中的所有列供以后访问,但只将 lat/lon 列聚类。我相信我需要一些东西来标记其他列,这样它们就不会被使用,但我找不到正确的答案。我认为以下方法可行,但没有:
params.addParameter(NumberVectorLabelParser.Parameterizer.LABEL_INDICES_ID, 2);
有人可以帮我解决这个问题吗?
您需要通过其 long[] labelIndices
位掩码参数将此参数传递给 NumberVectorLabelParser
(目前这 不是 整数数组,但有点面具,所以你想要 new long[]{4L}
).
您当前正在向数据库传递参数,数据库中没有该参数。
或者您可以使用 DimensionSelectingLatLngDistanceFunction
;因为无论如何你都不应该在纬度和经度上使用欧氏距离。