Weka中數據挖掘與機器學習系列之基本概念(三)


 


數據挖掘和機器學習

  數據挖掘和機器學習這兩項技術的關系非常密切。機器學習方法構成數據挖掘的核心,絕大多數數據挖掘技術都來自機器學習領域,數據挖掘又向機器學習提出新的要求和任務。

  數據挖掘就是在數據中尋找模式的過程。這個尋找過程必須是自動的或半自動的,並且數據總量應該是具有相當大的規模,從中發現的模式必須有意義並能產生一定的效益。通常,數據挖掘需要分析數據庫中的數據來解決問題,如客戶忠實度分析、市場購物籃分析等。

  機器學習分為兩種主要類型。第一種稱為有監督學習,或稱為預測學習,其目標是在給定一系列輸入輸出實例構成的數據集的條件下,學習輸入x到輸出y的映射關系。這里的數據集被稱為訓練集,實例的個數稱為訓練樣本數。第二種機器學習類型稱為無監督學習,或稱為描述學習,在給定一系列僅由輸入實例構成的數據集的條件下,其目標是發現數據中的有趣模式。無監督學習有時候也稱為知識發現,這類問題並沒有明確定義,因為我們不知道需要尋找什么樣的模式,也沒有明顯的誤差度量可供使用。而對於給定的x,有監督學習可以對所觀察的值和預測的值進行比較。

 

 

 

 

 

數據和數據集

  根據應用的不同,數據挖掘對象可以是各種各樣的數據,這些數據可以以各種形式存儲,如數據庫、數據倉庫、數據文件、流數據、多媒體、網頁,等等。即可集中存儲在數據存儲庫中,也可以分布在世界各地的網絡服務器上。

  通常將數據集視為待處理的數據對象的集合。由於歷史原因,數據對象有多個別名,如記錄、點、行、向量、案例、樣本、觀測等。數據對象也是對象,因此,可以用刻畫對象基本特征屬性來進行描述。屬性也有多個別名,如變量、特征、字段、維、列,等等。

  數據集可以類似於一個二維電子表格或數據庫表。在最簡單的情形下,每個訓練輸入Xi也是一個N維的數值向量,表示特定事物的一些特征,如人的身高、體重。這些特征也可以稱為屬性,有時Xi也可以是復雜結構的對象,如圖像、電子郵件、時間序列、語句等。

  屬性可以分為四種類型:標稱、序數、區間和比率,其中,標稱屬性的值僅僅是不同的名稱,即,標稱值提供區分對象的足夠信息,如性別、衣服顏色、天氣等;序數屬性的值可以提供給確定對象的順序的足夠信息,如成績等級、職稱、學生等;區間屬性的值之間的差是有意義的,即存在測量單位,如溫度、日歷日期等;比率屬性的值之間的差和比值都是有意義的,如絕對溫度、年齡、長度、成績分數等。

  標稱屬性和序數屬性統稱為分類的或定性的屬性,它們的取值為集合,即使使用數值來表示,也不具備的大部分性質,因此,應該像對待符號一樣對待;區間屬性和比率屬性統稱為定量的或數值的屬性,定量屬性采用數值來表示,具備數的大部分性質,可以使用整數值或連續值來表示。

  大部分數據集都以數據庫表和數據文件的形式存在,Weka支持讀取數據庫表和多種格式的數據文件,其中,使用最多的是一種稱為ARFF格式的文件。

 

 

 

 

ARFF格式

  ARFF是一種Weka專用的文件格式,即Attribute-Relation File Format(屬性-關系文件格式)。該文件是ASCII文本文件,描述共享一組屬性結構的實例列表,由獨立且無序的實例組成,是Weka表示數據集的標准方法,ARFF不涉及實例之間的關系。

  在Weka安裝目錄下的data子目錄中,可以找到名稱為weather.numeric.arff的天氣數據文件。如下圖所示。

 

 

   數據集是實例的集合,每個實例包含一定的屬性。

   屬性的數據類型包括如下幾類:

   標稱型(nominal)只能取預定義值列表中的一個;

   數字型(numeric),只能是實數或整數;  

   字符串(string),這是一個由雙引號引用的任意長度的字符列表;

    另外還有日期型(date)和關系型(relational)。

    ARFF文件就是實例類型的外部表示,其中包括一個標題頭(header),以描述屬性的類型,還包含一個用逗號分隔的列表所表示的數據部分(data)。

 

 

 

 

 

 

