ELKI 输入文件的结构,而 运行 LOF

the structure of the input file to ELKI while running LOF

我想 运行 带有 ELKI GUI 的 LOF 算法,但我不知道它需要什么样的输入文件。我查看了 here,当我尝试给它一个输入 csv 文件时,每个实例的属性值为 space-separated(包括 class 的分类属性,其余属性是数字).该文件与此类似(没有 header):

5   1   1   1   2   1   3   1   1   benign
5   4   4   5   7   10  3   2   1   benign
3   1   1   1   2   2   3   1   1   benign
6   8   8   1   3   4   3   7   1   benign
4   1   1   3   2   1   3   1   1   benign
8   10  10  8   7   10  9   7   1   malignant
1   1   1   1   2   10  3   1   1   benign
2   1   2   1   2   1   3   1   1   benign
2   1   1   1   2   1   1   1   5   benign
4   2   1   1   2   1   2   1   1   benign
1   1   1   1   1   1   3   1   1   benign
2   1   1   1   2   1   2   1   1   benign
5   3   3   3   2   3   4   4   1   malignant

我选择 dbc.in 作为 .csv 文件,dbc.parser 作为 NumberVectorLabelParser,ClassLabelFilter 的索引为 9(因为这是带有 class 标签的列的索引)和 k = 11

但是,它给了我这个错误:

Task failed
de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException: Cannot initialize class labels: 9
    at de.lmu.ifi.dbs.elki.datasource.filter.typeconversions.ClassLabelFilter.filter(ClassLabelFilter.java:106)
    at de.lmu.ifi.dbs.elki.datasource.AbstractDatabaseConnection.invokeStreamFilters(AbstractDatabaseConnection.java:114)
    at de.lmu.ifi.dbs.elki.datasource.InputStreamDatabaseConnection.loadData(InputStreamDatabaseConnection.java:91)
    at de.lmu.ifi.dbs.elki.database.StaticArrayDatabase.initialize(StaticArrayDatabase.java:119)
    at de.lmu.ifi.dbs.elki.workflow.InputStep.getDatabase(InputStep.java:62)
    at de.lmu.ifi.dbs.elki.KDDTask.run(KDDTask.java:108)
    at de.lmu.ifi.dbs.elki.application.KDDCLIApplication.run(KDDCLIApplication.java:60)
    at [...]
Caused by: java.lang.ArrayIndexOutOfBoundsException: 9
    at de.lmu.ifi.dbs.elki.data.LabelList.get(LabelList.java:109)
    at de.lmu.ifi.dbs.elki.datasource.filter.typeconversions.ClassLabelFilter.filter(ClassLabelFilter.java:102)
    at de.lmu.ifi.dbs.elki.datasource.AbstractDatabaseConnection.invokeStreamFilters(AbstractDatabaseConnection.java:114)
    at de.lmu.ifi.dbs.elki.datasource.InputStreamDatabaseConnection.loadData(InputStreamDatabaseConnection.java:91)
    at de.lmu.ifi.dbs.elki.database.StaticArrayDatabase.initialize(StaticArrayDatabase.java:119)
    at de.lmu.ifi.dbs.elki.workflow.InputStep.getDatabase(InputStep.java:62)
    at de.lmu.ifi.dbs.elki.KDDTask.run(KDDTask.java:108)
    at de.lmu.ifi.dbs.elki.application.KDDCLIApplication.run(KDDCLIApplication.java:60)
    at [...]

如果我不使用 ClassLabel 过滤器,则会出现一个弹出对话框,其中包含以下消息:

SVG Error:

null:-1
The attribute "d" of the element <path> is invalid

谁能帮我 运行 算法?非常感谢您的帮助,谢谢!

更新: 输入数据中的缺失值破坏了直方图可视化工具。这已得到修复,并将在下一个版本中工作(尽管缺失值将被简单地忽略 - 不会有单独的直方图条来指示缺失值的数量。欢迎贡献!)

class 标签索引是相对于 标签,而不是 CSV 文件:过滤器只看到标签,没有别的。所以你想使用第 0 列作为 class 标签。

但您根本不需要使用此过滤器。

SVG 可视化错误 可能是由于某处产生了 ∞(无穷大,编码为 UTF-8,也可能是 NaN)。这可能是由于输入数据中的 NaN 值,或者是由于数据中的重复项

在这个数据集中,有27条记录

1,1,1,1,2,1,1,1,1

LOF 的定义方式,如果您有 k 个或更多重复项,则 LOF 分数 可以 变得无限大。在这一点上,一些可视化模块失败并将一些半径或一些比例设置为无穷大,然后这不再是有效的 SVG(我会为此打开一个错误票)!欢迎来到杂乱数据的真实世界。 ;-)

解决方法 1:选择 k = 30 或更大。

解决方法2:不使用可视化,而是将数据写入文件;或 仅启用您需要的可视化工具,例如-vis.enable scatter|unproj

解决方法 3:先删除重复项。

解决方法 3:删除具有缺失值的行。

None 的这些变化使得数据集成为离群值检测的一个很好的选择,但是:这个数据集中的 "outliers" 集群 .