2014-02-20 119 views
0

我正在使用ELKI mini GUI來集羣我的數據點。我有大約1300個GPS數據點,我想集中我的GPS點(DBSCAN和OPTICS)。作爲dbc.in的輸入文件,我使用的只有2列(X,Y)的csv文件。問題是,我的X,Y(投影中)座標精確到6位小數。但運行集羣算法後,我得到的精度較低(最多3位小數)。我怎樣才能提高輸出點的精度?ELKI如何提高精度?

而且當它生成羣集時,它會自動調用一些與我的實際點ID(ID,X,Y)不相對應的虛擬ID。但是,輸入csv中沒有給出ID。它只包含兩列(X,Y)。

+0

你能分享一個示例輸入和輸出行嗎? ELKI分配內部ID,但如果你不需要它們,你可以丟棄它們。 –

+0

這裏是我的問題的詳細解釋。 輸入文件格式 (X)(Y) ______________________ 3456.124357 5673.4567 3456.109453 5673.4451 ...................... ..... ................. 輸出文件(具有內部ID和X,Y截斷) ________________ 651 3456.1244 5673.46 652 3456.1095 5673.45 問題是因爲這些值越來越截短的和輸出文件不包含這些點的實際ID(比如從0開始),所以我無法確定哪些點被聚集,哪些點屬於哪個聚類。 – user26161

+0

你可以編輯問題,使其更具可讀性嗎?除非絕對必要,否則應避免檢查數據。在使用MiniGUI時,使用'FixedDBIDsFilter'來獲取與輸入文件的行號相對應的'DBID'。您是否考慮爲您的用例編寫自定義輸出模塊? –

回答

0

ELKI依靠double代表數字。如果你需要更高的精度,你將不得不實現你自己的解析器和輸出模塊(雖然很容易,因爲我們有一個高度模塊化的架構)。

對文本的默認輸出序列化由Java處理。因此,Precision是默認從Java獲得的。如果您使用的是DoubleVector,則這應該是15-16位的精度,如果您使用的是FloatVector,則應該是7-8位。

快速檢查與groovysh:

new DoubleVector([12345.6789, 3456.109453] as double[]); 
===> 12345.6789.109453 
new FloatVector([12345.6789, 3456.109453] as float[]); 
===> 12345.679 3456.1094 

僅產生損失,從doublefloat精度可以預期的。

獲取行標籤的最佳方法是...爲您的數據添加行標籤。

Wrt。添加到註釋中的附加問題:默認分析器會將文檔開頭的文本行視爲列標籤。因此,只需將「X Y」放入文件的第一行即可。

合理的輸入格式將因此:

X Y Label 
1 2 Point7 
3 4 "Point 8" 

以下是不那麼好的想法:

5 6 123shouldwork 
7 8 don't do this: 3 parser will retain the 3 

標籤應該是非數字,這樣分析器會將其作爲標籤自動。否則,您必須設置適當的參數。

DBID用於內部處理。也許我們不應該把它們寫入輸出。 FixedDBIDFilter是一個駭人的工作;它是用來獲得可重複哈希當使用需要基於ID的哈希和在MiniGUI中執行多個運行的算法。由於多次運行,DBID將不斷枚舉。

+0

感謝您的詳細解釋。我還有一個疑問。我怎樣才能以JPEG或其他圖像格式保存可視化(繪圖)。我嘗試導出選項,但圖像的分辨率非常差。 – user26161

+0

最好的導出格式是SVG。然後你可以用inkscape編輯它,例如更改字體,顏色或標籤位置。 但是,如果您選擇像素格式,您還可以設置圖像分辨率。 (用於PDF輸出,也加蠟染pdf輸出罐)然而;有更好的可視化工具。 ELKI中的可視化功能是一種便利功能。 –