我想用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
有人可以帮我运行算法吗?非常感谢帮助,谢谢!
答案 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:删除缺少值的行。
这些变化都不会使数据集成为异常值检测的理想选择,但是:此数据集群中的“异常值”。