2013-07-16 196 views
0

我正嘗試使用ELKI進行異常值檢測;我有我的自定義距離矩陣,我試圖將它輸入到ELKI以執行LOF(例如,第一次)。ELKI - 輸入距離矩陣

我嘗試關注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

當使用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中的一個bug所困擾:DBIDRangeDatabaseConnection實際上並沒有正確地初始化它的參數。 瑣碎的bug修復(參數不正確地在構造函數初始化)是在這裏:

    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的算法結果;但是這種方法會使用一些額外的內存。