天天看點

主要空間資料挖掘方法

文章出自:http://blog.csdn.net/shaoz/article/details/6847925

張新長 馬林兵等,《地理資訊系統資料庫》[M],科學出版社,2005年2月 第二章第二節

空間資料

空間資料挖掘是多學科和多種技術交叉綜合的新領域,其挖掘方法以人工智能、專家系統、機器學習、資料庫和統計等成熟技術為基礎。下面介紹近年來出現的主要空間資料挖掘方法。

1、空間分析方法

  利用GIS的各種空間分析模型和空間操作對GIS資料庫中的資料進行深加工,進而産生新的資訊和知識。常用的空間分析方法有綜合屬性資料分析、拓撲分析、緩沖區分析、距離分析、疊置分析、地形分析、趨勢面分析、預測分析等,可發現目标在空間上的相連、相鄰和共生等關聯規則,或發現目标之間的最短路徑、最優路徑等輔助決策知識。

2、統計分析方法

  統計分析一直是分析空間資料的常用方法,着重于空間物體和現象的非空間特性分析。統計方法有較強的理論基礎,擁有大量成熟的算法。統計方法難以處理字元型資料,需要有領域知識和統計知識,一般由具有統計經驗的領域專家來完成。

3、歸納學習方法

  歸納學習方法是從大量的經驗資料中歸納制取一般的規則和模式,其大部分算法來源于機器學習領域,歸納學習的算法很多,如Michaski等的 AQ11,AQ15,洪家榮等的AE1,AE9,Hunt的CLS,Quinlan的ID3,C5.0等,其中最著名的是Quinlan提出的C5.0決策樹算法。

4、聚類與分類方法

  聚類和分類方法按一定的距離或相似性系統将資料分成一系列互相區分的組。常用的經典聚類方法有Kmean,Kmeriod,ISO DATA等。分類和聚類都是對目标進行空間劃分,劃分的标準是類内差别最小,類間差别最大。分類和聚類的差別在于分類事先知道類别數和種類的典型特征,而聚類則事先不知道。

5、探測性的資料分析方法

  李德仁、邸凱昌等提出了探測性的資料分析(簡稱EDA)。EDA采用動态統計圖形和動态連結視窗技術将資料及統計特征顯示出來,可發現資料中非直覺的資料特征及異常資料。 EDA與空間分析相結合,構成探測性空間分析(exploratory spatial analysis,簡稱ESA)。EDA和ESA技術在資料挖掘中用于選取與問題領域相關的資料子集,并可初步發現隐含在資料中的某些特征和規律。

6、粗集方法

  粗集理論是波蘭華沙大學Z.Pawlak教授在1982年提出的一種智能資料決策分析工具,被廣泛研究并應用于不精确、不确定、不完全的資訊的分類分析和知識擷取。粗集理論為空間資料的屬性分析和知識發現開辟了一條新途徑,可用于GIS資料庫屬性表的一緻性分析、屬性的重要性、屬性依賴、屬性表簡化、最小決策和分類算法生成等。粗集理論與其他知識發現算法相結合可以在GIS資料庫中資料不确定的情況下擷取多種知識。

7、空間特征和趨勢探測方法

  這是Ester等人在第4屆KDD國際研讨會(1998)上提出的基于領域圖(neighborhoodgraphs)和鄰域路徑 (neighborhoodpath)概念的挖掘算法。Ester等将一個空間特征定義為GIS資料庫中具有空間/非空間性質的目标對象集,并以非空間屬性值出現的相對頻率和不同空間對象出現的相對頻率(目标對象集相對于整個資料庫)作為感興趣的性質,從空間目标集合經過它的相鄰擴充後的一個開始點出發,發現一個或多個非空間性質的變化規律。這種算法的效率在很大程度上取決于其處理相鄰關系的能力。

8、數字地圖圖像分析和模式識别方法

  GIS資料庫(資料倉庫)中含有大量的圖形圖像資料,一些圖像分析和模式識别方法可直接用于挖掘資料和發現知識,或作為其他挖掘方法的預處理方法。用于圖像分析和模式識别的方法主要有:決策樹(desicion tree)方法、神經元網絡(artificial neural net work)方法、數學形态學方法、圖論方法。

9、可視化方法

  可視化資料分析技術拓寬了傳統的圖表功能,使使用者對資料的剖析更清楚。例如把資料庫中的多元資料變成多種圖形,這對提示資料的狀況、内在本 質及規律性起到了很強的作用。當顯示SDM發現的結果時,将地圖同時顯示作為背景。一方面能夠顯示其知識特征的分布規律;另一方面也可對挖掘出的結果進行 可視化解釋,進而達到最佳的分析效果。可視化技術使使用者看到資料處理的全過程、監測并控制資料分析過程。為了發現某類知識,常要綜合運用這些方法。資料挖 掘方法還要與正常的資料庫技術充分結合,資料挖掘利用的技術越多,得出的結果精确性就越高。

