1. 程式人生 > >資料探勘演算法概念與經典演算法簡介

資料探勘演算法概念與經典演算法簡介

 一、資料探勘演算法概念   

        什麼是資料探勘?資料探勘一般是指從大量的資料中自動搜尋隱藏於其中的有著特殊關係性的資訊的過程。什麼是資料探勘演算法?資料探勘演算法是根據資料建立資料探勘模型的一組試探法和計算。 為了建立模型,演算法將首先分析您提供的資料,並查詢特定型別的模式和趨勢。資料探勘演算法主要分為以下型別:分類 (Classification); 估計(Estimation);預測(Prediction) ;相關性分組或關聯規則(Affinity grouping or association rules);聚類(Clustering);複雜資料型別挖掘(Text, Web ,圖形影象,視訊,音訊等)。

        分類:首先從資料中選出已經分好類的訓練集,在該訓練集上運用資料探勘分類的技術,建立分類模型,對於沒有分類的資料進行分類。

        估計:估計與分類類似,不同之處在於,分類描述的是離散型變數的輸出,而估值處理連續值的輸出;分類

的類別是確定數目的,估值的量是不確定的。

        預測:是通過分類或估值起作用的,也就是說,通過分類或估值得出模型,該模型用於對未知變數的預言。從這種意義上說,預言其實沒有必要分為一個單獨的類。預言其目的是對未來未知變數的預測,這種預測是需要時間來驗證的,即必須經過一定時間後,才知道預言準確性是多少。

       相關性分組或關聯規則:決定哪些事情將一起發生。

       聚類:聚類是對記錄分組,把相似的記錄在一個聚集裡。聚類和分類的區別是聚集不依賴於預先定義好的類,不需要訓練集。

 二、常用的資料探勘演算法介紹         

        下面介紹比較經典的資料探勘演算法。

1:C4.5

        C4.5就是一個決策樹演算法,它是決策樹(決策樹也就是做決策的節點間像一棵樹一樣的組織方式,其實是一個倒樹)核心演算法ID3的改進演算法,所以基本上了解了一半決策樹構造方法就能構造它。決策樹構造方法其實就是每次選擇一個好的特徵以及分裂點作為當前節點的分類條件。C4.5比ID3改進的地方時: ID3選擇屬性用的是子樹的資訊增益(這裡可以用很多方法來定義資訊,ID3使用的是熵(entropy)(熵是一種不純度度量準則)),也就是熵的變化值,而C4.5用的是
資訊增益率
。也就是多了個率嘛。一般來說率就是用來取平衡用的,就像方差起的作用差不多,比如有兩個跑步的人,一個起點是100m/s的人、其1s後為110m/s;另一個人起速是1m/s、其1s後為11m/s。如果僅算差值那麼兩個就是一樣的了;但如果使用速度增加率(加速度)來衡量,2個人差距就很大了。在這裡,其克服了用資訊增益選擇屬性時偏向選擇取值多的屬性的不足。在樹構造過程中進行剪枝,我在構造決策樹的時候好討厭那些掛著幾個元素的節點。對於這種節點,乾脆不考慮最好,不然很容易導致overfitting。對非離散資料都能處理,這個其實就是一個個式,看對於連續型的值在哪裡分裂好。也就是把連續性的資料轉化為離散的值進行處理。能夠對不完整資料進行處理,這個重要也重要,其實也沒那麼重要,缺失資料採用一些方法補上去就是了。

2:CART

        CART也是一種決策樹演算法!相對於上著有條件實現一個節點下面有多個子樹的多元分類,CART只是分類兩個子樹,這樣實現起來稍稍簡便些。所以說CART演算法生成的決策樹是結構簡潔的二叉樹。

3:KNN(K Nearest Neighbours)

        這個很簡單,就是看你周圍的K個人(樣本)中哪個類別的人佔的多,哪個多,那我就是多的那個。實現起來就是對每個訓練樣本都計算與其相似度,是Top-K個訓練樣本出來,看這K個樣本中哪個類別的多些,誰多跟誰。

