1

我想用 ELKI 的 GUI 运行 LOF 算法,但我不知道它需要什么样的输入文件。我看过这里,当我尝试给它一个输入 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

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

4

1 回答 1

2

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

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

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

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

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

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

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

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

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

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

解决方法 3:删除缺少值的行。

然而,这些变化都没有使数据集成为异常值检测的好选择:该数据集集群中的“异常值”

于 2015-05-13T16:02:24.940 回答