【问题标题】:sample_weight option in the ELKI implementation of DBSCANDBSCAN 的 ELKI 实现中的 sample_weight 选项
【发布时间】:2020-01-07 22:40:04
【问题描述】:

我的目标是在包含许多近乎重复的点的数据集中找到异常值,我想使用 DBSCAN 的 ELKI 实现来完成此任务。

由于我不关心集群本身,只关心异常值(我假设离集群相对较远),我想通过在网格上聚合/合并点并使用 scikit 中实现的概念来加快运行时间- 学习为sample_weight

能否请您显示在 ELKI 中进行类似分析的最少代码?

假设我的数据集包含两列 features(聚合/合并点在 xy 网格上的坐标)和第三列 sample_weights sample_weight_feature(聚合/合并点附近的原始数据集点数) .在 scikit-learn 中,我期望的答案是 -- 以下列方式调用函数 fitfit(self, features, y=None, sample_weight=sample_weight_feature)

【问题讨论】:

标签: cluster-analysis dbscan elki


【解决方案1】:

这目前在 ELKI 中没有实现,尽管它可以通过 GeneralizedDBSCAN 类轻松添加。您无需计算邻居,而是将它们的权重相加。

为此,您需要修改GeneralizedDBSCANCorePredicate 以获得“WeightedCorePredicate”。 只要您从 Java 实例化对象(并将关系直接传递给类),这应该相当简单 - 您只需在实例化“WeightedCorePredicate”时传递权重关系。仅当您尝试通过命令行使其全部可用以指定输入格式以及它如何选择正确的关系和列时,它才会变得困难。

让这个命令行和 minigui 可用并不是一件容易的事,因为您需要第二个权重关系。从 Java 代码中,一旦您理解了使用关系而不是数组的概念,它就相当容易做到。粗略地说,对于每个邻居,您从权重关系中添加权重并将其与阈值进行比较,而不是将计数与“minpts”整数进行比较。

由于最近另一位用户提出了此请求,因此我将不胜感激提出请求以将其贡献给 ELKI。

关于异常值检测的目标,我建议宁愿使用设计的方法来进行异常值检测。例如局部异常因子,甚至简单的 k-最近邻检测器应该可以正常工作,并且可以比 DBSCAN 更快。我不相信您的方法会产生很多好处——在索引结构的帮助下,DBSCAN 通常很快;并且您的重复数据删除方法可能已经与具有类似基于网格的数据索引的 DBSCAN 一样昂贵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2018-06-11
    • 2014-07-15
    相关资源
    最近更新 更多