首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ELKI DBSCAN忽略列

ELKI DBSCAN忽略列
EN

Stack Overflow用户
提问于 2017-10-03 20:39:40
回答 1查看 154关注 0票数 2

我有一个包含多列的CSV文件,其中列为"lat,lon,item1“。我已经能够使用以下代码加载数据:

代码语言:javascript
运行
复制
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并检索了集群的数量,并且我可以从集群中提取数据。

代码语言:javascript
运行
复制
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 )时,就会得到不同数量的集群。

为了以后的访问,我希望数据库中的所有列都能访问,但只希望将lat/lon列中的所有列聚集起来。我相信我需要一些东西来标记其他列,使它们不被使用,但我找不到正确的答案。我原以为以下几点是可行的,但却没有:

代码语言:javascript
运行
复制
params.addParameter(NumberVectorLabelParser.Parameterizer.LABEL_INDICES_ID, 2);

有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-05 06:05:34

您需要通过NumberVectorLabelParserlong[] labelIndices位掩码参数将这个参数传递给它(这目前不是一个整数数组,而是一个位掩码,所以您需要new long[]{4L})。

您目前正在将该参数传递给数据库,该数据库没有此参数。

或者您可以使用DimensionSelectingLatLngDistanceFunction;因为您不应该在纬度和经度上使用欧几里德距离。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46553051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档