sample_weight DBSCAN 的 ELKI 实现中的选项

sample_weight option in the ELKI implementation of DBSCAN

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

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

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

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

虽然可以通过 GeneralizedDBSCAN class 轻松添加,但目前在 ELKI 中尚未实现。您无需计算邻居的数量,而是将他们的权重相加。

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

虽然要使这个命令行和 minigui 可用,但它不是微不足道的,因为您将需要第二个权重关系。从 Java 代码开始,一旦您理解了对所有内容使用关系而不是数组的概念,这就很容易做到。粗略地说,对于每个邻居,您从权重关系中添加权重并将其与阈值进行比较,而不是将计数与 "minpts" 整数进行比较。

由于最近另一个用户提出了这个要求,我将不胜感激将其贡献给 ELKI 的拉取请求。

至于离群检测的目标,我建议还是使用designed的方法来进行离群检测。例如 Local Outlier Factor,甚至简单的 k-nearest-neighbor 检测器应该可以正常工作,并且可以比 DBSCAN 更快。我不相信你的方法会产生很多好处——在索引结构的帮助下,DBSCAN 通常很快;并且您的重复数据删除方法可能已经与具有类似基于网格的数据索引的 DBSCAN 一样昂贵。