Weka是什麼不多介紹,直接切入正題,簡單介紹Weka的數據格式。
Weka存儲數據的格式是ARFF(Attribute-Relation File Format)文件,是一種ASCII文本文件。如下例,weka自帶的weather.arff文件。
% ARFF file for the weather data with some numric features
%
@relation weather
@attribute outlook {sunny, overcast, rainy}
@attribute temperature real
@attribute humidity real
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}
@data
%
% 4 instances
%
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
overcast,83,86,FALSE,yes
rainy,70,96,FALSE,yes
weka數據以“%”開始的行是註釋,WEKA將忽略這些行。
除去註釋後,整個ARFF文件可以分爲兩個部分。
第一部分給出了頭信息(Head information),包括了對關係的聲明和對屬性的聲明。
第二部分給出了數據信息(Data information),即數據集中給出的數據。從“@data”標記開始,後面的就是數據信息了。
關係聲明
關係名稱在ARFF文件的第一個有效行來定義,格式爲
@relation <relation-name>
<relation-name>是一個字符串。如果這個字符串包含空格,它必須加上引號(指英文標點的單引號或雙引號)。
屬性聲明
屬性聲明用一列以“@attribute”開頭的語句表示。數據集中的每一個屬性都有它對應的“@attribute”語句,來定義它的屬性名稱和數據類型。
聲明語句的順序很重要:它表明了該項屬性在數據部分的位置;最後一個聲明的屬性被稱作class屬性,在分類或迴歸任務中,它是默認的目標變量。
屬性聲明的格式爲
@attribute <attribute-name> <datatype>
其中<attribute-name>是必須以字母開頭的字符串。和關係名稱一樣,如果這個字符串包含空格,它必須加上引號。
weka支持的<datatype>有四種,分別是
numeric 數值型
<nominal-specification> 分類(nominal)型
string 字符串型
date [<date-format>] 日期和時間型
注意“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>是屬性值。屬性值之間仍用逗號隔開。
注意在稀疏格式中沒有註明的屬性值不是缺失值,而是0值。若要表示缺失值必須顯式的用問號表示出來。