空間資料庫中的知識

基于GIS與遙感應用,一般認為(Li D R. et al., 1994,1997; 邸凱昌等,1996,1997;Han J., 1996; Koperski K. et al, 1996), 可以從空間資料庫中發現的知識有以下8種:

  (1)普遍的幾何知識(general geometric knowledge)

所謂普遍的幾何知識,是指關于目标的數量、大小、形态特征等的普遍性知識,如點狀目标的位置、大小等,線狀目标的長度、大小和方向等,面狀目标的周長、面積、幾何中心等。可以通過計算或統計得出GIS中空間目标某種幾何特征量的最小值、最大值、均值、方差、中數等,還可以統計出有關特征量的直方圖等。

  (2)空間分布規律(spatial distribution regularities)

空間分布規律是指目标在地理空間中垂直向、水準向以及垂直與水準聯合的分布規律。垂 直分布是指空間目标沿地理調和的分布,如植被覆寫與生物多樣性的海拔變化,作物生長的坡度變化等;水準分布是指地物沿地理區域的平面分布,如水稻畝産的區 域分異性,基礎設施的城鄉差異等;垂直與水準的聯合分布是指目标的高程和區域方面的同時變化,如風土人情的流域差異性、氣候特征的地理分異性等。

  (3)空間關聯規則(spatial association rules)

空間關聯規則是指空間目标的相鄰、相連、共生、包含等關系,如道路與河流的相連,國家與國家的相鄰等。

  (4)空間分類(聚類)規則(spatial classification/clustering rules)

  空間分類規則是根據目标的空間或非空間特征進行類别劃分的規則;而空間聚類規則是根據目标的聚散程度進行類别劃分的規則,可用于GIS的空間概括和空間綜合。空間分類和空間的共同之處是:都是對目标空間的再劃分,劃分的标準是類内差别最小而類間差别最大;不同之處是:分類是有導師的 (supervised)而聚類是無導師的,即分類是事先知道類别數和各類的典型特征,而聚類則事先不知道。

以遙感圖像分析為例,一般性遙感圖像處理是針對一幅圖像或一個試驗區的多幅圖像進行處理和分析,找出某種結論性的東西;而遙感資料挖掘則強調對大量資料的處理、分析和對比,進而找出共性和特性,總結出規律和規則,而這些規律和規則在後續的圖像分析中具有指導作用。

  (5)空間特征規則(spatial characteristic rules)

空間特征規則是指某類或某幾類空間目标的幾何與屬性的普遍特征,是對共性的描述。比如:“高速公路一般都比較直”、“高速公路一般6車道”是兩條描述高速公路普遍特征的空間特征規則。普遍的幾何知識屬于空間特征規則的一類,将它分離出來單獨作為一類知識是由于它在遙感影像解譯中有十分重要的作用。

  (6)空間區分規則(spatial discriminate rules)

空間區分規則特征是指兩類或多類目标間幾何或屬性的不同特征,是對個性的描述。“高速公路一般比較直,高等級公路一般稍彎一些”、“高速公路一般6車道,高等級公路一般4車道”是兩條描繪高速公路與高等級公路特征差别的區分規則。它不同于空間分類規則;分類規則是對空間目标進行明确分類,強調的是分類精度,為了保持分類精度,一般在較低的層次進行分類;而區分規則是對已知類别對象的對比,一般是比較高層次上的描述。

  (7)空間演化規則(spatial evolution rules)

空間演化規則是指空間目标的幾何、屬性特征随時間而變化的規律。這一規律的發現必須基于時空資料庫或同一區域的多個時相的資料。

  (8)面向對象的知識(object oriented knowledge)

  它是關于某類複雜對象的子類構成及其普遍特征的知識。比如對于一個小區對象,由住宅樓、服務樓、幼稚園、綠地、健身區等子類對象構成,互相之間的空間穿插和均衡布局等構成該小區的總體特征。

#################################################################################################

空間資料挖掘:變資料為知識

中國科學院計算技術研究所 劉毅勇 何雄 李金山 廖浩均 孟亮 鄧柱中

空間資料挖掘是指從空間資料庫中抽取沒有清楚表現出來的隐含的知識和空間關系,并發現其中有用的特征和模式的理論、方法和技術。空間資料挖掘和知識發現的過程大緻可分為以下多個步驟:資料準備、資料選擇、資料預處理、資料縮減或者資料變換、确定資料挖掘目标、确定知識發現算法、資料挖掘、模式解釋、知識評價等,而資料挖掘隻是其中的一個關鍵步驟。但是為了簡便,人們常常用空間資料挖掘來代替空間資料挖掘和知識發現。

常用的空間資料挖掘方法主要有:

1.       基于機率論的方法。

