ELKI - 输入距离矩阵

时间:2013-07-16 13:14:03

标签: outliers elki

我试图使用ELKI进行异常值检测;我有自定义距离矩阵,我试图将它输入到ELKI来执行LOF(例如,第一次)。

我尝试关注http://elki.dbs.ifi.lmu.de/wiki/HowTo/PrecomputedDistances,但对我来说并不是很清楚。我做了什么:

  • 我不想从数据库加载数据,因此我使用:

    -dbc DBIDRangeDatabaseConnection -idgen.count 100
    

    (其中100是我将要分析的对象数量)

  • 我使用LOF算法并调用外部距离文件

    -algorithm outlier.LOF
    -algorithm.distancefunction external.FileBasedDoubleDistanceFunction
    -distance.matrix testData.ascii -lof.k 3
    

我的距离文件如下(非常简单,用于测试目的)

0 0 0  
0 1 1  
0 2 0.2  
0 3 0.1  
1 1 0  
1 2 0.9  
1 3 0.9  
2 2 0  
2 3 0.2  
3 3 0  
4 0 0.23  
4 1 0.97  
4 2 0.15  
4 3 0.07  
4 4 0  
5 0 0.1  
5 1 0.85  
5 2 0.02  
5 3 0.15  
5 4 0.1  
5 5 0  
6 0 1  
6 1 1   
6 2 1  
6 3 1  

结果说:"所有在一个简单的聚类",虽然这不是聚类,我的数据肯定存在异常值。

我能做对吗?或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

当使用DBIDRangeDatabaseConnection并且不向ELKI提供任何实际数据时,可视化无法产生特别有用的结果(因为它毕竟没有实际数据)。也不能自动评估数据。

“一体化琐碎聚类”是自动尝试可视化数据的工件,但由于上述原因,这不起作用。为未标记的数据自动添加此聚类,以允许某些可视化工作。

有两件事要做:

  1. 设置输出处理程序。例如-resulthandler ResultWriter,它将产生类似于此的输出:

    ID=0 lof-outlier=1.0
    

    ID=是对象编号,lof-outlier=是LOF离群值。

    或者,您可以实现自己的输出处理程序。这里有一个例子: http://elki.dbs.ifi.lmu.de/browser/elki/trunk/src/tutorial/outlier/SimpleScoreDumper.java

  2. 修复DBIDRangeDatabaseConnection。然而,您被ELKI 0.6.0~beta1中的错误所困扰:DBIDRangeDatabaseConnection实际上没有正确初始化其参数。 这里有一些简单的错误修复(参数未在构造函数中正确初始化):

    http://elki.dbs.ifi.lmu.de/changeset/11027/elki

    或者,您可以创建虚拟输入文件并使用常规文本输入。包含

    的文件
    0
    1
    2
    ...
    

    应该做的伎俩。使用-dbc.in numbers100.txt -dbc.filter FixedDBIDsFilter -dbc.startid 0。后面的参数是让你的ID从0开始,而不是1(默认)。

    此解决方法将产生稍微不同的输出格式:

    ID=0 0.0 lof-outlier=1.0
    

    其他列来自虚拟文件。当使用外部距离函数时,虚拟值不会影响LOF的算法结果;但这种方法会使用一些额外的内存。