Weka項目中的ARFF文件結構解析

 Weka作爲數據挖掘開源項目中的經典,很多算法和數據的組織結構是值得學習的。Weka裏面大量使用了一種叫做arff(Attribute-Relation File Format )的數據文件結構。這種arff文件內部結構很簡單,主要是測試算法使用的輕量級的數據文件結構。OpenMiner繼承Weka的風格,也打算支持arff文件格式,並且作爲前期的挖掘算法測試數據來源。下面是我從網上找到的關於這種文件格式的網址http://www.cs.waikato.ac.nz/~ml/weka/arff.html

  ARFF文件格式很簡單,從Weka裏面都可以找到一些它的例子:

@relation weather

@attribute outlook

Unknown macro: {sunny, overcast, rainy}


@attribute temperature real
@attribute humidity real
@attribute windy

Unknown macro: {TRUE, FALSE}


@attribute play

Unknown macro: {yes, no}

 

@data
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
overcast,83,86,FALSE,yes
rainy,70,96,FALSE,yes
rainy,68,80,FALSE,yes
rainy,65,70,TRUE,no
overcast,64,65,TRUE,yes
sunny,72,95,FALSE,no
sunny,69,70,FALSE,yes
rainy,75,80,FALSE,yes
sunny,75,70,TRUE,yes
overcast,72,90,TRUE,yes
overcast,81,75,FALSE,yes
rainy,71,91,TRUE,no

不用多說,直接看,大致都能明白這個數據文件的意思了。

    在讀取arff文件的時候,有點是需要注意到的。在Java中,InputStream,DataInputStream這些類都不支持mark和reset,也就是說不能倒回去再讀。而ByteArrayInputStream支持mark和reset,但是arff文件作爲一個數據源文件,可能包含幾十MB,甚至是幾百MB。。。的數據,如果全部先讀進內存,再從內存中解析,恐怕並不可行。還好Java中實現了BufferedInputStream,它可以預讀8192個字節的緩衝,內存中的讀完後,再從輸入流中繼續讀8192個字節的緩衝,並且支持mark和reset,這就是我在Java裏面自己實現解析arff時候的主要技術問題所在。至於字符串的解析就很簡單了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章