這是一種通過計算不确定性屬性的機率來挖掘空間知識的方法,所發現的知識通常被表示成給定條件下某一假設為真的條件機率。在用誤差矩陣描述遙感分類結果的不确定性時,可以用這種條件機率作為背景知識來表示不确定性的置信度。

2.       空間分析方法。

指采用綜合屬性資料分析、拓撲分析、緩沖區分析、密度分析、距離分析、疊置分析、網絡分析、地形分析、趨勢面分析、預測分析等在内 的分析模型和方法,用以發現目标在空間上的相連、相鄰和共生等關聯規則,或挖掘出目标之間的最短路徑、最優路徑等知識。目前常用的空間分析方法包括探測性 的資料分析、空間相鄰關系挖掘算法、探測性空間分析方法、探測性歸納學習方法、圖像分析方法等。

3.       統計分析方法。

指利用空間對象的有限資訊和/或不确定性資訊進行統計分析,進而評估、預測空間對象屬性的特征、統計規律等知識的方法。它主要運用空間自協方差結構、變異函數或與其相關的自協變量或局部變量值的相似程度實作包含不确定性的空間資料挖掘。

4.       歸納學習方法。

即在一定的知識背景下,對資料進行概括和綜合,在空間資料庫(資料倉庫)中搜尋和挖掘一般的規則和模式的方法。歸納學習的算法很多,如由Quinlan提出的著名的C5.0決策樹算法、Han Jiawei教授等提出的面向屬性的歸納方法、裴健等人提出的基于空間屬性的歸納方法等。

5.       空間關聯規則挖掘方法。

即在空間資料庫(資料倉庫)中搜尋和挖掘空間對象(及其屬性)之間的關聯關系的算法。最著名的關聯規則挖掘算法是Agrawal提出的Apriori算法;此外還有程繼華等提出的多層次關聯規則的挖掘算法、許龍飛等提出的廣義關聯規則模型挖掘方法等。

6.       聚類分析方法。

即根據實體的特征對其進行聚類或分類,進而發現資料集的整個空間分布規律和典型模式的方法。常用的聚類方法有K-mean, K-medoids方法、Ester等提出的基于R—樹的資料聚焦法及發現聚合親近關系和公共特征的算法、周成虎等提出的基于資訊熵的時空資料分割聚類模 型等。

7.       神經網絡方法。

即通過大量神經元構成的網絡來實作自适應非線性動态系統,并使其具有分布存儲、聯想記憶、大規模并行處理、自學習、自組織、自适應等功能的方法;在空間資料挖掘中可用來進行分類和聚類知識以及特征的挖掘。

8.       決策樹方法。

即根據不同的特征,以樹型結構表示分類或決策集合,進而産生規則和發現規律的方法。采用決策樹方法進行空間資料挖掘的基本步驟如 下:首先利用訓練空間實體集生成測試函數;其次根據不同取值建立決策樹的分支,并在每個分支子集中重複建立下層結點和分支,形成決策樹;然後對決策樹進行 剪枝處理,把決策樹轉化為據以對新實體進行分類的規則。

9.       粗集理論。

一種由上近似集和下近似集來構成粗集,進而以此為基礎來處理不精确、不确定和不完備資訊的智能資料決策分析工具,較适于基于屬性不确定性的空間資料挖掘。

10. 基于模糊集合論的方法。

這是一系列利用模糊集合理論描述帶有不确定性的研究對象,對實際問題進行分析和處理的方法。基于模糊集合論的方法在遙感圖像的模糊分類、GIS模糊查詢、空間資料不确定性表達和處理等方面得到了廣泛應用。

11. 空間特征和趨勢探側方法。

這是一種基于鄰域圖和鄰域路徑概念的空間資料挖掘算法,它通過不同類型屬性或對象出現的相對頻率的差異來提取空間規則。

12. 基于雲理論的方法。

雲理論是一種分析不确定資訊的新理論,由雲模型、不确定性推理和雲變換三部分構成。基于雲理論的空間資料挖掘方法把定性分析和定量計算結合起來,處理空間對象中融随機性和模糊性為一體的不确定性屬性;可用于空間關聯規則的挖掘、空間資料庫的不确定性查詢等。

13. 基于證據理論的方法。

證據理論是一種通過可信度函數(度量已有證據對假設支援的最低程度)和可能函數(衡量根據已有證據不能否定假設的最高程度)來處理不确定性資訊的理論,可用于具有不确定屬性的空間資料挖掘。

14. 遺傳算法。

這是一種模拟生物進化過程的算法,可對問題的解空間進行高效并行的全局搜尋,能在搜尋過程中自動擷取和積累有關搜尋空間的知識,并 可通過自适應機制控制搜尋過程以求得最優解。空間資料挖掘中的許多問題,如分類、聚類、預測等知識的擷取,均可以用遺傳算法來求解。這種方法曾被應用于遙 感影像資料中的特征發現。

15. 資料可視化方法。