weather.nominal.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

 

  上述代碼中,以百分號“%”開始的行為稱為注釋行。與計算機編程語言類似,最前面的注釋行應該寫明數據集的來源、用途和含義。

@relation 一行定義內部數據集的名稱-weather,名稱應該簡潔明了,盡可能容易理解。Relation也成為關系。

@attribute outlook{sunny,overcast,rainy}行定義名稱為outlook的標稱屬性,有三個取值:sunny、overcast和rainy。

@attribute temperature numeric行定義

@attribute humidity numeric

@attribute temperature real定義名稱為temperature的數值型屬性,

@attribute humidity real定義名稱為humidity的數值型屬性。這兩個屬性都是實數型。

@attribute windy{TRUE,FALSE}行定義為windy兩個標稱屬性。為TRUE和FALSE。

@attribute play{yes,no}行定義為play兩個標稱屬性。為yes和no。要注意這個屬性缺省為用於預測的類別變量。

本例中,類別變量為標稱型屬性play,它只能取兩個值之一,使得天氣問題成為二元的分類問題。

@data標志后的各行為構成數據集。每行為一個實例樣本,由采用逗號分隔的值組成,順序與由@attribute所定義屬性的順序一致

 

 

 

 

 

 

預處理

  數據挖掘是在大量的、潛在有用的數據中挖掘出有用模式的過程。因此,源數據的質量直接影響到挖掘的效果、高質量的數據是進行有效挖掘的前。但是,由於數據挖掘所使用的數據往往不是專門為挖掘准備的,期望數據質量完美並不現實,人的錯誤、測量設備的限制以及數據收集過程的漏洞都可能導致一些問題,如缺失值和離群值。

  由於無法在數據的源頭控制質量,數據挖掘只能通過以下兩個方面設法避免數據質量問題:

  • 數據質量問題的檢測與糾正

  • 使用能容忍質量數據的算法。

  第一種方式在數據挖掘前檢測並糾正一些質量問題,這個過程稱為數據預處理;第二種方式需要提高算法的健壯性。

  數據預處理是數據挖掘的重要步驟,數據挖掘者的大部分精力都要花在預處理階段。Weka專門提供若干過濾器進行預處理,還在探索者界面中提供選擇屬性標簽頁專門處理屬性的自動選擇問題。數據預處理設的策略和技術非常廣泛,主要包括如下技術
  1)聚集
  聚集(Aggregation)就是將兩個或者多個對象合並為單個對象。一般來說,定量數據通常通過求和或平均值的方式進行聚集,定性數據通常通過匯總進行聚集。聚集通過數據規約來減少數據量,所導致的較小數據集只需要較少內存和處理時間的開銷,因此,可以使用開銷更大的數據挖掘算法。另外,聚集使用高層數據視圖,起到了范圍或度量轉換的作用。

  2)抽樣

  如果處理全部數據的開銷太大,數據預處理可以使用抽樣,只選擇數據對象的子集進行分析。使用抽樣可以壓縮數據量,因此,能夠使用效果好但開銷較大的數據挖掘算法。由於抽樣是一個統計過程,好的抽樣方案就是確保以很高的概率得到有代表性的樣本,即:樣本近似地具有原數據相同的性質。

  抽樣方式有多種,最簡單的抽樣是選取每一個數據作為樣本的概率都相同,這稱為簡單隨機抽樣,又分為有放回抽樣和無放回抽樣兩種形式,前者是從N個數據中以概率1/N分別隨機抽樣取出n個數據行,構成樣本子集;后者與又放回抽樣的過程相似,但每次都要刪除原數據集中已經抽取出來的數據行。顯然,有防護抽樣得打的樣本子集有可能重復抽到相同的數據行。

  當整個數據集由差異較大的數據行構成時,簡單隨機抽樣可能無法抽取到不太頻繁出現的數據行,這會導致得到的樣本不具代表性。分層抽樣(Stratified Sampling)盡量利用事先掌握的信息,充分考慮保持與樣本結構和總體結構的一致性以提高樣本的代表性。其步驟是,先將數據集按某種特征分為若干不相交的層,然后再從每一層中進行簡單隨機抽樣,從而得到具有代表性的抽樣數據子集。

  3)維度歸約

  維度是指數據集中屬性的數目。維度歸約(Dimension Reduction)是指創新建屬性,通過數據編碼或數據變換,將一些舊屬性合並在一起以降低數據集的維度。

  維度歸約可以刪除不相關的屬性並降低噪聲,維度降低會使許多數據挖掘的算法變得更好,還能消除了維災難帶來了負面影響。維災難是指,隨着維度的增加,數據在它所占的空間越來越稀疏,對於分類問題,這意味着可能沒有足夠數據對象來創建模型;對於聚類問題,點之間的密度和距離的定義失去意義。因此,對於高維數據,許多分類和聚類等學習算法的效果都不理想。維度歸約使模型的屬性更少,因而可以產生更容易理解的模型。
  4)屬性選擇
  除維度歸約外,降低維度的另一種方法是僅只使用屬性的一個子集。表面看來似乎這種方法更能丟失信息,但很多情況下,數據集存在冗余或不相關的屬性。其中,冗余屬性是指某個屬性包含了其他屬性中的部分或全部信息,不相關屬性是指對於手頭數據挖掘任務幾乎完全沒有用處的信息。屬性選擇是指從數據集中選擇最具代表性的屬性子集,刪除冗余或不相關的屬性,從而提高數據處理的效率,使模型更容易理解。

  最簡單的屬性選擇方法是使用常識或領域知識,以消除一些不相關或冗余屬性,但是,選擇最佳屬性子集通常需要系統的方法。理想屬性選擇方法是,將全部可能的屬性子集作為數據挖掘學習算法的輸入,然后選取能產生最好結果的子集。這種方法反映了對最終使用的數據挖掘算法的目的和偏愛。但是,由於n個屬性子集的數量多達2^n個,大部分情況下行不通。因此,需要考慮三種標准屬性選擇方法:嵌入、過濾和包裝。

  嵌入方法(Embedded Approach)將屬性選擇作為數據挖掘算法的一部分。在挖掘算法運行期間,算法本身決定使用那些屬性以及忽略那些屬性。決策樹算法通常使用這種方法。

  過濾方法(Filter Approach)在運行數據挖掘算法之前,使用獨立於數據挖掘任務的方法進行屬性選擇,即:先過濾數據集產生一個屬性子集。

  包裝方法(Wrapper Approach)將學習算法的結果作為評價准則的一部分,使用類似與前文介紹的理想算法,但通常無法枚舉出全部可能的子集以找出最佳屬性子集。

  根據屬性選擇過程是否需要使用類別信息,屬性選擇可以分為有監督屬性選擇和無監督屬性選擇。前者通過度量類別信息和屬性之間的相互關系來確定屬性子集,后者不使用類別信息,使用聚類方法評估屬性貢獻度,來確定屬性子集。

  5)屬性創建
  通過對數據集中舊的屬性進行處理,創建新的數據集,這樣能更有效的獲取重要的信息。由於通常新數據集的維度比原數據集少,因此,可以獲得維度歸約帶來的好處。屬性創建有三種方法:屬性提取、映射數據到新空間和屬性構造。

  屬性提取是指由原始數據創建新的屬性。例如,對照片數據進行處理,提取一些較高層次的特征,諸如與人臉高度相關的邊和區域等,就可以使用更多的分類技術。

  映射數據到新空間,是指使用一種完全不同的視角挖掘數據可能揭示重要而有趣的特征,諸如與人臉高度相關的邊和區域等,就可以使用更多的分類技術。

  當原始數據集的屬性含有必要信息,但其形式不適合數據挖掘算法的時候,可以使用屬性構造,將一個或多個原來的屬性構造出新的屬性。

  6)離散化和二元化

  有的數據挖掘算法,尤其是某些分類算法,要求數據是分類屬性的形式。發現關聯模式的算法要求數據是二元屬性的形式。因此,需要進行屬性變換,將連續屬性轉換為份額里屬性或離散化(Discretization),將連續和離散屬性轉換為一個或多個二元屬性稱為二元化(Binarization)。

  連續屬性離散化為分類屬性分為兩個子任務:決定需要多少個分類值,以及如何確定將連續屬性映射到這些分類值中。因此,離散化問題就是決定選擇多少個分割點,以及確定分割點的位置。利用少數分類值標簽替換連續屬性的值,從而減少和簡化原來的數據。

  根據是否使用類別信息,可以將離散化技術分為兩類:使用類別信息的稱為有監督的離散化,反之稱為無監督的離散化。

  等寬和等頻離散化是兩種常用的無監督的離散化方法。等寬離散化將屬性的值域划分為相同寬度的區間,區間的數目由用戶指定。這種方式常常會造成實例分布不均勻。等頻離散化也稱為等深離散化,它試圖將相同數量的對象放進每個區間,區間的數目由用戶指定。

  7)變量變換

  變量變換也稱為屬性變換,用於變量的所有值的變換。
  簡單函數變換是使用一個簡單數學函數分別作用於每一個值。在統計雪中,使用平方根、對數變換和倒數變換等變量變換常用語將不具有高斯分布的數據變換為具有高斯分布的數據。變量的標准化是使整個值的集合具有特定的性質。由於均值和標准差受離群點的影響較大,因此,常常修正上述變換。例如,用中位數替代均值,用絕對標准差替代標准差,等等。

 

 

 

 

 

 

