Weka學習之ARFF文件

什麼是Weka?

   WEKA是一個公開的數據挖掘工作平臺,集合了大量能承擔數據挖掘任務的機器學習算法,包括對數據進行預處理,分類,迴歸、聚類、關聯規則以及在新的交互式界面上的可視化。


下載Weka的網址:

http://www.cs.waikato.ac.nz/ml/weka/downloading.html   


操作數據格式

   WEKA存儲數據的格式是ARFF(Attribute-Relation File Format)文件,這是一種ASCII文本文件。下載安裝後Weka的安裝目錄會自帶ARFF文件,在WEKA安裝目錄的“data”子目錄下可以找到“weather.arff”文件。文件內容如下:

@relation weather

@attribute outlook {sunny, overcast, rainy}
@attribute temperature numeric
@attribute humidity numeric
@attribute windy {TRUE, FALSE}
@attribute play {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

需要注意的是,在Windows記事本打開這個文件時,可能會因爲回車符定義不一致而導致分行不正常。推薦使用Notepad++軟件打開

文件說明

下面我們來對這個文件的內容進行說明。 
識別ARFF文件的重要依據是分行,因此不能在這種文件裏隨意的斷行。空行(或全是空格的行)將被忽略。 
以“%”開始的行是註釋,WEKA將忽略這些行。如果你看到的“weather.arff”文件多了或少了些“%”開始的行,是沒有影響的。 
除去註釋後,整個ARFF文件可以分爲兩個部分。第一部分給出了頭信息(Head information),包括了對關係的聲明和對屬性的聲明。第二部分給出了數據信息(Data information),即數據集中給出的數據。從“@data”標記開始,後面的就是數據信息了。

關係聲明 
關係名稱在ARFF文件的第一個有效行來定義,格式爲 
@relation <relation-name> 
<relation-name>是一個字符串。如果這個字符串包含空格,它必須加上引號(指英文標點的單引號或雙引號)。 

屬性聲明 
屬性聲明用一列以“@attribute”開頭的語句表示。數據集中的每一個屬性都有它對應的“@attribute”語句,來定義它的屬性名稱和數據類型。 
這些聲明語句的順序很重要。首先它表明了該項屬性在數據部分的位置。例如,“humidity”是第三個被聲明的屬性,這說明數據部分那些被逗號分開的列中,第三列數據 85 90 86 96 ... 是相應的“humidity”值。其次,最後一個聲明的屬性被稱作class屬性,在分類或迴歸任務中,它是默認的目標變量。
屬性聲明的格式爲 
@attribute <attribute-name> <datatype> 
其中<attribute-name>是必須以字母開頭的字符串。和關係名稱一樣,如果這個字符串包含空格,它必須加上引號。 
WEKA支持的<datatype>有四種,分別是 
numeric-------------------------數值型 
<nominal-specification>-----分類(nominal)型 
string----------------------------字符串型 
date [<date-format>]--------日期和時間型 
其中<nominal-specification> 和<date-format> 將在下面說明。還可以使用兩個類型“integer”和“real”,但是WEKA把它們都當作“numeric”看待。注意“integer”,“real”,“numeric”,“date”,“string”這些關鍵字是區分大小寫的,而“relation”“attribute ”和“date”則不區分。

數值屬性 
數值型屬性可以是整數或者實數,但WEKA把它們都當作實數看待。 

分類屬性 
分類屬性由<nominal-specification>列出一系列可能的類別名稱並放在花括號中:{<nominal-name1>, <nominal-name2>, <nominal-name3>, ...} 。數據集中該屬性的值只能是其中一種類別。
例如如下的屬性聲明說明“outlook”屬性有三種類別:“sunny”,“ overcast”和“rainy”。而數據集中每個實例對應的“outlook”值必是這三者之一。
@attribute outlook {sunny, overcast, rainy} 
如果類別名稱帶有空格,仍需要將之放入引號中。 

字符串屬性 
字符串屬性中可以包含任意的文本。這種類型的屬性在文本挖掘中非常有用。 
示例: 
@ATTRIBUTE LCC string 

日期和時間屬性 
日期和時間屬性統一用“date”類型表示,它的格式是 
@attribute <name> date [<date-format>] 
其中<name>是這個屬性的名稱,<date-format>是一個字符串,來規定該怎樣解析和顯示日期或時間的格式,默認的字符串是ISO-8601所給的日期時間組合格式“yyyy-MM-ddTHH:mm:ss”。
數據信息部分表達日期的字符串必須符合聲明中規定的格式要求(下文有例子)。 

數據信息 
數據信息中“@data”標記獨佔一行,剩下的是各個實例的數據。 

每個實例佔一行。實例的各屬性值用逗號“,”隔開。如果某個屬性的值是缺失值(missing value),用問號“?”表示,且這個問號不能省略。例如:
@data 
sunny,85,85,FALSE,no 
?,78,90,?,yes 


字符串屬性和分類屬性的值是區分大小寫的。若值中含有空格,必須被引號括起來。例如: 
@relation LCCvsLCSH 
  @attribute LCC string 
  @attribute LCSH string 
  @data 
  AG5, 'Encyclopedias and dictionaries.;Twentieth century.' 
  AS262, 'Science -- Soviet Union -- History.' 


日期屬性的值必須與屬性聲明中給定的相一致。例如: 
@RELATION Timestamps 
  @ATTRIBUTE timestamp DATE "yyyy-MM-dd HH:mm:ss" 
  @DATA 
  "2001-04-03 12:12:12" 
  "2001-05-03 12:59:55" 

稀疏數據 
有的時候數據集中含有大量的0值(比如購物籃分析),這個時候用稀疏格式的數據存貯更加省空間。 
稀疏格式是針對數據信息中某個實例的表示而言,不需要修改ARFF文件的其它部分。看如下的數據: 
@data 
  0, X, 0, Y, "class A" 
  0, 0, W, 0, "class B" 
用稀疏格式表達的話就是 
@data 
  {1 X, 3 Y, 4 "class A"} 
  {2 W, 4 "class B"} 
每個實例用花括號括起來。實例中每一個非0的屬性值用<index> <空格> <value>表示。<index>是屬性的序號,從0開始計;<value>是屬性值。屬性值之間仍用逗號隔開。這裏每個實例的數值必須按屬性的順序來寫,如 {1 X, 3 Y, 4 "class A"},不能寫成{3 Y, 1 X, 4 "class A"}
注意在稀疏格式中沒有註明的屬性值不是缺失值,而是0值。若要表示缺失值必須顯式的用問號表示出來。

Relational型屬性 
在WEKA 3.5版中增加了一種屬性類型叫做Relational,有了這種類型我們可以像關係型數據庫那樣處理多個維度了。但是這種類型目前還不見廣泛應用,暫不作介紹。





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