這是一種通過可視化技術将空間資料顯示出來,幫助人們利用視覺分析來尋找資料中的結構、特征、模式、趨勢、異常現象或相關關系等空間知識的方法。為了確定這種方法行之有效,必須建構功能強大的可視化工具和輔助分析工具。

16. 計算幾何方法。

這是一種利用計算機程式來計算平面點集的Voronoi圖,進而發現空間知識的方法。利用Voronoi圖可以解決空間拓撲關系、資料的多尺度表達、自動綜合、空間聚類、空間目标的勢力範圍、公共設施的選址、确定最短路徑等問題。

17. 空間線上資料挖掘。

這是一種基于網絡的驗證型空間來進行資料挖掘和分析的工具。它以多元視圖為基礎,強調執行效率和對使用者指令的及時響應,一般以空間 資料倉庫為直接資料源。這種方法通過資料分析與報表子產品的查詢和分析工具(如OLAP、決策分析、資料挖掘等)完成對資訊和知識的提取,以滿足決策的需 要。

頁首

由 C6H5NO2 » 2006年 11月 22日 18:04 

3.資料準備

使用WEKA作資料挖掘,面臨的第一個問題往往是我們的資料不是ARFF格式的。幸好,WEKA還提供了對CSV檔案的支援,而這種格式是被很多其他軟體所支援的。此外,WEKA還提供了通過JDBC通路資料庫的功能。

在這一節裡,我們先以Excel和Matlab為例,說明如何獲得CSV檔案。然後我們将知道CSV檔案如何轉化成ARFF檔案,畢竟後者才是WEKA支援得最好的檔案格式。面對一個ARFF檔案,我們仍有一些預處理要做,才能進行挖掘任務。

.* -> .csv

我們給出一個CSV檔案的例子(bank-data.csv)。用UltraEdit打開它可以看到,這種格式也是一種逗号分割資料的文本檔案,儲存了一個二維表格。

Excel的XLS檔案可以讓多個二維表格放到不同的工作表(Sheet)中,我們隻能把每個工作表存成不同的CSV檔案。打開一個XLS檔案并切換到需要轉換的工作表,另存為CSV類型,點“确定”、“是”忽略提示即可完成操作。

在Matlab中的二維表格是一個矩陣,我們通過這條指令把一個矩陣存成CSV格式。

csvwrite('filename',matrixname)

需要注意的是,Matllab給出的CSV檔案往往沒有屬性名(Excel給出的也有可能沒有)。而WEKA必須從CSV檔案的第一行讀取屬性名,否則就會把第一行的各屬性值讀成變量名。是以我們對于Matllab給出的CSV檔案需要用UltraEdit打開,手工添加一行屬性名。注意屬性名的個數要跟資料屬性的個數一緻,仍用逗号隔開。

.csv -> .arff

将CSV轉換為ARFF最迅捷的辦法是使用WEKA所帶的指令行工具。

運作WEKA的主程式,出現GUI後可以點選下方按鈕進入相應的子產品。我們點選進入“Simple CLI”子產品提供的指令行功能。在新視窗的最下方(上方是不能寫字的)輸入框寫上

java weka.core.converters.CSVLoader filename.csv > filename.arff 

即可完成轉換。

在WEKA 3.5中提供了一個“Arff Viewer”子產品,我們可以用它打開一個CSV檔案将進行浏覽,然後另存為ARFF檔案。

進入“Exploer”子產品,從上方的按鈕中打開CSV檔案然後另存為ARFF檔案亦可。

“Exploer”界面

我們應該注意到,“Exploer”還提供了很多功能,實際上可以說這是WEKA使用最多的子產品。現在我們先來熟悉它的界面,然後利用它對資料進行預處理。

f2.jpg (97.14 KiB) 被浏覽 18389 次 

圖2

圖2顯示的是使用3.5版"Exploer"打開"bank-data.csv"的情況。我們根據不同的功能把這個界面分成8個區域。

區域1的幾個頁籤是用來切換不同的挖掘任務面闆。這一節用到的隻有“Preprocess”,其他面闆的功能将在以後介紹。

區域2是一些常用按鈕。包括打開資料,儲存及編輯功能。我們在這裡把"bank-data.csv"另存為"bank-data.arff"。

在區域3中“Choose”某個“Filter”,可以實作篩選資料或者對資料進行某種變換。資料預處理主要就利用它來實作。

區域4展示了資料集的一些基本情況。

區域5中列出了資料集的所有屬性。勾選一些屬性并“Remove”就可以删除它們,删除後還可以利用區域2的“Undo”按鈕找回。區域5上方的一排按鈕是用來實作快速勾選的。

在區域5中選中某個屬性,則區域6中有關于這個屬性的摘要。注意對于數值屬性和分類屬性,摘要的方式是不一樣的。圖中顯示的是對數值屬性“income”的摘要。