分類與回歸

  分類(Classification)和回歸(Regression)是數據挖掘應用領域的重要技術。分類就是在已有數據基礎上學習出一個分類函數或構造出一個分類模型,這就是通常所說的分類器。該函數或模型能夠把數據集中的數據映射到某個給定的類別,從而用於數據預測。分類和回歸是預測的兩種形式,分類預測輸出目標是離散值,而回歸預測輸出目標是連續值。因此,在Weka中,分類和回歸都歸為同一個類問題,都是要構建能對目標進行預測的分類器

  在分類之前,先要將數據集划分為訓練集和測試集兩個部分。分類分為兩步,第一步分析訓練集的特點並構建分類模型,常用的分類模型有決策樹、貝葉斯分類器、K-最近鄰分類等;第二步使用構建好的分類模型對測試集進行分類,評估分類模型的分類准確度等指標,選擇滿意的分類模型。

  分類模型學習方法主要分為以下幾類。

  1) 決策樹分類

  決策樹分類方法對訓練集進行訓練,生成一棵二叉或多叉的決策樹。決策樹包含三種節點,根節點沒有入邊,但有零條或多條出邊;內部節點只有一條入邊和兩條或多條出邊;葉節點只有一條入邊,但沒有出邊。樹的葉節點代表某一個類別值,非葉節點代表某個一般屬性(非類別屬性)的一個測試,測試的輸出構成該非葉子節點的多個分支。從根節點到葉節點的一條路徑形成一條分類規則,一棵決策樹能夠方便地轉化為若干分類規則,挖掘者可以根據分類規則直觀地對未知類別的樣本進行預測。具體方法是,從樹的根節點開始,將測試條件用於檢驗樣本,根據測試結果選擇適當的分支,沿着該分支要么到達另一個內部節點,再次使用新的測試規則;要么到達葉節點,結果是將葉節點的類別標號賦值給檢驗樣本。

  決策樹歸納的學習算法必須解決以下兩個問題。

  第一,如何分裂訓練樣本集?樹在增長過程中的每個遞歸步必須選擇一個屬性作為測試條件,將樣本集划分為更小的子集。為了實現該步,算法必須提供為不同類型的屬性指定測試條件的方法,並且提供評估每種測試條件的客觀度量。

  第二,如何停止分裂過程?需要有終止決策樹生長過程的結束條件。可能的策略是一直分裂,直到所有的樣本都屬於同一個類別,或者所有樣本的屬性值都相同。也可以使用其他策略提前終止樹的生長過程。

  不同決策樹采用的技術不同,已經有很多成熟而有效的決策樹學習算法,如ID3、C4.5、CART、Random Forest等。具體算法詳見后文。

  2) 貝葉斯分類

  貝葉斯分類方法有一個明確的基本概率模型,用以給出某個樣本屬於某個類別標簽的概率。貝葉斯分類方法有兩種主要實現:朴素貝葉斯分類器和貝葉斯網絡。朴素貝葉斯分類器是基於貝葉斯定理的統計分類方法,它假定屬性之間相互獨立,但實際數據集中很難保證這一條件。朴素貝葉斯分類器分類速度快且分類准確度高,支持增量學習。貝葉斯網絡使用貝葉斯網絡描述屬性之間的依賴關系,Weka對貝葉斯網絡有很好的支持,詳見我后續的博客。

  3) k-最近鄰分類

  前面所介紹的決策樹分類器是一種積極學習器(Eager Learner),因為只要訓練數據可用,就開始學習從輸入屬性到類別標簽的映射模型。另一種策略則是推遲對訓練模型的建模,直到需要分類測試樣本時再進行,這種策略稱為消極學習器(Lazy Learner)。k-最近鄰分類算法是使用后一種策略,它是一種基於實例的學習算法,不需要事先使用訓練樣本構建分類器,而是直接使用訓練集對測試樣本進行分類,以確定類別標簽。

  k-最近鄰分類使用具體的訓練實例進行預測,不必維護從數據集中抽象出來的模型。這種基於實例的學習算法需要鄰近性度量來確定實例間的相似度或距離,還需要分類函數根據測試實例與其他實例的鄰近性返回測試實例的預測類別標簽。雖然消極學習方法不需要建立模型,然而,對測試實例進行分類的開銷很大,因為需要逐個計算測試樣本和訓練樣本之間的相似度。相反,積極學習方法通常花費大量的計算資源來建立模型,但一旦建立模型之后,對測試實例進行分類就會非常快。最近鄰分類器基於局部信息進行預測,而決策樹分類器則試圖找到一個適合整個輸入空間的全局模型。由於基於局部分類策略,k-最近鄰分類在k很小的時候對噪聲非常敏感。

  Weka實現的k-最近鄰分類算法稱為IBk,可以通過交叉驗證選擇適當的K值,還可以距離加權。

  4) 神經網絡分類

  神經網絡(Neural Network)是大量的簡單神經元按一定規則連接構成的網絡系統,能夠模擬人類大腦的結構和功能。它采用某種學習算法從訓練樣本中學習,將獲取的知識存儲在網絡模型的權值中,模擬人類大腦通過同一個脈沖反復刺激下改變神經元之間的神經鍵連接強度來進行學習。

  按照各神經元的不同連接方式,神經網絡分為前向網絡和反饋網絡。目前的神經網絡模型非常豐富,典型的模型有感知器模型、多層前向傳播模型、BP模型、Hopfield網絡、SOM自組織網絡,等等。

 

  分類模型學習方法如神經網絡分類,值采用某種學習方法從訓練樣本中學習,將獲取的知識存儲在網絡模型的權值中,模擬人類大腦通過一個脈沖反復刺激下改變神經元之間的神經鍵連接強度來進行學習。
  按照各神經元的不同連接方式,神經網絡分為前向網絡和反饋網絡。目前的神經網絡模型非常豐富,典型的模型有感知器模型、多層前向傳播模型、BP模型、Hopfield網絡、SOM自組織網絡等。Weka神經網絡使用多層感知器實現了BP神經網絡。

 

 

 

 

