大數據平台中用到的演算法模型
數據預處理:
現實的數據一般是不完整的、帶有隨機性的、游雜訊的、與不一致的臟數據,數據質量不高,無法直接進行數據挖掘,或者挖掘的效果差強人意。為了以後的處理更加方便以及模型具有更好的效果,往往在使用模型之前需要對數據進行預處理。數據預處理包括:數據清理、數據集成、數據變換、數據歸約。數據清理一般包括對數據紀錄的缺失屬性進行填充、對數據的雜訊進行光滑操作、識別並刪除數據中的異常或者離群點(在有些挖掘任務中則不需要處理,如欺詐行為識別)等。簡而言之,包括數據缺失值處理、數據標準化、異常數據清除、數據錯誤糾正、重複數據刪除等;數據集成是解決多個數據源可能帶來的數據不一致問題,通過相關技術(如 ID Mapping)將多個數據源中的數據結合併統一存儲,即建立數據倉庫;數據變換,即將數據的各個屬性通過平滑聚集、數據概化、數據規範化等方式將數據轉換成適用於數據挖掘的形式;數據歸約是指在數據挖掘中,往往數據量非常大,在少量數據上進行挖掘分析需要很長的時候,用來得到數據集的歸約表示,它小得多,但仍然近於保持原數據的完整性,並結果與歸約前的結果相同或者幾乎相同。
常用的數據挖掘與機器學習模型包括分類模型、回歸模型、聚類模型、預測模型、關聯挖掘模型等。它們分別解決不同的任務以及不同的數據處理方式,並且每種模型中有著眾多不同的演算法,每種演算法都適應不同的場景。分類模型:
分類是指,存在一些實例,我們不知道它所屬的離散類別,每個實例是一個特徵向量,並且類別空間已知,分類即將這些未標註類別的實例映射到所屬的類別上。分類模型是監督式學習模型,即分類需要使用一些已知類別的樣本集去學習一個模式,用學習得到的模型來標註那些未知類別的實例。在構建分類模型的時候,需要用到訓練集與測試集,訓練集用來對模型的參數進行訓練,而測試集則用來驗證訓練出來的模型的效果的好壞,即用來評價模型的好壞程度,常用的評價指標有準確率與召回率。針對不同的分類任務、不同的數據以及不同的適應場景,分類中有著不同的分類演算法。常見的分類方法包括:決策樹、貝葉斯、K近鄰、支持向量機、基於關聯規則、集成學習、人工神經網路。
1. 決策樹決策樹是進行分類與預測的常見方法之一,決策樹學習方法是從訓練集中每個樣本的屬性進行構建一棵屬性樹,它按照一定的規則選擇不同的屬性作為樹中的節點來構建屬性和類別之間的關係,常用的屬性選擇方法有信息增益、信息增益率以及基尼係數等。它採用自頂而下遞歸構建這顆屬性類別關係樹,樹的葉子節點便是每個類別,非葉子節點便是屬性,節點之間的連線便是節點屬性的不同取值範圍。決策樹構建後,便從決策樹根節點開始從上到下對需要進行類別標註的實例進行屬性值的比較,最後到達某個葉子節點,該葉子節點所對應的類別便是該實例的類別。常用的決策樹演算法有ID3、C4.5/C5.0、CART等。這些演算法的區別主要在於屬性選擇的策略、決策樹的結構(如決策樹中出現重複屬性)、是否採用剪枝以及剪枝的方法、是否處理大數據集(即演算法的複雜度,包括時間與空間複雜度)等。
2. 貝葉斯分類器貝葉斯分類演算法是基於概率論中的貝葉斯公式對實例進行分類的演算法,它使用貝葉斯公式計算實例特徵向量下每個類別的條件概率,選擇條件概率最大所對應的類別作為其類別。常見的貝葉斯分類演算法包括樸素貝葉斯、貝葉斯網路等,區別在於假設屬性之間是否條件獨立。樸素貝葉斯是假設屬性之間是條件獨立的,但是這種假設往往是不成立的。而貝葉斯網路是假設部分屬性之間是有關聯的,從而構建一個屬性有向網路。
3. K近鄰K近鄰演算法是基於實例的分類演算法。該演算法首先定義一個鄰居範圍,即設定鄰居的個數,然後採用投票的方式來決定自己所屬的類別,即多數戰勝少數的策略,自己的類別為鄰居中大部分所對應的類別。一般都是採用歐式距離,即選取歐式距離最近的K個已標註類別的樣本作為自己的鄰居,既可以採取鄰居平等投票的方式,也可以採取鄰居權值的方式進行投票,即不同的鄰居的意見有著不同的權重,一般距離越近的鄰居權重越大。該方法有個缺點就在於對每一個未知類別的實例都需要計算其與樣本空間中所有樣本的距離,因此複雜度過高,無法滿足那些實時性要求較高的分類場景。
4. 支持向量機
支持向量機(SVM)是一種統計機器學習分類演算法,它是建立在由Vapnik和Chervonenkis提出的統計學習理論的VC維理論和結構風險最小化原理的基礎上。結構化風險等於經驗風險加上置信風險,而經驗風險為分類器在給定訓練樣本上的誤差,置信風險為分類器在未知類別的實例集上的分類誤差。給定的訓練樣本的數量越多,泛化能力越有可能越好,則學習效果越有可能更好,此時置信風險越小。以前的學習演算法目標是降低經驗風險,要降低經驗風險,則需要增加模型對訓練樣本的擬合度,即提高分類模型的複雜度,此時會導致VC維很高,泛化能力就差,置信風險就高,所以結構風險也高。而SVM演算法則是以最小化結構風險為目標,這便是SVM的優勢。SVM是最大化分類幾何間隔來構建最優分類超平面來提高模型的泛化能力的。並且引入核函數來降低VC維的。支持向量機在對未知類別的實例進行分類時使用該實例落在超平面哪個區域所對應的類別作為該實例的類別的。
5. 基於關聯規則的分類器基於關聯規則的分類方法是基於關聯規則挖掘的,它類似於關聯規則挖掘,使用最小支持度與置信度來構建關聯規則集:Xs->C,只是不同於關聯規則挖掘,Xs是屬性值對集合,而C則是類別。它首先從訓練集中構建所有滿足最小支持度與最小置信度的關聯規則;然後使用這些關聯規則來進行分類,該類型常見的演算法有CBA、ADT等。
6. 集成學習在實際應用中,單一的分類演算法往往不能達到理想的分類效果,並且有時單一的分類器會導致過擬合。類似於三個臭皮匠率過一個諸葛亮的思想,使用多個分類器進行集成往往能夠達到更好的分類效果。常見的集成方式包括Stacking、Bagging以及Boosting,常見的集成演算法包括AdaBoost演算法、GBDT、隨機森林等。
7. 人工神經網路人工神經網路模擬人腦的工作原理,使用節點之間的連接來模擬人腦中的神經元連接來進行信息處理的機器學習模型。人工神經網路包括輸入層、隱含層、輸出層。這些層以此使用不同的權值進行連接,每個節點(神經元)都有一個激勵函數,用來模擬人腦神經元的抑制與興奮。信息從輸入層流通到輸出層,並且使用訓練集來學習網路中的權值,改善網路的效果。一般是使用梯度下降誤差反向傳播來對網路中的參數進行學習更新,以達到更多的誤差,直到滿足精度要求。在分類中,首先使用訓練集樣本對網路中的參數進行學習,然後從輸入層輸入未知實例的特徵向量,輸出層的輸出便是其類別。常見的人工神經網路有:BP神經網路、RBF神經網路、循環神經網路、隨機神經網路、競爭神經網路以及深度神經網路等。不同的神經網路用來處理不同的應用場景。
不同的分類演算法適應著不同的應用場景。在選擇分類演算法是,需要考慮它們的有缺點。比如特別關注分類準確度,那麼可以分別使用上述的分類演算法,然後使用交叉驗證選擇最好的分類演算法。首先,要考慮模型的訓練集有多大。如果訓練集較小,那麼高偏差/低方差的分類器(如貝葉斯分類器、SVM、集成學習)要比低偏差/高方差的分類器具有優勢,因為後者容易過擬合。然而隨著訓練集的增大,低偏差/高方差的分類器將開始具有優勢(它們擁有更低的漸進誤差)。然後要根據不同分類器的特點去選擇。樸素貝葉斯簡單,容易理解,但是需要假設屬性之間條件獨立。決策樹解釋性強,能夠處理屬性之間的交叉關係,並且模型是非參數化的,但是器不支持在線學習,於是在新樣本到來後,決策樹需要進行重建;以及容易過擬合。K近鄰容易理解,簡單,但是其複雜度高,不適合實時性要求高的場景。支持向量機具有很好的理論支持,分類準確率高,對於線性不可分的情況,可以使用核函數進行映射到高維空間而線性可分,但是只適合訓練集較小的情況,內存消耗大。基於規則的分類器容易解釋,規則容易建立,但是可能效果不佳;集成學習容易達到較好的分類效果,並且容易避免過擬合,但是它需要訓練多個不同的分類器;人工神經網路效果好,能夠以任意精度去擬合非線性分類器,但是模型解釋性不強,並且訓練複雜,學習速度慢。回歸模型:
回歸模型是指通過對數據進行統計分析,得到能夠對數據進行擬合的模型,確定兩種或兩種以上變數間相互依賴的定量關係。它與分類的區別在於其結果是連續的。包括線性回歸與非線性回歸。線性回歸模型是假設自變數與因變數之間是一種線性關係,即自變數最高次是一次,然後使用訓練集對模型中的各個參數進行訓練學習,得到自變數與因變數之間的定量關係方程,最後將未知結果的實例代入方程得到結果,常用的演算法是線性回歸演算法、L2正則的嶺回歸與L1正則的Lasso回歸。而非線性回歸則相反,是假設自變數與因變數之間的關係是非線性的,即自變數的最高次是大於1的。常用的非線性回歸演算法有邏輯回歸、softmax回歸、神經網路、支持向量機以及CART等。若在回歸結果上面加一層,則可以達到分類的效果。
預測模型:
預測模型包括分類模型與回歸模型,兩者的區別在於前者是對離散值進行預測,而後者是對連續值進行預測。同時,在與時間有關的預測模型中,是根據歷史的狀態預測將來一段時間內的狀態。如設備故障預測等。常用的演算法包括自回歸積分滑動平均模型(ARIMA)、灰度預測模型、循環神經網路以及深度學習模型等。
使用分類、回歸模型對設備的故障進行預測以便在設備故障發生之前就進行維修,對設備採購需求、設備技改、設備剩餘壽命進行預測,同時可以對設備的故障進行分類等。聚類模型:
聚類分析是數據挖掘的重要研究內容與熱點問題。其由來已久,國外可以追溯到亞里士多德時代。在中國,很久之前便流傳著「物以類聚,人以群分」的聚類思想。從而可知聚類是一個非常古來的問題,它伴隨著人類社會的產生與發展而不斷深化。人們通過事物之間的區別性與相似性來認識與改造世界,將相似的對象聚集到一起。聚類便是按照某種相似性度量方法對一個集合進行劃分成多個類簇,使得同一個類簇之間的相似性高,不同類簇之間不相似或者相似性低。同一類簇中的任意兩個對象的相似性要大於不同類簇的任意兩個對象。從學習的角度來看,聚類中事先並不需要知道每個對象所屬的類別,即每個對象沒有類標進行指導學習,也不知道每個簇的大小,而是根據對象之間的相似性來劃分的,因此聚類分析屬於一種無監督學習方法,又被稱為「無先驗知識學習方法」。其目的是在數據中尋找相似的分組結構和區分差異的對象結構。目前,聚類演算法已經被廣泛應用於科學與工程領域的方方面面,如在電子商務上進行消費群體劃分與商品主題團活動等;在生物信息學上進行種群聚類,便於識別未知種群以及刻畫種群結構等;在計算機視覺上應用聚類演算法進行圖像分割、模式識別與目標識別等;在社交網路上進行社區發現等;在自然語言處理中進行文本挖掘等。常見的聚類方式有以下幾種:
1. 基於劃分的聚類演算法基於劃分的聚類演算法是指基於歐式距離將各個對象劃分到對應的簇中。主要的代表演算法有:K-means、K-mediods、FK-means、K-modes、K-prototype、EM演算法、CLARANS等;
2. 基於層次的聚類演算法
基於層次的聚類演算法可分為兩大類,一種是自底向上,一種是自頂而下。自底向上策略是使用凝聚方法進行聚類,該方法最初是將每個點作為一個簇,使用某些準則對簇不斷地進行合併,直到滿足某個終止條件,便得到了聚類的所有簇;而自頂而下策略是使用分裂方法進行聚類,該方法最初是將所有點都作為一個簇,不斷使用某些準則對簇進行分裂,直到所有對象都自成一個簇或者滿足某個終止條件,這樣便得到了各個簇,層次方法在每個過程中所得到的簇可以構成一棵聚類樹。另外,可以在聚類過程中同時結合凝聚與分裂方法。層次凝聚的代表演算法是AGNES(Agglomerative Nesting)演算法,層次分裂的代表演算法是DIANA(Divisive Analysis)演算法,以及凝聚與分裂相結合的BIRCH、CURE等;
3. 基於圖論的聚類演算法基於圖論的聚類演算法首先將樣本對象構造成一張圖,每個對象為圖的一個頂點,對象之間的關係(相似度)作為圖頂點之間的邊值。然後,採用圖論的方法對圖進行劃分而形成多個子圖,每個子圖便是一個簇,使得子圖內部相似性大,子圖間相似性小,稱為圖劃分聚類。劃分的準則有:最小割集(Minimum-cut)準則、率切(Ratio-cut)準則、規範切(Normalized-cut)準則、最小最大切(Min-max-cut)準則等,基於圖論的聚類又稱為譜聚類(Spectral Clustering),其基本思想是利用樣本數據的相似矩陣(一般是Laplacian矩陣或Laplacian的變換矩陣)進行特徵分解後得到的特徵向量進行聚類。根據劃分準則可以將譜聚類分為兩大類:規範化譜聚類(Normalized Spectral Clustering)與非規範化譜聚類(Unnormalized Spectral Clustering),其主要區別在於輸入的Laplacian矩陣是否進行了規範化,如最小割集與率切準則是非標準化準則,規範切與最小最大切準則則是規範化準則。在譜聚類演算法中使用最廣泛的是Ng與Jordan等人提出的基於規範切的譜聚類演算法;
4. 基於密度的聚類演算法基於密度聚類演算法不是基於距離的而是基於密度的。對象的密度是指以這個對象為中心,單位體積內對象的個數。該類聚類演算法使得類簇內的密度大,類簇間的密度小。這樣,基於密度聚類便能克服基於距離的演算法只能發現「圓形簇」的缺點。其根據對象集合構成的空間的密度差異,將每個類簇看成是:由低密度區域分割開的高密度區域。該類型的演算法的一個主要方向是如何去對高低密度區域進行定義。常見的有DBSCAN、OPTICS、DENCLUE、CBFSAFODP等演算法;
5. 基於網格的聚類演算法基於網格的聚類演算法,首先將數據空間劃分成有限個單元的網格結構,每個單元作為基本處理單元,這種方法的一個突出優點便是處理速度快,它與數據本身的對象個數無關,只與把這些對象分成多少個網格有關,代表演算法有STING、CLIQIUE等演算法;
6. 基於模型的聚類演算法
基於模型聚類是假定每一個類簇都是一個模型,然後去尋找能夠擬合這個模型的簇,每一個模型反映的是數據對象在樣本空間中的密度分布,其潛在假定就是:目標數據集是由一系列的概率分布所決定的。基於模型主要有兩類方法:基於統計學的方法與基於神經網路的方法。基於統計學方法有COBWeb雨Auto-class演算法,基於神經網路的有CL、LVQ、SOFM等演算法。
使用聚類演算法對設備故障類型或者設備狀態進行聚類,以便發現類似的設備故障以及設備狀態等。關聯規則挖掘:
關聯規則挖掘是指:給定一個數據集T,每條記錄有多個特徵,從這些記錄中找出所有支持度大於等於最小支持度support>=min_support,置信度大於等於最小置信度confidence>=min_confidence的規則Xs->Ys。其形式話的定義:兩個不相交的非空集合Xs、Ys,如果Xs->Ys,就說Xs->Ys是一條規則。例如,啤酒與尿布的故事,它已成為了關聯規則挖掘的經典案例,{啤酒}->{尿布}就是一條關聯規則。支持度support的定義為:support{Xs->Ys}為集合Xs與集合Ys中的項在同一條記錄中出現的次數除以總記錄的個數。置信度confidence的定義為:confidence{Xs->Ys}為集合Xs與集合Ys中的項在同一條記錄中出現的次數除以集合Xs中的項共同出現的次數。支持度和置信度越高,則說明規則越強。關聯規則挖掘就是挖掘出具有一定強度的規則集合,即該規則集合中的每條規則的支持度要大於等於最小支持度,置信度要大於等於最小置信度。常見的關鍵規則挖掘演算法有Apriori、FP-growth、GSpan等演算法。
我們可以使用關聯規則挖掘演算法來對設備故障進行監控與預測,以便找到故障發生的關鍵原因與因素。推薦閱讀:
※FOFA小技能 看我山裡老農如何薅WordPress收費主題
※一文讀懂物聯網、雲計算與大數據的關係
※Hadoop如何處理?如何增強Hadoop 安全?
※大數據計數原理1+0=1這你都不會算(九)No.64
※移動互聯網大數據匯總,雞年我們都幹了點啥?