4:Naive Bayes(樸素貝葉斯NB)

        NB認為各個特徵是獨立的,誰也不關誰的事。所以一個樣本(特徵值的集合,比如“資料結構”出現2次,“檔案”出現1次),可以通過對其所有出現特徵在給定類別的概率相乘。比如“資料結構”出現在類1的概率為0.5,“檔案”出現在類1的概率為0.3,則可認為其屬於類1的概率為0.5*0.5*0.3。

5:Support Vector Machine(支援向量機SVM)

        SVM就是想找一個分類得最”好”的分類線/分類面(最近的一些兩類樣本到這個”線”的距離最遠)。這個沒具體實現過,上次聽課,那位老師自稱自己實現了SVM,敬佩其鑽研精神。常用的工具包是LibSVM、SVMLight、MySVM。

6:EM(期望最大化)

        這個我認為就是假設資料時由幾個高斯分佈組成的,所以最後就是要求幾個高斯分佈的引數。通過先假設幾個值,然後通過反覆迭代,以期望得到最好的擬合

7:Apriori

        這個是做關聯規則用的。不知道為什麼,一提高關聯規則我就想到購物籃資料。這個沒實現過,不過也還要理解,它就是通過支援度和置信度兩個量來工作,不過對於Apriori,它通過頻繁項集的一些規律(頻繁項集的子集必定是頻繁項集等等啦)來減少計算複雜度

8:FP-Tree(Mining frequent patterns without candidate generation)

          FP-growth演算法(Frequent Pattern-growth)使用了一種緊縮的資料結構來儲存查詢頻繁項集所需要的全部資訊。採用演算法:將提供頻繁項集的資料庫壓縮到一棵FP-tree來保留項集關聯資訊,然後將壓縮後的資料庫分成一組條件資料庫(一種特殊型別的投影資料庫),每個條件資料庫關聯一個頻繁項集。

9:PageRank

         大名鼎鼎的PageRank大家應該都知道(Google靠此專利發家,其實也不能說發家啦!)。對於這個演算法我的理解就是:如果我指向你(網頁間的連線)則表示我承認你,則在計算你的重要性的時候可以加上我的一部分重要性(到底多少,要看我自己有多少和我共承認多少個人)。通過反覆這樣來,可以求的一個穩定的衡量各個人(網頁)重要性的值。不過這裡必須要做些限制(一個人的開始預設重要性都是1),不然那些值會越來越大越來越大。

10:HITS

         HITS也是一個連線分析演算法,它是由IBM首先提出的。在HITS,每個節點(網頁)都有一個重要度和權威度(Hubs and authorities,我也忘了具體的翻譯是什麼了)。通過反覆通過權威度來求重要度,通過重要度來求權威度得到最後的權威度和重要度。

11:K-Means

         K-Means是一種最經典也是使用最廣泛的聚類方法,時至今日任然有很多基於其的改進模型提出。K-Means的思想很簡單,對於一個聚類任務(你需要指明聚成幾個類,當然按照自然想法來說不應該需要指明類數,這個問題也是當前聚類任務的一個值得研究的課題),首先隨機選擇K個簇中心,然後反覆計算下面的過程直到所有簇中心不改變(簇集合不改變)為止:步驟1:對於每個物件,計算其與每個簇中心的相似度,把其歸入與其最相似的那個簇中。 步驟2:更新簇中心,新的簇中心通過計算所有屬於該簇的物件的平均值得到。 k-means 演算法的工作過程說明如下:首先從n個數據物件任意選擇k 個物件作為初始聚類中心;而對於所剩下其它物件,則根據它們與這些聚類中心的相似度(距離),分別將它們分配給與其最相似的(聚類中心所代表的)聚類;然後再計算每個所獲新聚類的聚類中心(該聚類中所有物件的均值);不斷重複這一過程直到標準測度函式開始收斂為止。一般都採用均方差作為標準測度函式. k個聚類具有以下特點:各聚類本身儘可能的緊湊,而各聚類之間儘可能的分開。

