17 個機器學習的常用算法!

將算法按照學習方式分類是一個不錯的想法,這樣可以讓人們在建模和算法選擇的時候考慮能根據輸入數據來選擇最合適的算法來獲得最好的結果。

1. 監督式學習:

在監督式學習下,輸入數據被稱爲 “訓練數據”,每組訓練數據有一個明確的標識或結果,如對防垃圾郵件系統中“垃圾郵件”“非垃圾郵件”,對手寫數字識別中的“1“,”2“,”3“,”4“等。在建立預測模型的時候,監督式學習建立一個學習過程,將預測結果與“訓練數據” 的實際結果進行比較,不斷的調整預測模型,直到模型的預測結果達到一個預期的準確率。監督式學習的常見應用場景如分類問題和迴歸問題。常見算法有邏輯迴歸(Logistic Regression)和反向傳遞神經網絡(Back Propagation Neural Network)

2. 非監督式學習:

在非監督式學習中,數據並不被特別標識,學習模型是爲了推斷出數據的一些內在結構。常見的應用場景包括關聯規則的學習以及聚類等。常見算法包括 Apriori 算法以及 k-Means 算法。

3. 半監督式學習:

在此學習方式下,輸入數據部分被標識,部分沒有被標識,這種學習模型可以用來進行預測,但是模型首先需要學習數據的內在結構以便合理的組織數據來進行預測。應用場景包括分類和迴歸,算法包括一些對常用監督式學習算法的延伸,這些算法首先試圖對未標識數據進行建模,在此基礎上再對標識的數據進行預測。如圖論推理算法(Graph Inference)或者拉普拉斯支持向量機(Laplacian SVM.)等。

4. 強化學習:

在這種學習模式下,輸入數據作爲對模型的反饋,不像監督模型那樣,輸入數據僅僅是作爲一個檢查模型對錯的方式,在強化學習下,輸入數據直接反饋到模型,模型必須對此立刻作出調整。常見的應用場景包括動態系統以及機器人控制等。常見算法包括 Q-Learning 以及時間差學習(Temporal difference learning)

在企業數據應用的場景下, 人們最常用的可能就是監督式學習和非監督式學習的模型。在圖像識別等領域,由於存在大量的非標識的數據和少量的可標識數據, 目前半監督式學習是一個很熱的話題。而強化學習更多的應用在機器人控制及其他需要進行系統控制的領域。

5. 算法類似性

根據算法的功能和形式的類似性,我們可以把算法分類,比如說基於樹的算法,基於神經網絡的算法等等。當然,機器學習的範圍非常龐大,有些算法很難明確歸類到某一類。而對於有些分類來說,同一分類的算法可以針對不同類型的問題。這裏,我們儘量把常用的算法按照最容易理解的方式進行分類。

6. 迴歸算法:

迴歸算法是試圖採用對誤差的衡量來探索變量之間的關係的一類算法。迴歸算法是統計機器學習的利器。在機器學習領域,人們說起迴歸,有時候是指一類問題,有時候是指一類算法,這一點常常會使初學者有所困惑。常見的迴歸算法包括:最小二乘法(Ordinary Least Square),邏輯迴歸(Logistic Regression),逐步式迴歸(Stepwise Regression),多元自適應迴歸樣條(Multivariate Adaptive Regression Splines)以及本地散點平滑估計(Locally Estimated Scatterplot Smoothing)

7. 基於實例的算法

 

基於實例的算法常常用來對決策問題建立模型,這樣的模型常常先選取一批樣本數據,然後根據某些近似性把新數據與樣本數據進行比較。通過這種方式來尋找最佳的匹配。因此,基於實例的算法常常也被稱爲 “贏家通喫” 學習或者“基於記憶的學習”。常見的算法包括 k-Nearest Neighbor(KNN), 學習矢量量化(Learning Vector Quantization, LVQ),以及自組織映射算法(Self-Organizing Map , SOM)

8. 正則化方法

 