區域7是區域5中選中屬性的直方圖。若資料集的最後一個屬性(我們說過這是分類或回歸任務的預設目标變量)是分類變量(這裡的“pep”正好是),直方圖中的每個長方形就會按照該變量的比例分成不同顔色的段。要想換個分段的依據,在區域7上方的下拉框中選個不同的分類屬性就可以了。下拉框裡選上“No Class”或者一個數值屬性會變成黑白的直方圖。

區域8是狀态欄,可以檢視Log以判斷是否有錯。右邊的weka鳥在動的話說明WEKA正在執行挖掘任務。右鍵點選狀态欄還可以執行JAVA記憶體的垃圾回收。

預處理

bank-data資料各屬性的含義如下:

id a unique identification number 

age age of customer in years (numeric) 

sex MALE / FEMALE 

region inner_city/rural/suburban/town 

income income of customer (numeric) 

married is the customer married (YES/NO) 

children number of children (numeric) 

car does the customer own a car (YES/NO) 

save_acct does the customer have a saving account (YES/NO) 

current_acct does the customer have a current account (YES/NO) 

mortgage does the customer have a mortgage (YES/NO) 

pep did the customer buy a PEP (Personal Equity Plan) after the last mailing (YES/NO) 

通常對于資料挖掘任務來說,ID這樣的資訊是無用的,我們将之删除。在區域5勾選屬性“id”,并點選“Remove”。将新的資料集儲存一次,并用UltraEdit打開這個ARFF檔案。我們發現,在屬性聲明部分,WEKA已經為每個屬性選好了合适的類型。

我們知道,有些算法,隻能處理所有的屬性都是分類型的情況。這時候我們就需要對數值型的屬性進行離散化。在這個資料集中有3個變量是數值型的,分别是“age”,“income”和“children”。 

其中“children”隻有4個取值:0,1,2,3。這時我們在UltraEdit中直接修改ARFF檔案,把

@attribute children numeric

改為

@attribute children {0,1,2,3}

就可以了。

在“Explorer”中重新打開“bank-data.arff”,看看選中“children”屬性後,區域6那裡顯示的“Type”是不是變成“Nominal”了?

“age”和“income”的離散化我們需要借助WEKA中名為“Discretize”的Filter來完成。在區域2中點“Choose”,出現一棵“Filter樹”,逐級找到“weka.filters.unsupervised.attribute.Discretize”,點選。若無法關閉這個樹,在樹之外的地方點選“Explorer”面闆即可。

現在“Choose”旁邊的文本框應該顯示“Discretize -B 10 -M -0.1 -R first-last”。 點選這個文本框會彈出新視窗以修改離散化的參數。

我們不打算對所有的屬性離散化,隻是針對對第1個和第4個屬性(見區域5屬性名左邊的數字),故把attributeIndices右邊改成“1,4”。計劃把這兩個屬性都分成3段,于是把“bins”改成“3”。其它框裡不用更改,關于它們的意思可以點“More”檢視。點“OK”回到“Explorer”,可以看到“age”和“income”已經被離散化成分類型的屬性。若想放棄離散化可以點區域2的“Undo”。

如果對“"(-inf-34.333333]"”這樣晦澀的辨別不滿,我們可以用UltraEdit打開儲存後的ARFF檔案,把所有的“'\'(-inf-34.333333]\''”替換成“0_34”。其它辨別做類似地手動替換。

經過上述操作得到的資料集我們儲存為bank-data-final.arff。

4. 關聯規則(購物籃分析)

注意:目前,WEKA的關聯規則分析功能僅能用來作示範,不适合用來挖掘大型資料集。

我們打算對前面的“bank-data”資料作關聯規則的分析。用“Explorer”打開“bank-data-final.arff”後,切換到“Associate”頁籤。預設關聯規則分析是用Apriori算法,我們就用這個算法,但是點“Choose”右邊的文本框修改預設的參數,彈出的視窗中點“More”可以看到各參數的說明。

背景知識 

首先我們來溫習一下Apriori的有關知識。對于一條關聯規則L->R,我們常用支援度(Support)和置信度(Confidence)來衡量它的重要性。規則的支援度是用來估計在一個購物籃中同時觀察到L和R的機率P(L,R),而規則的置信度是估計購物欄中出現了L時也出會現R的條件機率P(R|L)。關聯規則的目标一般是産生支援度和置信度都較高的規則。

有幾個類似的度量代替置信度來衡量規則的關聯程度,它們分别是

Lift(提升度?): P(L,R)/(P(L)P(R)) 

Lift=1時表示L和R獨立。這個數越大,越表明L和R存在在一個購物籃中不是偶然現象。

Leverage(不知道怎麼翻譯):P(L,R)-P(L)P(R) 

它和Lift的含義差不多。Leverage=0時L和R獨立,Leverage越大L和R的關系越密切。

Conviction(更不知道譯了):P(L)P(!R)/P(L,!R) (!R表示R沒有發生)

Conviction也是用來衡量L和R的獨立性。從它和lift的關系(對R取反,代入Lift公式後求倒數)可以看出,我們也希望這個值越大越好。

值得注意的是,用Lift和Leverage作标準時,L和R是對稱的,Confidence和Conviction則不然。

參數設定

現在我們計劃挖掘出支援度在10%到100%之間,并且lift值超過1.5且lift值排在前100位的那些關聯規則。我們把“lowerBoundMinSupport”和“upperBoundMinSupport”分别設為0.1和1,“metricType”設為lift,“minMetric”設為1.5,“numRules”設為100。其他選項保持預設即可。“OK” 之後在“Explorer”中點選“Start”開始運作算法,在右邊視窗顯示資料集摘要和挖掘結果。

下面是挖掘出來的lift排前5的規則。

Best rules found:

1. age=52_max save_act=YES current_act=YES 113 ==> income=43759_max 61 conf:(0.54) < lift:(4.05)> lev:(0.08) [45] conv:(1.85)

  2. income=43759_max 80 ==> age=52_max save_act=YES current_act=YES 61 conf:(0.76) < lift:(4.05)> lev:(0.08) [45] conv:(3.25)

  3. income=43759_max current_act=YES 63 ==> age=52_max save_act=YES 61 conf:(0.97) < lift:(3.85)> lev:(0.08) [45] conv:(15.72)

  4. age=52_max save_act=YES 151 ==> income=43759_max current_act=YES 61 conf:(0.4) < lift:(3.85)> lev:(0.08) [45] conv:(1.49)

  5. age=52_max save_act=YES 151 ==> income=43759_max 76 conf:(0.5) < lift:(3.77)> lev:(0.09) [55] conv:(1.72)

對于挖掘出的每條規則,WEKA列出了它們關聯程度的四項名額。

指令行方式

我們也可以利用指令行來完成挖掘任務,在“Simlpe CLI”子產品中輸入如下格式的指令:

java weka.associations.Apriori options -t directory-path\bank-data-final.arff 

即可完成Apriori算法。注意,“-t”參數後的檔案路徑中不能含有空格。

在前面我們使用的option為

-N 100 -T 1 -C 1.5 -D 0.05 -U 1.0 -M 0.1 -S -1.0 指令行中使用這些參數得到的結果和前面利用GUI得到的一樣。

我們還可以加上“- I”參數,得到不同項數的頻繁項集。我用的指令如下:

java weka.associations.Apriori -N 100 -T 1 -C 1.5 -D 0.05 -U 1.0 -M 0.1 -S -1.0 -I -t d:\weka\bank-data-final.arff 

挖掘結果在上方顯示,應是這個檔案的樣子。

5. 分類與回歸 

背景知識 

WEKA把分類(Classification)和回歸(Regression)都放在“Classify”頁籤中,這是有原因的。 

在這兩個任務中,都有一個目标屬性(輸出變量)。我們希望根據一個樣本(WEKA中稱作執行個體)的一組特征(輸入變量),對目标進行預測。為了實作這一目的,我們需要有一個訓練資料集,這個資料集中每個執行個體的輸入和輸出都是已知的。觀察訓練集中的執行個體,可以建立起預測的模型。有了這個模型,我們就可以新的輸出未知的執行個體進行預測了。衡量模型的好壞就在于預測的準确程度。 

在WEKA中,待預測的目标(輸出)被稱作Class屬性,這應該是來自分類任務的“類”。一般的,若Class屬性是分類型時我們的任務才叫分類,Class屬性是數值型時我們的任務叫回歸。 

選擇算法 

這一節中,我們使用C4.5決策樹算法對bank-data建立起分類模型。 

我們來看原來的“bank-data.csv”檔案。“ID”屬性肯定是不需要的。由于C4.5算法可以處理數值型的屬性,我們不用像前面用關聯規則那樣把每個變量都離散化成分類型。盡管如此,我們還是把“Children”屬性轉換成分類型的兩個值“YES”和“NO”。另外,我們的訓練集僅取原來資料集執行個體的一半;而從另外一半中抽出若幹條作為待預測的執行個體,它們的“pep”屬性都設為缺失值。經過了這些處理的訓練集資料在這裡下載下傳;待預測集資料在這裡下載下傳。 

我們用“Explorer”打開訓練集“bank.arff”,觀察一下它是不是按照前面的要求處理好了。切換到“Classify”頁籤,點選“Choose”按鈕後可以看到很多分類或者回歸的算法分門别類的列在一個樹型框裡。3.5版的WEKA中,樹型框下方有一個“Filter...”按鈕,點選可以根據資料集的特性過濾掉不合适的算法。我們資料集的輸入屬性中有“Binary”型(即隻有兩個類的分類型)和數值型的屬性,而Class變量是“Binary”的;于是我們勾選“Binary attributes”“Numeric attributes”和“Binary class”。點“OK”後回到樹形圖,可以發現一些算法名稱變紅了,說明它們不能用。選擇“trees”下的“J48”,這就是我們需要的C4.5算法,還好它沒有變紅。 

點選“Choose”右邊的文本框,彈出新視窗為該算法設定各種參數。點“More”檢視參數說明,點“Capabilities”是檢視算法适用範圍。這裡我們把參數保持預設。 

現在來看左中的“Test Option”。我們沒有專門設定檢驗資料集,為了保證生成的模型的準确性而不至于出現過拟合(overfitting)的現象,我們有必要采用10折交叉驗證(10-fold cross validation)來選擇和評估模型。若不明白交叉驗證的含義可以Google一下。 

模組化結果 

OK,選上“Cross-validation”并在“Folds”框填上“10”。點“Start”按鈕開始讓算法生成決策樹模型。很快,用文本表示的一棵決策樹,以及對這個決策樹的誤差分析等等結果出現在右邊的“Classifier output”中。同時左下的“Results list”出現了一個項目顯示剛才的時間和算法名稱。如果換一個模型或者換個參數,重新“Start”一次,則“Results list”又會多出一項。 

我們看到“J48”算法交叉驗證的結果之一為 

Correctly Classified Instances 206 68.6667 % 

也就是說這個模型的準确度隻有69%左右。也許我們需要對原屬性進行處理,或者修改算法的參數來提高準确度。但這裡我們不管它,繼續用這個模型。 

右鍵點選“Results list”剛才出現的那一項,彈出菜單中選擇“Visualize tree”,新視窗裡可以看到圖形模式的決策樹。建議把這個新視窗最大化,然後點右鍵,選“Fit to screen”,可以把這個樹看清楚些。看完後截圖或者關掉:P 

這裡我們解釋一下“Confusion Matrix”的含義。 

=== Confusion Matrix ===

  a b <-- classified as

  74 64 | a = YES

  30 132 | b = NO 

這個矩陣是說,原本“pep”是“YES”的執行個體,有74個被正确的預測為“YES”,有64個錯誤的預測成了“NO”;原本“pep”是“NO”的執行個體,有30個被錯誤的預測為“YES”,有132個正确的預測成了“NO”。74+64+30+132 = 300是執行個體總數,而(74+132)/300 = 0.68667正好是正确分類的執行個體所占比例。這個矩陣對角線上的數字越大,說明預測得越好。 

模型應用 

現在我們要用生成的模型對那些待預測的資料集進行預測了。注意待預測資料集和訓練用資料集各個屬性的設定必須是一緻的。即使你沒有待預測資料集的Class屬性的值,你也要添加這個屬性,可以将該屬性在各執行個體上的值均設成缺失值。 

在“Test Opion”中選擇“Supplied test set”,并且“Set”成你要應用模型的資料集,這裡是“bank-new.arff”檔案。 

現在,右鍵點選“Result list”中剛産生的那一項,選擇“Re-evaluate model on current test set”。右邊顯示結果的區域中會增加一些内容,告訴你該模型應用在這個資料集上表現将如何。如果你的Class屬性都是些缺失值,那這些内容是無意義的,我們關注的是模型在新資料集上的預測值。 

現在點選右鍵菜單中的“Visualize classifier errors”,将彈出一個新視窗顯示一些有關預測誤差的散點圖。點選這個新視窗中的“Save”按鈕,儲存一個Arff檔案。打開這個檔案可以看到在倒數第二個位置多了一個屬性(predictedpep),這個屬性上的值就是模型對每個執行個體的預測值。 

使用指令行(推薦) 

雖然使用圖形界面檢視結果和設定參數很友善,但是最直接最靈活的模組化及應用的辦法仍是使用指令行。 

打開“Simple CLI”子產品,像上面那樣使用“J48”算法的指令格式為: 

java weka.classifiers.trees.J48 -C 0.25 -M 2 -t directory-path\bank.arff -d directory-path \bank.model 

其中參數“ -C 0.25”和“-M 2”是和圖形界面中所設的一樣的。“-t ”後面跟着的是訓練資料集的完整路徑(包括目錄和檔案名),“-d ”後面跟着的是儲存模型的完整路徑。注意!這裡我們可以把模型儲存下來。 

輸入上述指令後,所得到樹模型和誤差分析會在“Simple CLI”上方顯示,可以複制下來儲存在文本檔案裡。誤差是把模型應用到訓練集上給出的。 

把這個模型應用到“bank-new.arff”所用指令的格式為: 

java weka.classifiers.trees.J48 -p 9 -l directory-path\bank.model -T directory-path \bank-new.arff 

其中“-p 9”說的是模型中的待預測屬性的真實值存在第9個(也就是“pep”)屬性中,這裡它們全部未知是以全部用缺失值代替。“-l”後面是模型的完整路徑。“-T”後面是待預測資料集的完整路徑。 

輸入上述指令後,在“Simple CLI”上方會有這樣一些結果: 

0 YES 0.75 ?

1 NO 0.7272727272727273 ?

2 YES 0.95 ?

3 YES 0.8813559322033898 ?

4 NO 0.8421052631578947 ?

... 

這裡的第一列就是我們提到過的“Instance_number”,第二列就是剛才的“predictedpep”,第四列則是“bank-new.arff”中原來的“pep”值(這裡都是“?”缺失值)。第三列對預測結果的置信度(confidence )。比如說對于執行個體0,我們有75%的把握說它的“pep”的值會是“YES”,對執行個體4我們有84.2%的把握說它的“pep”值會是“NO”。 

我們看到,使用指令行至少有兩個好處。一個是可以把模型儲存下來,這樣有新的待預測資料出現時,不用每次重建立模,直接應用儲存好的模型即可。另一個是對預測結果給出了置信度,我們可以有選擇的采納預測結果,例如,隻考慮那些置信度在85%以上的結果。 

----整理自http://maya.cs.depaul.edu/~classes/ect584/WEKA/classify.html 

6. 聚類分析 

原理與實作 

聚類分析中的“類”(cluster)和前面分類的“類”(class)是不同的,對cluster更加準确的翻譯應該是“簇”。聚類的任務是把所有的執行個體配置設定到若幹的簇,使得同一個簇的執行個體聚集在一個簇中心的周圍,它們之間距離的比較近;而不同簇執行個體之間的距離比較遠。對于由數值型屬性刻畫的執行個體來說,這個距離通常指歐氏距離。 

現在我們對前面的“bank data”作聚類分析,使用最常見的K均值(K-means)算法。下面我們簡單描述一下K均值聚類的步驟。 

K均值算法首先随機的指定K個簇中心。然後:1)将每個執行個體配置設定到距它最近的簇中心,得到K個簇;2)計分别計算各簇中所有執行個體的均值,把它們作為各簇新的簇中心。重複1)和2),直到K個簇中心的位置都固定,簇的配置設定也固定。 

上述K均值算法隻能處理數值型的屬性,遇到分類型的屬性時要把它變為若幹個取值0和1的屬性。WEKA将自動實施這個分類型到數值型的變換,而且WEKA會自動對數值型的資料作标準化。是以,對于原始資料“bank-data.csv”,我們所做的預處理隻是删去屬性“id”,儲存為ARFF格式後,修改屬性“children”為分類型。這樣得到的資料檔案為“bank.arff”,含600條執行個體。 

用“Explorer”打開剛才得到的“bank.arff”,并切換到“Cluster”。點“Choose”按鈕選擇“SimpleKMeans”,這是WEKA中實作K均值的算法。點選旁邊的文本框,修改“numClusters”為6,說明我們希望把這600條執行個體聚成6類,即K=6。下面的“seed”參數是要設定一個随機種子,依此産生一個随機數,用來得到K均值算法中第一次給出的K個簇中心的位置。我們不妨暫時讓它就為10。 

選中“Cluster Mode”的“Use training set”,點選“Start”按鈕,觀察右邊“Clusterer output”給出的聚類結果。也可以在左下角“Result list”中這次産生的結果上點右鍵,“View in separate window”在新視窗中浏覽結果。 

結果解釋 

首先我們注意到結果中有這麼一行: 

Within cluster sum of squared errors: 1604.7416693522332 

這是評價聚類好壞的标準,數值越小說明同一簇執行個體之間的距離越小。也許你得到的數值會不一樣;實際上如果把“seed”參數改一下,得到的這個數值就可能會不一樣。我們應該多嘗試幾個seed,并采納這個數值最小的那個結果。例如我讓“seed”取100,就得到 

Within cluster sum of squared errors: 1555.6241507629218 

我該取後面這個。當然再嘗試幾個seed,這個數值可能會更小。 

接下來“Cluster centroids:”之後列出了各個簇中心的位置。對于數值型的屬性,簇中心就是它的均值(Mean);分類型的就是它的衆數(Mode), 也就是說這個屬性上取值為衆數值的執行個體最多。對于數值型的屬性,還給出了它在各個簇裡的标準差(Std Devs)。 

最後的“Clustered Instances”是各個簇中執行個體的數目及百分比。 

為了觀察可視化的聚類結果,我們在左下方“Result list”列出的結果上右擊,點“Visualize cluster assignments”。彈出的視窗給出了各執行個體的散點圖。最上方的兩個框是選擇橫坐标和縱坐标,第二行的“color”是散點圖着色的依據,預設是根據不同的簇“Cluster”給執行個體标上不同的顔色。 

可以在這裡點“Save”把聚類結果儲存成ARFF檔案。在這個新的ARFF檔案中,“instance_number”屬性表示某執行個體的編号,“Cluster”屬性表示聚類算法給出的該執行個體所在的簇。 

---整理自 http://maya.cs.depaul.edu/~classes/ect584/WEKA/k-means.html

繼續閱讀