12:BIRCH

           BIRCH也是一種聚類演算法,其全稱是Balanced Iterative Reducing and Clustering using Hierarchies。BIRCH也是隻是看了理論沒具體實現過。是一個綜合的層次聚類特徵(Clustering Feature, CF)和聚類特徵樹(CF Tree)兩個概念,用於概括聚類描述。聚類特徵樹概括了聚類的有用資訊,並且佔用空間較元資料集合小得多,可以存放在記憶體中,從而可以提高演算法在大型資料集合上的聚類速度及可伸縮性。 BIRCH演算法包括以下兩個階段: 1)掃描資料庫,建立動態的一棵存放在記憶體的CF Tree。如果記憶體不夠,則增大閾值,在原樹基礎上構造一棵較小的樹。 2)對葉節點進一步利用一個全域性性的聚類演算法,改進聚類質量。 由於CF Tree的葉節點代表的聚類可能不是自然的聚類結果,原因是給定的閾值限制了簇的大小,並且資料的輸入順序也會影響到聚類結果。因此需要對葉節點進一步利用一個全域性性的聚類演算法,改進聚類質量。

13:AdaBoost

        AdaBoost做分類的一般知道,它是一種boosting方法。這個不能說是一種演算法,應該是一種方法,因為它可以建立在任何一種分類演算法上,可以是決策樹,NB,SVM等。 Adaboost是一種迭代演算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。其演算法本身是通過改變資料分佈來實現的,它根據每次訓練集之中每個樣本的分類是否正確,以及上次的總體分類的準確率,來確定每個樣本的權值。將修改過權值的新資料集送給下層分類器進行訓練,最後將每次訓練得到的分類器最後融合起來,作為最後的決策分類器。使用adaboost分類器可以排除一些不必要的訓練資料,並將關鍵放在關鍵的訓練資料上面。

14:GSP

         GSP,全稱為Generalized Sequential Pattern(廣義序貫模式),是一種序列挖掘演算法。對於序列挖掘沒有仔細看過,應該是基於關聯規則的吧!網上是這樣說的:GSP類似於Apriori演算法,採用冗餘候選模式的剪除策略和特殊的資料結構-----雜湊樹來實現候選模式的快速訪存。         GSP演算法描述:        1)掃描序列資料庫,得到長度為1的序列模式L1,作為初始的種子集。        2)根據長度為i 的種子集Li ,通過連線操作和修剪操作生成長度為i+1的候選序列模式Ci+1;然後掃描序列資料庫,計算每個候選序列模式的支援度,產生長度為i+1的序列模式Li+1,並將Li+1作為新的種子集。        3)重複第二步,直到沒有新的序列模式或新的候選序列模式產生為止。 產生候選序列模式主要分兩步: 連線階段:如果去掉序列模式s1的第一個專案與去掉序列模式s2的最後一個專案所得到的序列相同,則可以將s1與s2進行連線,即將s2的最後一個專案新增到s1中。 修切階段:若某候選序列模式的某個子序列不是序列模式,則此候選序列模式不可能是序列模式,將它從候選序列模式中刪除。 候選序列模式的支援度計算:對於給定的候選序列模式集合C,掃描序列資料庫,對於其中的每一條序列s,找出集合C中被s所包含的所有候選序列模式,並增加其支援度計數。

15:PrefixSpan

是一個類似Apriori的序列挖掘。         這些演算法中評出的經典十大演算法為:C4.5,K-Means,SVM,Apriori,EM,PageRank,AdaBoost,KNN,NB 和CART。後面的文章中,我會邊學習邊介紹這十種經典演算法的原理,每一個演算法用一篇文章進行介紹。