【问题标题】:ELKI ClusteringVectorDumper - which ones are the outliers?ELKI ClusteringVectorDumper - 哪些是异常值?
【发布时间】:2016-10-16 07:33:46
【问题描述】:

我正在使用 ELKI 进行 DBSCAN 集群及其 ClusteringVectorDumper 将集群 ID 输出到文本文件中。

异常值会得到哪个 id? 我以为它是“0”,但这似乎不是真的。

【问题讨论】:

  • 噪声与异常值不同。簇数是无意义的,就像随机数一样。您是否查看过实际问题的源代码?
  • 这并不能回答我的问题...你的意思是告诉我异常值会得到一个随机 id 吗?还是每个异常值都有自己的 id?
  • 这是评论,不是答案。我是说集群“自然”没有整数,因此很难预测分配的整数。我用过 ELKI(但不是那个自卸车);所以我知道它不会为每个噪声使用一个集群,但所有噪声都将分配到同一个集群。但是在层次聚类中,一个点可能在多个聚类中。在 Java 中,集群将在集群上有一个 isNoise() 方法。不知道倾销者做了什么 - 你检查过来源吗?

标签: cluster-analysis elki


【解决方案1】:

你可以在网上找到ClusteringVectorDumper的源代码。

噪声簇没有特殊处理,但会按照Clustering.getAllClusters()返回的方式处理。为了提供一定的稳定性,此方法目前按 name 排序。 DBSCAN 不提供进一步的集群名称(某些算法会分配例如区间名称或子空间名称),所以如果我没记错的话,所有集群都将命名为 "Cluster""Noise"。因为"Noise" 排在"Cluster" 之后,所以最大 索引应该是噪声簇。

随时发送拉取请求以改进命名或输出。我一直在考虑对噪声簇使用负数,但这会增加代码复杂度;人们可能也不会期望看到一个集群-1

滥用 DBSCAN 进行异常值检测效果不佳。它将错过异常值,因为它们是可到达的,并且它将低密度集群分配为其他方法可以轻松正确识别的异常值。它也不提供排名,因此您几乎无法控制获得多少异常值。如果您修改 DBSCAN 以提供这样的排名,您可能会重新发明最古老的异常值检测方法之一,即 kNN 异常值检测。 (DB-Outlier 也与 DBSCAN 密切相关)。

【讨论】:

  • 无法确认。用 DBSCAN 反复测试 mouse.csv 数据集,设置参数使大多数点为噪声,然后检查聚类向量输出,最大聚类的索引(=噪声)通常不是 0,也不是最后一个索引。我必须补充一点,我正在处理 4 月 13 日 (03fbea9028ceda5839b61b65cae647e029eb8f70) 的旧提交,因此这种行为可能已经改变。
  • 然后你必须想出一个你喜欢的逻辑,并根据需要修改代码。
  • 作为一个丑陋的黑客,你可以在你的数据集前面添加一个无穷大的数据点。这将是噪音;然后数据文件中的第一个条目将指示噪声等级。 (未经测试,我会完全按照我的需要制作一个结果处理程序。)
  • 感谢您的帮助。我不打算自己写这个,但作为一个建议,如果你想在未来实现某些东西,我希望噪声簇为 0 或 -1,我想这对大多数人来说似乎很直观。跨度>
  • 我们有多个噪声簇的方法。因此,该规则通常不起作用。 -1 会让其他用户感到惊讶,因为这意味着您不能将该值用于数组索引。没有能让每个人都开心的解决方案,您必须自定义。
猜你喜欢
  • 2015-01-09
  • 2015-11-22
  • 2015-10-05
  • 2013-12-20
  • 2017-12-11
  • 2019-12-27
  • 1970-01-01
  • 2020-04-29
  • 2018-03-25
相关资源
最近更新 更多