聚類分析

  聚類(Clustering)就是將數據集划分為由若干相似實例組成的簇(cluster)的過程,使得同一個簇中實例間的相似度最大化,不同簇的實例間的相似度最小化。也就是說,一個簇就是由彼此相似的一組對象所構成的集合,不同簇中的實例通常不相似或相似度很低。

  聚類分析是數據挖掘和機器學習中十分重要的技術,應用領域極為廣泛,如統計學、模式識別、生物學、空間數據庫技術、電子商務等。

  作為一種重要的數據挖掘技術,聚類是一種無監督的機器學習方法,主要依據樣本間相似性的度量標准將數據集自動划分為幾個簇,聚類中的簇不是預先定義的,而是根據實際數據的特征按照數據之間的相似性來定義的。聚類分析算法的輸入是一組樣本以及一個度量樣本間的相似度的標准,輸出是簇的集合。聚類分析的另一個副產品是對每個簇的綜合描述,這個結果對於進一步深入分析數據集的特性尤為重要。聚類方法適合用於討論樣本間的相互關聯,從而能初步評價其樣本結構。

  數據挖掘關心聚類算法的如下特性:處理不同類型屬性的能力、對大型數據集的可擴展性、處理高維數據的能力、發現任意形狀簇的能力、處理孤立點或“噪聲”數據的能力、對數據順序的不敏感性、對先驗知識和用戶自定義參數的依賴性、聚類結果的可解釋性和實用性、基於約束的聚類等。

  聚類分析方法主要有:划分的方法、層次的方法、基於密度的方法、基於網格的方法、基於模型的方法等。Weka實現的聚類算法主要有:K均值算法、EM算法和DBSCAN。

 

 

 

 

關聯分析

  典型有啤酒與尿布。這里不多贅述。

  Apriori算法,其核心是基於兩階段頻繁項集思想的遞推算法。尋找大項集(頻繁項集)的基本思想是:算法需要對數據集進行多步處理。第一步,簡單統計所有含一個元素項集出現的頻數,並找出那些不小於最小支持度的項集,即一維最大項集。從第二步開始循環處理直到再沒有最大項集生成。循環過程是:第K步中,根據第K-1步生成的(k-1)維最大項集產生K維候選項集,然后對數據庫進行搜索,得到候選項集的支持度,與最小支持度進行比較,從而找到K維最大項集。

  Weka實現了Apriori算法和另一個關聯分析的FP-Growth算法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM