【转】主要空间数据挖掘方法
Source:?http://jerry429.bokee.com/2993629.html??????????????????????????????????????
張新長 馬林兵等,《地理信息系統數據庫》[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
轉載于:https://www.cnblogs.com/springMVC/archive/2011/10/07/2204750.html
總結
以上是生活随笔為你收集整理的【转】主要空间数据挖掘方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (二十):response 对象
- 下一篇: 源码网站推荐