运行LOF时输入文件到ELKI的结构

时间:2015-05-13 13:57:40

标签: data-mining outliers elki

我想用ELKI的GUI运行LOF算法,但我无法弄清楚它期望的输入文件类型。我查看了here,当我尝试为每个实例提供一个输入csv文件时,其中包含空格分隔的属性值(包括类的分类属性,其余属性为数字)。该文件类似于此(没有标题):

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(因为那是带有类标签的列的索引)和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

有人可以帮我运行算法吗?非常感谢帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

更新:输入数据中的缺失值打破了直方图可视化工具。这已经修复,并将在下一个版本中工作(虽然缺少值将被忽略 - 没有单独的直方图栏来指示缺失值的数量。欢迎贡献!)

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

但你根本不需要使用这个过滤器。

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:删除缺少值的行。

这些变化都不会使数据集成为异常值检测的理想选择,但是:此数据集群中的“异常值”