Weka學習 1 資料格式

2021-06-21 16:53:46 字數 4084 閱讀 1214

weka學習(1)-資料格式

招展如樺

weka學習(1)-資料格式

巧婦難為無公尺之炊。首先我們來看看weka所用的資料應是什麼樣的格式。

跟很多電子**或資料分析軟體一樣,weka所處理的資料集是圖1那樣的乙個二維的**。

圖1這裡我們要介紹一下weka中的術語。**裡的乙個橫行稱作乙個例項(instance),相當於統計學中的乙個樣本,或者資料庫中的一條記錄。豎行稱作乙個屬性(attrbute),相當於統計學中的乙個變數,或者資料庫中的乙個字段。這樣乙個**,或者叫資料集,在weka看來,呈現了屬性之間的一種關係(relation)。圖1中一共有14個例項,5個屬性,關係名稱為「weather」。

weka儲存資料的格式是arff(attribute-relation file format)檔案,這是一種ascii文字檔案。圖1所示的二維**儲存在如下的arff檔案中。這也就是weka自帶的「weather.arff」檔案,在weka安裝目錄的「data」子目錄下可以找到。

**: 

全選% arff file for the weather data with some numric features

%@relation weather

@attribute outlook

@attribute temperature real

@attribute humidity real

@attribute windy

@attribute play

@data

%% 14 instances

%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記事本開啟這個檔案時,可能會因為回車符定義不一致而導致分行不正常。推薦使用ultraedit這樣的字元編輯軟體察看arff檔案的內容。

下面我們來對這個檔案的內容進行說明。

識別arff檔案的重要依據是分行,因此不能在這種檔案裡隨意的斷行。空行(或全是空格的行)將被忽略。

以「%」開始的行是注釋,weka將忽略這些行。如果你看到的「weather.arff」檔案多了或少了些「%」開始的行,是沒有影響的。

除去注釋後,整個arff檔案可以分為兩個部分。第一部分給出了頭資訊(head information),包括了對關係的宣告和對屬性的宣告。第二部分給出了資料資訊(data information),即資料集中給出的資料。從「@data」標記開始,後面的就是資料資訊了。

關係宣告

關係名稱在arff檔案的第乙個有效行來定義,格式為

@relation

是乙個字串。如果這個字串包含空格,它必須加上引號(指英文標點的單引號或雙引號)。

屬性宣告

屬性宣告用一列以「@attribute」開頭的語句表示。資料集中的每乙個屬性都有它對應的「@attribute」語句,來定義它的屬性名稱和資料型別。

這些宣告語句的順序很重要。首先它表明了該項屬性在資料部分的位置。例如,「humidity」是第三個被宣告的屬性,這說明資料部分那些被逗號分開的列中,第三列資料 85 90 86 96 ... 是相應的「humidity」值。其次,最後乙個宣告的屬性被稱作class屬性,在分類或回歸任務中,它是預設的目標變數。

屬性宣告的格式為

@attribute

其中是必須以字母開頭的字串。和關係名稱一樣,如果這個字串包含空格,它必須加上引號。

weka支援的有四種,分別是

numeric-------------------------數值型

-----分類(nominal)型 

string----------------------------字串型

date --------日期和時間型

其中和將在下面說明。還可以使用兩個型別「integer」和「real」,但是weka把它們都當作「numeric」看待。注意「integer」,「real」,「numeric」,「date」,「string」這些關鍵字是區分大小寫的,而「relation」「attribute 」和「date」則不區分。

數值屬性

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

分類屬性

分類屬性由列出一系列可能的類別名稱並放在花括號中: 。資料集中該屬性的值只能是其中一種類別。

例如如下的屬性宣告說明「outlook」屬性有三種類別:「sunny」,「 overcast」和「rainy」。而資料集中每個例項對應的「outlook」值必是這三者之一。

@attribute outlook

如果類別名稱帶有空格,仍需要將之放入引號中。

字串屬性

字串屬性中可以包含任意的文字。這種型別的屬性在文字挖掘中非常有用。

示例:@attribute lcc string

日期和時間屬性

日期和時間屬性統一用「date」型別表示,它的格式是

@attribute date

其中是這個屬性的名稱,是乙個字串,來規定該怎樣解析和顯示日期或時間的格式,預設的字串是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

每個例項用花括號括起來。例項中每乙個非0的屬性值用《空格》 表示。是屬性的序號,從0開始計;是屬性值。屬性值之間仍用逗號隔開。這裡每個例項的數值必須按屬性的順序來寫,如 ,不能寫成。

注意在稀疏格式中沒有註明的屬性值不是缺失值,而是0值。若要表示缺失值必須顯式的用問號表示出來。

relational型屬性

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

**:

Json資料格式

在web 系統開發中,經常會碰到客戶端和伺服器端互動的問題,比如說客戶端傳送乙個 ajax 請求,然後在伺服器端進行計算,計算後返回結果,客戶端接收到這個響應結果並對它進行處理。那麼這個結果以一種什麼資料結構返回,客戶端才能比較容易和較好的處理呢?通過幾個專案的實踐,我發現 json 格式的資料是一...

JSON資料格式

下面這段文字,摘錄自留作備忘 21世紀初,douglas crockford尋找一種簡便的資料交換格式,能夠在伺服器之間交換資料。當時通用的資料交換語言是xml,但是douglas crockford覺得xml的生成和解析都太麻煩,所以他提出了一種簡化格式,也就是json。json的規格非常簡單,只...

資料格式大全

yy mm dd 百分比00.00 12.68 13 12.68 3 23 2003 12 00 00 am 字元用於分隔格式字串中的正數 負數和零各部分。格式字串 資料 結果 12345.6789 12,345.68 12345.6789 12,345.68 12345 12345 12345 0...