數據挖掘和機器學習這兩項技術的關係很是密切。機器學習方法構成數據挖掘的核心,絕大多數數據挖掘技術都來自機器學習領域,數據挖掘又向機器學習提出新的要求和任務。算法
數據挖掘就是在數據中尋找模式的過程。這個尋找過程必須是自動的或半自動的,而且數據總量應該是具備至關大的規模,從中發現的模式必須有意義並能產生必定的效益。一般,數據挖掘須要分析數據庫中的數據來解決問題,如客戶忠實度分析、市場購物籃分析等。數據庫
機器學習分爲兩種主要類型。第一種稱爲有監督學習,或稱爲預測學習,其目標是在給定一系列輸入輸出實例構成的數據集的條件下,學習輸入x到輸出y的映射關係。這裏的數據集被稱爲訓練集,實例的個數稱爲訓練樣本數。第二種機器學習類型稱爲無監督學習,或稱爲描述學習,在給定一系列僅由輸入實例構成的數據集的條件下,其目標是發現數據中的有趣模式。無監督學習有時候也稱爲知識發現,這類問題並無明肯定義,由於咱們不知道須要尋找什麼樣的模式,也沒有明顯的偏差度量可供使用。而對於給定的x,有監督學習能夠對所觀察的值和預測的值進行比較。編程
根據應用的不一樣,數據挖掘對象能夠是各類各樣的數據,這些數據能夠以各類形式存儲,如數據庫、數據倉庫、數據文件、流數據、多媒體、網頁,等等。便可集中存儲在數據存儲庫中,也能夠分佈在世界各地的網絡服務器上。服務器
一般將數據集視爲待處理的數據對象的集合。因爲歷史緣由,數據對象有多個別名,如記錄、點、行、向量、案例、樣本、觀測等。數據對象也是對象,所以,能夠用刻畫對象基本特徵屬性來進行描述。屬性也有多個別名,如變量、特徵、字段、維、列,等等。網絡
數據集能夠相似於一個二維電子表格或數據庫表。在最簡單的情形下,每一個訓練輸入Xi也是一個N維的數值向量,表示特定事物的一些特徵,如人的身高、體重。這些特徵也能夠稱爲屬性,有時Xi也能夠是複雜結構的對象,如圖像、電子郵件、時間序列、語句等。app
屬性能夠分爲四種類型:標稱、序數、區間和比率,其中,標稱屬性的值僅僅是不一樣的名稱,即,標稱值提供區分對象的足夠信息,如性別、衣服顏色、天氣等;序數屬性的值能夠提供給肯定對象的順序的足夠信息,如成績等級、職稱、學生等;區間屬性的值之間的差是有意義的,即存在測量單位,如溫度、日曆日期等;比率屬性的值之間的差和比值都是有意義的,如絕對溫度、年齡、長度、成績分數等。dom
標稱屬性和序數屬性統稱爲分類的或定性的屬性,它們的取值爲集合,即便使用數值來表示,也不具有的大部分性質,所以,應該像對待符號同樣對待;區間屬性和比率屬性統稱爲定量的或數值的屬性,定量屬性採用數值來表示,具有數的大部分性質,可使用整數值或連續值來表示。機器學習
大部分數據集都以數據庫表和數據文件的形式存在,Weka支持讀取數據庫表和多種格式的數據文件,其中,使用最多的是一種稱爲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) 決策樹分類
決策樹分類方法對訓練集進行訓練,生成一棵二叉或多叉的決策樹。決策樹包含三種節點,根節點沒有入邊,但有零條或多條出邊;內部節點只有一條入邊和兩條或多條出邊;葉節點只有一條入邊,但沒有出邊。樹的葉節點表明某一個類別值,非葉節點表明某個通常屬性(非類別屬性)的一個測試,測試的輸出構成該非葉子節點的多個分支。從根節點到葉節點的一條路徑造成一條分類規則,一棵決策樹可以方便地轉化爲若干分類規則,挖掘者能夠根據分類規則直觀地對未知類別的樣本進行預測。具體方法是,從樹的根節點開始,將測試條件用於檢驗樣本,根據測試結果選擇適當的分支,沿着該分支要麼到達另外一個內部節點,再次使用新的測試規則;要麼到達葉節點,結果是將葉節點的類別標號賦值給檢驗樣本。
決策樹概括的學習算法必須解決如下兩個問題。
第一,如何分裂訓練樣本集?樹在增加過程當中的每一個遞歸步必須選擇一個屬性做爲測試條件,將樣本集劃分爲更小的子集。爲了實現該步,算法必須提供爲不一樣類型的屬性指定測試條件的方法,而且提供評估每種測試條件的客觀度量。
第二,如何中止分裂過程?須要有終止決策樹生長過程的結束條件。可能的策略是一直分裂,直到全部的樣本都屬於同一個類別,或者全部樣本的屬性值都相同。也可使用其餘策略提早終止樹的生長過程。
不一樣決策樹採用的技術不一樣,已經有不少成熟而有效的決策樹學習算法,如ID三、C4.五、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算法。