正則化方法是其他算法(通常是迴歸算法)的延伸,根據算法的複雜度對算法進行調整。正則化方法通常對簡單模型予以獎勵而對複雜算法予以懲罰。常見的算法包括:Ridge Regression,Least Absolute Shrinkage and Selection Operator(LASSO),以及彈性網絡(Elastic Net)。

9. 決策樹學習

決策樹算法根據數據的屬性採用樹狀結構建立決策模型, 決策樹模型常常用來解決分類和迴歸問題。常見的算法包括:分類及迴歸樹(Classification And Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 隨機森林(Random Forest), 多元自適應迴歸樣條(MARS)以及梯度推進機(Gradient Boosting Machine, GBM)

10. 貝葉斯方法

貝葉斯方法算法是基於貝葉斯定理的一類算法,主要用來解決分類和迴歸問題。常見算法包括:樸素貝葉斯算法,平均單依賴估計(Averaged One-Dependence Estimators, AODE),以及 Bayesian Belief Network(BBN)。

11. 基於核的算法

 

基於核的算法中最著名的莫過於支持向量機(SVM)了。基於核的算法把輸入數據映射到一個高階的向量空間, 在這些高階向量空間裏, 有些分類或者回歸問題能夠更容易的解決。常見的基於核的算法包括:支持向量機(Support Vector Machine, SVM), 徑向基函數(Radial Basis Function ,RBF), 以及線性判別分析(Linear Discriminate Analysis ,LDA) 等

12. 聚類算法

 

聚類,就像迴歸一樣,有時候人們描述的是一類問題,有時候描述的是一類算法。聚類算法通常按照中心點或者分層的方式對輸入數據進行歸併。所以的聚類算法都試圖找到數據的內在結構,以便按照最大的共同點將數據進行歸類。常見的聚類算法包括 k-Means 算法以及期望最大化算法(Expectation Maximization, EM)。

13. 關聯規則學習

 

關聯規則學習通過尋找最能夠解釋數據變量之間關係的規則,來找出大量多元數據集中有用的關聯規則。常見算法包括 Apriori 算法和 Eclat 算法等。

14. 人工神經網絡

人工神經網絡算法模擬生物神經網絡,是一類模式匹配算法。通常用於解決分類和迴歸問題。人工神經網絡是機器學習的一個龐大的分支,有幾百種不同的算法。(其中深度學習就是其中的一類算法,我們會單獨討論),重要的人工神經網絡算法包括:感知器神經網絡(Perceptron Neural Network), 反向傳遞(Back Propagation), Hopfield 網絡,自組織映射(Self-Organizing Map, SOM)。學習矢量量化(Learning Vector Quantization, LVQ)

15. 深度學習

 

深度學習算法是對人工神經網絡的發展。在近期贏得了很多關注, 特別是百度也開始發力深度學習後, 更是在國內引起了很多關注。   在計算能力變得日益廉價的今天,深度學習試圖建立大得多也複雜得多的神經網絡。很多深度學習的算法是半監督式學習算法,用來處理存在少量未標識數據的大數據集。常見的深度學習算法包括:受限波爾茲曼機(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷積網絡(Convolutional Network), 堆棧式自動編碼器(Stacked Auto-encoders)。

16. 降低維度算法

 

像聚類算法一樣,降低維度算法試圖分析數據的內在結構,不過降低維度算法是以非監督學習的方式試圖利用較少的信息來歸納或者解釋數據。這類算法可以用於高維數據的可視化或者用來簡化數據以便監督式學習使用。

常見的算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘迴歸(Partial Least Square Regression,PLS), Sammon 映射,多維尺度(Multi-Dimensional Scaling, MDS),  投影追蹤(Projection Pursuit)等。

17. 集成算法:

集成算法用一些相對較弱的學習模型獨立地就同樣的樣本進行訓練,然後把結果整合起來進行整體預測。集成算法的主要難點在於究竟集成哪些獨立的較弱的學習模型以及如何把學習結果整合起來。

這是一類非常強大的算法,同時也非常流行。常見的算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆疊泛化(Stacked Generalization, Blending),梯度推進機(Gradient Boosting Machine, GBM),隨機森林(Random Forest)。

常見機器學習算法優缺點:

樸素貝葉斯:

  1. 如果給出的特徵向量長度可能不同,這是需要歸一化爲通長度的向量(這裏以文本分類爲例),比如說是句子單詞的話,則長度爲整個詞彙量的長度,對應位置是該單詞出現的次數。

  2. 計算公式如下:

   

其中一項條件概率可以通過樸素貝葉斯條件獨立展開。要注意一點就是 的計算方法,而由樸素貝葉斯的前提假設可知, = ,因此一般有兩種,一種是在類別爲 ci 的那些樣本集中,找到 wj 出現次數的總和,然後除以該樣本的總和;第二種方法是類別爲 ci 的那些樣本集中,找到 wj 出現次數的總和,然後除以該樣本中所有特徵出現次數的總和。

  1. 如果 中的某一項爲 0,則其聯合概率的乘積也可能爲 0,即 2 中公式的分子爲 0,爲了避免這種現象出現,一般情況下會將這一項初始化爲 1,當然爲了保證概率相等,分母應對應初始化爲 2(這裏因爲是 2 類,所以加 2,如果是 k 類就需要加 k,術語上叫做 laplace 光滑, 分母加 k 的原因是使之滿足全概率公式)。

樸素貝葉斯的優點:對小規模的數據表現很好,適合多分類任務,適合增量式訓練。

缺點:對輸入數據的表達形式很敏感。

決策樹:決策樹中很重要的一點就是選擇一個屬性進行分枝,因此要注意一下信息增益的計算公式,並深入理解它。

信息熵的計算公式如下:

   

其中的 n 代表有 n 個分類類別(比如假設是 2 類問題,那麼 n=2)。分別計算這 2 類樣本在總樣本中出現的概率 p1 和 p2,這樣就可以計算出未選中屬性分枝前的信息熵。

現在選中一個屬性 xi 用來進行分枝,此時分枝規則是:如果 xi=vx 的話,將樣本分到樹的一個分支;如果不相等則進入另一個分支。很顯然,分支中的樣本很有可能包括 2 個類別,分別計算這 2 個分支的熵 H1 和 H2, 計算出分枝後的總信息熵 H’=p1H1+p2H2.,則此時的信息增益ΔH=H-H’。以信息增益爲原則,把所有的屬性都測試一邊,選擇一個使增益最大的屬性作爲本次分枝屬性。

決策樹的優點:計算量簡單,可解釋性強,比較適合處理有缺失屬性值的樣本,能夠處理不相關的特徵;

缺點:容易過擬合(後續出現了隨機森林,減小了過擬合現象)。

Logistic 迴歸:Logistic 是用來分類的,是一種線性分類器,需要注意的地方有:

  1. logistic 函數表達式爲:

   

其導數形式爲:

   

  1. logsitc 迴歸方法主要是用最大似然估計來學習的,所以單個樣本的後驗概率爲:

   

到整個樣本的後驗概率:

   

其中:

   

通過對數進一步化簡爲:

   

  1. 其實它的 loss function 爲 - l(θ),因此我們需使 loss function 最小,可採用梯度下降法得到。梯度下降法公式爲:

   

  

Logistic 迴歸優點:

  1. 實現簡單

  2. 分類時計算量非常小,速度很快,存儲資源低;

缺點:

  1. 容易欠擬合,一般準確度不太高

  2. 只能處理兩分類問題(在此基礎上衍生出來的 softmax 可以用於多分類),且必須線性可分;

線性迴歸:

線性迴歸纔是真正用於迴歸的,而不像 logistic 迴歸是用於分類,其基本思想是用梯度下降法對最小二乘法形式的誤差函數進行優化,當然也可以用 normal equation 直接求得參數的解,結果爲:

   

而在 LWLR(局部加權線性迴歸)中,參數的計算表達式爲:

   

因爲此時優化的是:

   

由此可見 LWLR 與 LR 不同,LWLR 是一個非參數模型,因爲每次進行迴歸計算都要遍歷訓練樣本至少一次。

線性迴歸優點:實現簡單,計算簡單;

缺點:不能擬合非線性數據;

 KNN 算法:KNN 即最近鄰算法,其主要過程爲:

  1. 計算訓練樣本和測試樣本中每個樣本點的距離(常見的距離度量有歐式距離,馬氏距離等);

  2. 對上面所有的距離值進行排序;

  3. 選前 k 個最小距離的樣本;

  4. 根據這 k 個樣本的標籤進行投票,得到最後的分類類別;

如何選擇一個最佳的 K 值,這取決於數據。一般情況下,在分類時較大的 K 值能夠減小噪聲的影響。但會使類別之間的界限變得模糊。一個較好的 K 值可通過各種啓發式技術來獲取,比如,交叉驗證。另外噪聲和非相關性特徵向量的存在會使 K 近鄰算法的準確性減小。

近鄰算法具有較強的一致性結果。隨着數據趨於無限,算法保證錯誤率不會超過貝葉斯算法錯誤率的兩倍。對於一些好的 K 值,K 近鄰保證錯誤率不會超過貝葉斯理論誤差率。

注:馬氏距離一定要先給出樣本集的統計性質,比如均值向量,協方差矩陣等。關於馬氏距離的介紹如下:

   

KNN 算法的優點:

  1. 思想簡單,理論成熟,既可以用來做分類也可以用來做迴歸;

  2. 可用於非線性分類;

  3. 訓練時間複雜度爲 O(n);

  4. 準確度高,對數據沒有假設,對 outlier 不敏感;

缺點:

  1. 計算量大;

  2. 樣本不平衡問題(即有些類別的樣本數量很多,而其它樣本的數量很少);

  3. 需要大量的內存;

SVM:

要學會如何使用 libsvm 以及一些參數的調節經驗,另外需要理清楚 svm 算法的一些思路:

  1. svm 中的最優分類面是對所有樣本的幾何裕量最大(爲什麼要選擇最大間隔分類器,請從數學角度上說明?網易深度學習崗位面試過程中有被問到。答案就是幾何間隔與樣本的誤分次數間存在關係: ,其中的分母就是樣本到分類間隔距離,分子中的 R 是所有樣本中的最長向量值),即:

   

經過一系列推導可得爲優化下面原始目標:

  

  1. 下面來看看拉格朗日理論:

  

可以將 1 中的優化目標轉換爲拉格朗日的形式(通過各種對偶優化,KKD 條件),最後目標函數爲:

   

我們只需要最小化上述目標函數,其中的α爲原始優化問題中的不等式約束拉格朗日系數。

  1. 對 2 中最後的式子分別 w 和 b 求導可得:

  

  

由上面第 1 式子可以知道,如果我們優化出了α,則直接可以求出 w 了,即模型的參數搞定。而上面第 2 個式子可以作爲後續優化的一個約束條件。

  1. 對 2 中最後一個目標函數用對偶優化理論可以轉換爲優化下面的目標函數:

  

而這個函數可以用常用的優化方法求得α,進而求得 w 和 b。

  1. 按照道理,svm 簡單理論應該到此結束。不過還是要補充一點,即在預測時有:

   

那個尖括號我們可以用核函數代替,這也是 svm 經常和核函數扯在一起的原因。

  1. 最後是關於鬆弛變量的引入,因此原始的目標優化公式爲:

   

此時對應的對偶優化公式爲:

   

與前面的相比只是α多了個上界。

SVM 算法優點:

  1. 可用於線性 / 非線性分類,也可以用於迴歸;

  2. 低泛化誤差;

  3. 容易解釋;

  4. 計算複雜度較低;

缺點:

  1. 對參數和核函數的選擇比較敏感;

  2. 原始的 SVM 只比較擅長處理二分類問題;

Boosting:

主要以 Adaboost 爲例,首先來看看 Adaboost 的流程圖,如下:

   

從圖中可以看到,在訓練過程中我們需要訓練出多個弱分類器(圖中爲 3 個),每個弱分類器是由不同權重的樣本(圖中爲 5 個訓練樣本)訓練得到(其中第一個弱分類器對應輸入樣本的權值是一樣的),而每個弱分類器對最終分類結果的作用也不同,是通過加權平均輸出的,權值見上圖中三角形裏面的數值。那麼這些弱分類器和其對應的權值是怎樣訓練出來的呢?

下面通過一個例子來簡單說明,假設的是 5 個訓練樣本,每個訓練樣本的維度爲 2,在訓練第一個分類器時 5 個樣本的權重各爲 0.2. 注意這裏樣本的權值和最終訓練的弱分類器組對應的權值α是不同的,樣本的權重只在訓練過程中用到,而α在訓練過程和測試過程都有用到。

現在假設弱分類器是帶一個節點的簡單決策樹,該決策樹會選擇 2 個屬性(假設只有 2 個屬性)的一個,然後計算出這個屬性中的最佳值用來分類。

Adaboost 的簡單版本訓練過程如下:

  1. 訓練第一個分類器,樣本的權值 D 爲相同的均值。通過一個弱分類器,得到這 5 個樣本(請對應書中的例子來看,依舊是 machine learning in action)的分類預測標籤。與給出的樣本真實標籤對比,就可能出現誤差 (即錯誤)。如果某個樣本預測錯誤,則它對應的錯誤值爲該樣本的權重,如果分類正確,則錯誤值爲 0. 最後累加 5 個樣本的錯誤率之和,記爲ε。

  2. 通過ε來計算該弱分類器的權重α,公式如下:

   

  1. 通過α來計算訓練下一個弱分類器樣本的權重 D,如果對應樣本分類正確,則減小該樣本的權重,公式爲:

   

如果樣本分類錯誤,則增加該樣本的權重,公式爲:

   

  1. 循環步驟 1,2,3 來繼續訓練多個分類器,只是其 D 值不同而已。

測試過程如下:

輸入一個樣本到訓練好的每個弱分類中,則每個弱分類都對應一個輸出標籤,然後該標籤乘以對應的α,最後求和得到值的符號即爲預測標籤值。

Boosting 算法的優點:

  1. 低泛化誤差;

  2. 容易實現,分類準確率較高,沒有太多參數可以調;

  3. 缺點:

  4. 對 outlier 比較敏感;

聚類:

根據聚類思想劃分:

  1. 基於劃分的聚類:

K-means, k-medoids(每一個類別中找一個樣本點來代表),CLARANS.

k-means 是使下面的表達式值最小:

   

k-means 算法的優點:

(1)k-means 算法是解決聚類問題的一種經典算法,算法簡單、快速。

(2)對處理大數據集,該算法是相對可伸縮的和高效率的,因爲它的複雜度大約是 O(nkt),其中 n 是所有對象的數目,k 是簇的數目, t 是迭代的次數。通常 k<<n。這個算法通常局部收斂。

(3)算法嘗試找出使平方誤差函數值最小的 k 個劃分。當簇是密集的、球狀或團狀的,且簇與簇之間區別明顯時,聚類效果較好。

缺點:

(1)k - 平均方法只有在簇的平均值被定義的情況下才能使用,且對有些分類屬性的數據不適合。

(2)要求用戶必須事先給出要生成的簇的數目 k。

(3)對初值敏感,對於不同的初始值,可能會導致不同的聚類結果。

(4)不適合於發現非凸面形狀的簇,或者大小差別很大的簇。

(5)對於 "噪聲" 和孤立點數據敏感,少量的該類數據能夠對平均值產生極大影響。

  1. 基於層次的聚類:

自底向上的凝聚方法,比如 AGNES。

自上向下的分裂方法,比如 DIANA。

  1. 基於密度的聚類:DBSACN,OPTICS,BIRCH(CF-Tree),CURE.

  2. 基於網格的方法:STING, WaveCluster.

  3. 基於模型的聚類:EM,SOM,COBWEB.

推薦系統:推薦系統的實現主要分爲兩個方面:基於內容的實現和協同濾波的實現。

基於內容的實現:不同人對不同電影的評分這個例子,可以看做是一個普通的迴歸問題,因此每部電影都需要提前提取出一個特徵向量 (即 x 值),然後針對每個用戶建模,即每個用戶打的分值作爲 y 值,利用這些已有的分值 y 和電影特徵值 x 就可以訓練迴歸模型了 (最常見的就是線性迴歸)。

這樣就可以預測那些用戶沒有評分的電影的分數。(值得注意的是需對每個用戶都建立他自己的迴歸模型)

從另一個角度來看,也可以是先給定每個用戶對某種電影的喜好程度(即權值),然後學出每部電影的特徵,最後採用迴歸來預測那些沒有被評分的電影。

當然還可以是同時優化得到每個用戶對不同類型電影的熱愛程度以及每部電影的特徵。

基於協同濾波的實現:協同濾波(CF)可以看做是一個分類問題,也可以看做是矩陣分解問題。協同濾波主要是基於每個人自己的喜好都類似這一特徵,它不依賴於個人的基本信息。

比如剛剛那個電影評分的例子中,預測那些沒有被評分的電影的分數只依賴於已經打分的那些分數,並不需要去學習那些電影的特徵。

SVD 將矩陣分解爲三個矩陣的乘積,公式如下所示:

   

中間的矩陣 sigma 爲對角矩陣,對角元素的值爲 Data 矩陣的奇異值 (注意奇異值和特徵值是不同的),且已經從大到小排列好了。即使去掉特徵值小的那些特徵,依然可以很好的重構出原始矩陣。如下圖所示:

  

其中更深的顏色代表去掉小特徵值重構時的三個矩陣。

果 m 代表商品的個數,n 代表用戶的個數,則 U 矩陣的每一行代表商品的屬性,現在通過降維 U 矩陣(取深色部分)後,每一個商品的屬性可以用更低的維度表示(假設爲 k 維)。這樣當新來一個用戶的商品推薦向量 X,則可以根據公式 X'U1inv(S1) 得到一個 k 維的向量,然後在 V’中尋找最相似的那一個用戶(相似度測量可用餘弦公式等),根據這個用戶的評分來推薦(主要是推薦新用戶未打分的那些商品)。

 pLSA:由 LSA 發展過來,而早期 LSA 的實現主要是通過 SVD 分解。pLSA 的模型圖如下

   

公式中的意義如下:

   

LDA 主題模型,概率圖如下:

   

和 pLSA 不同的是 LDA 中假設了很多先驗分佈,且一般參數的先驗分佈都假設爲 Dirichlet 分佈,其原因是共軛分佈時先驗概率和後驗概率的形式相同。

GDBT:GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),好像在阿里內部用得比較多(所以阿里算法崗位面試時可能會問到),它是一種迭代的決策樹算法,該算法由多棵決策樹組成,所有樹的輸出結果累加起來就是最終答案。

它在被提出之初就和 SVM 一起被認爲是泛化能力(generalization) 較強的算法。近些年更因爲被用於搜索排序的機器學習模型而引起大家關注。

GBDT 是迴歸樹,不是分類樹。其核心就在於,每一棵樹是從之前所有樹的殘差中來學習的。爲了防止過擬合,和 Adaboosting 一樣,也加入了 boosting 這一項。

Regularization 作用是

  1. 數值上更容易求解;

  2. 特徵數目太大時更穩定;

  3. 控制模型的複雜度,光滑性。複雜性越小且越光滑的目標函數泛化能力越強。而加入規則項能使目標函數複雜度減小,且更光滑。

  4. 減小參數空間;參數空間越小,複雜度越低。

  5. 係數越小,模型越簡單,而模型越簡單則泛化能力越強(Ng 宏觀上給出的解釋)。

  6. 可以看成是權值的高斯先驗。

異常檢測:可以估計樣本的密度函數,對於新樣本直接計算其密度,如果密度值小於某一閾值,則表示該樣本異常。而密度函數一般採用多維的高斯分佈。

如果樣本有 n 維,則每一維的特徵都可以看作是符合高斯分佈的,即使這些特徵可視化出來不太符合高斯分佈,也可以對該特徵進行數學轉換讓其看起來像高斯分佈,比如說 x=log(x+c), x=x^(1/c) 等。異常檢測的算法流程如下:

  

其中的ε也是通過交叉驗證得到的,也就是說在進行異常檢測時,前面的 p(x) 的學習是用的無監督,後面的參數ε學習是用的有監督。那麼爲什麼不全部使用普通有監督的方法來學習呢(即把它看做是一個普通的二分類問題)?

主要是因爲在異常檢測中,異常的樣本數量非常少而正常樣本數量非常多,因此不足以學習到好的異常行爲模型的參數,因爲後面新來的異常樣本可能完全是與訓練樣本中的模式不同。

EM 算法:有時候因爲樣本的產生和隱含變量有關(隱含變量是不能觀察的),而求模型的參數時一般採用最大似然估計,由於含有了隱含變量,所以對似然函數參數求導是求不出來的,這時可以採用 EM 算法來求模型的參數的(對應模型參數個數可能有多個),

EM 算法一般分爲 2 步:

E 步:選取一組參數,求出在該參數下隱含變量的條件概率值;

M 步:結合 E 步求出的隱含變量條件概率,求出似然函數下界函數(本質上是某個期望函數)的最大值。

重複上面 2 步直至收斂,公式如下所示:

   

M 步公式中下界函數的推導過程:

   

EM 算法一個常見的例子就是 GMM 模型,每個樣本都有可能由 k 個高斯產生,只不過由每個高斯產生的概率不同而已,因此每個樣本都有對應的高斯分佈(k 箇中的某一個),此時的隱含變量就是每個樣本對應的某個高斯分佈。

GMM 的 E 步公式如下(計算每個樣本對應每個高斯的概率):

   

更具體的計算公式爲:

  

M 步公式如下(計算每個高斯的比重,均值,方差這 3 個參數):

   

Apriori 是關聯分析中比較早的一種方法,主要用來挖掘那些頻繁項集合。其思想是:

  1. 如果一個項目集合不是頻繁集合,那麼任何包含它的項目集合也一定不是頻繁集合;

  2. 如果一個項目集合是頻繁集合,那麼它的任何非空子集也是頻繁集合;

Aprioir 需要掃描項目表多遍,從一個項目開始掃描,捨去掉那些不是頻繁的項目,得到的集合稱爲 L,然後對 L 中的每個元素進行自組合,生成比上次掃描多一個項目的集合,該集合稱爲 C,接着又掃描去掉那些非頻繁的項目,重複…

看下面這個例子,元素項目表格:

   

如果每個步驟不去掉非頻繁項目集,則其掃描過程的樹形結構如下:

   

在其中某個過程中,可能出現非頻繁的項目集,將其去掉(用陰影表示)爲:

   

FP Growth 是一種比 Apriori 更高效的頻繁項挖掘方法,它只需要掃描項目表 2 次。其中第 1 次掃描獲得當個項目的頻率,去掉不符合支持度要求的項,並對剩下的項排序。第 2 遍掃描是建立一顆 FP-Tree(frequent-patten tree)。

接下來的工作就是在 FP-Tree 上進行挖掘,比如說有下表:

   

它所對應的 FP_Tree 如下:

   

然後從頻率最小的單項 P 開始,找出 P 的條件模式基,用構造 FP_Tree 同樣的方法來構造 P 的條件模式基的 FP_Tree,在這棵樹上找出包含 P 的頻繁項集。

依次從 m,b,a,c,f 的條件模式基上挖掘頻繁項集,有些項需要遞歸的去挖掘,比較麻煩,比如 m 節點。

編輯:沈家偉  審覈:富裕

指導:萬劍華教授

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/_Kc8AoKhxnxgsBML-RX2Ug