1. 程式人生 > >機器學習十大常用演算法彙總

機器學習十大常用演算法彙總

1.決策樹

    以一個根節點開始,每一個節點提出一個問題,基於feature將資料分為兩類,再子節點上再繼續提問。每個節點上的問題和分類規則是根據已有的訓練資料學習出來的。  

決策樹通常有三個步驟:特徵選擇、決策樹的生成、決策樹的修剪。

上圖為一個決策樹流程圖,正方形代表判斷模組,橢圓代表終止模組,表示已經得出結論,可以終止執行,左右箭頭叫做分支。

如果一個特徵具有更好的分類能力,或者說,按照這一特徵將訓練資料集分割成子集,使得各個子集在當前條件下有最好的分類,那麼就更應該選擇這個特徵。資訊增益就能夠很好地表示這一直觀的準則。

什麼是資訊增益呢?在劃分資料集之前之後資訊發生的變化成為資訊增益,知道如何計算資訊增益,我們就可以計算每個特徵值劃分資料集獲得的資訊增益,獲得資訊增益最高的特徵就是最好的選擇。

常用的決策樹演算法有ID3,C4.5,CART三種。3種演算法的模型構建思想都十分類似,只是採用了不同的指標。決策樹模型的構建過程大致如下:

ID3,C4.5決策樹的生成

輸入:訓練集D,特徵集A,閾值eps 輸出:決策樹T

  1. 若D中所有樣本屬於同一類Ck,則T為單節點樹,將類Ck作為該結點的類標記,返回T
  2. 若A為空集,即沒有特徵作為劃分依據,則T為單節點樹,並將D中例項數最大的類Ck作為該結點的類標記,返回T
  3. 否則,計算A中各特徵對D的資訊增益(ID3)/資訊增益比(C4.5),選擇資訊增益最大的特徵Ag
  4. 若Ag的資訊增益(比)小於閾值eps,則置T為單節點樹,並將D中例項數最大的類Ck作為該結點的類標記,返回T
  5. 否則,依照特徵Ag將D劃分為若干非空子集Di,將Di中例項數最大的類作為標記,構建子節點,由結點及其子節點構成樹T,返回T
  6. 對第i個子節點,以Di為訓練集,以A-{Ag}為特徵集,遞迴地呼叫1~5,得到子樹Ti,返回Ti

CART決策樹的生成

這裡只簡單介紹下CART與ID3和C4.5的區別。

  1. CART樹是二叉樹,而ID3和C4.5可以是多叉樹
  2. CART在生成子樹時,是選擇一個特徵一個取值作為切分點,生成兩個子樹
  3. 選擇特徵和切分點的依據是基尼指數,選擇基尼指數最小的特徵及切分點生成子樹

    決策樹的剪枝

    決策樹的剪枝主要是為了預防過擬合,過程就不詳細介紹了。

    主要思路是從葉節點向上回溯,嘗試對某個節點進行剪枝,比較剪枝前後的決策樹的損失函式值。最後我們通過動態規劃(樹形dp,acmer應該懂)就可以得到全域性最優的剪枝方案。

2.隨機森林

在源資料中隨機選取資料,組成幾個子集

S 矩陣是源資料,有 1-N 條資料,A B C 是feature,最後一列C是類別

由 S 隨機生成 M 個子矩陣

這 M 個子集得到 M 個決策樹

將新資料投入到這 M 個樹中,得到 M 個分類結果,計數看預測成哪一類的數目最多,就將此類別作為最後的預測結果

隨機森林屬於整合學習(Ensemble Learning)中的bagging演算法。

Bagging(套袋法)

bagging的演算法過程如下:

  1. 從原始樣本集中使用Bootstraping方法隨機抽取n個訓練樣本,共進行k輪抽取,得到k個訓練集。(k個訓練集之間相互獨立,元素可以有重複)
  2. 對於k個訓練集,我們訓練k個模型(這k個模型可以根據具體問題而定,比如決策樹,knn等)
  3. 對於分類問題:由投票表決產生分類結果;對於迴歸問題:由k個模型預測結果的均值作為最後預測結果。(所有模型的重要性相同)

與上面介紹的Bagging過程相似,隨機森林的構建過程大致如下:

  1. 從原始訓練集中使用Bootstraping方法隨機有放回取樣選出m個樣本,共進行n_tree次取樣,生成n_tree個訓練集
  2. 對於n_tree個訓練集,我們分別訓練n_tree個決策樹模型
  3. 對於單個決策樹模型,假設訓練樣本特徵的個數為n,那麼每次分裂時根據資訊增益/資訊增益比/基尼指數選擇最好的特徵進行分裂
  4. 每棵樹都一直這樣分裂下去,直到該節點的所有訓練樣例都屬於同一類。在決策樹的分裂過程中不需要剪枝
  5. 將生成的多棵決策樹組成隨機森林。對於分類問題,按多棵樹分類器投票決定最終分類結果;對於迴歸問題,由多棵樹預測值的均值決定最終預測結果。

3.邏輯迴歸

迴歸模型中,處理的因變數都是數值型區間變數,建立的模型描述是因變數的期望與自變數之間的線性關係。比如常見的線性迴歸模型:

 

線性迴歸模型通常是處理因變數是連續變數的問題,如果因變數是定性變數,線性迴歸模型就不再適用了,需採用邏輯迴歸模型解決。

邏輯迴歸(Logistic Regression是用於處理因變數為分類變數的迴歸問題,常見的是二分類或二項分佈問題,也可以處理多分類問題,它實際上是屬於一種分類方法。
二分類問題的概率與自變數之間的關係圖形往往是一個S型曲線,如圖所示,採用的Sigmoid函式實現。

函式的定義域為全體實數,值域在[0,1]之間,x軸在0點對應的結果為0.5。當x取值足夠大的時候,可以看成0或1兩類問題,大於0.5可以認為是1類問題,反之是0類問題,而剛好是0.5,則可以劃分至0類或1類。

損失函式,通俗講,就是衡量真實值和預測值之間差距的函式。所以,我們希望這個函式越小越好,損失函式定義為

把這兩個損失函式綜合起來

對於m個樣本,總的損失函式為

不過,當損失過於小時,也就是模型能擬合全部/絕大部分的資料,就有可能出現過擬合。這種損失最小是經驗風險最小,為了不讓模型過擬合,我們又引入了其他的東西,來儘量減小過擬合,就是大家所說的結構風險損失。

結構經驗風險常用的是正則化,L0,L1,L2正則化

4.SVM

要將兩類分開,想要得到一個超平面,最優的超平面是到兩類的 margin 達到最大,margin就是超平面與離它最近一點的距離,如下圖,Z2>Z1,所以綠色的超平面比較好

事實上,大部分時候資料並不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在,引入核函式解決線性不可分情況。核函式的價值在於它雖然也是將特徵進行從低維到高維的轉換,但核函式絕就絕在它事先在低維上進行計算,而將實質上的分類效果表現在了高維上,也就如上文所說的避免了直接在高維空間中的複雜計算。

常用的幾個核函式:

多項式核:該空間的維度是,其中 m 是原始空間的維度。

高斯核

線性核

可能並不是因為資料本身是非線性結構的,而只是因為資料有噪音。對於這種偏離正常位置很遠的資料點,我們稱之為 outlier ,在我們原來的 SVM 模型裡,outlier 的存在有可能造成很大的影響,因為超平面本身就是隻有少數幾個 support vector 組成的,如果這些 support vector 裡又存在 outlier 的話,其影響就很大了。

現在考慮到outlier問題,約束條件變成了:

    其中稱為鬆弛變數 (slack variable) ,對應資料點允許偏離的 functional margin 的量。當然,如果我們執行任意大的話,那任意的超平面都是符合條件的了。所以,我們在原來的目標函式後面加上一項,使得這些的總和也要最小:

5.樸素貝葉斯

樸素貝葉斯中的樸素一詞的來源就是假設各特徵之間相互獨立。這一假設使得樸素貝葉斯演算法變得簡單,但有時會犧牲一定的分類準確率。

    首先給出貝葉斯公式:
    換成分類任務的表示式:
     我們最終求的p(類別|特徵)即可!就相當於完成了我們的任務。

6.K近鄰(KNN)

給一個新的資料時,離它最近的 k 個點中,哪個類別多,這個資料就屬於哪一類

 在KNN中,通過計算物件間距離來作為各個物件之間的非相似性指標,避免了物件之間的匹配問題,在這裡距離一般使用歐氏距離或曼哈頓距離:

                      

在訓練集中資料和標籤已知的情況下,輸入測試資料,將測試資料的特徵與訓練集中對應的特徵進行相互比較,找到訓練集中與之最為相似的前K個數據,則該測試資料對應的類別就是K個數據中出現次數最多的那個分類。

7.K均值(K-means)

K-means是一個反覆迭代的過程,演算法分為四個步驟:

1) 選取資料空間中的K個物件作為初始中心,每個物件代表一個聚類中心;

2) 對於樣本中的資料物件,根據它們與這些聚類中心的歐氏距離,按距離最近的準則將它們分到距離它們最近的聚類中心(最相似)所對應的類;

3) 更新聚類中心:將每個類別中所有物件所對應的均值作為該類別的聚類中心,計算目標函式的值;

4) 判斷聚類中心和目標函式的值是否發生改變,若不變,則輸出結果,若改變,則返回2)。

8.Adaboost

adaboost 是 bosting 的方法之一,是一種整合演算法,如多個決策樹根據錯分率賦予不同的權重。

boosting方法就是我們本文要講到的分類演算法,其與上面提到的bagging(2.隨機森林中有對bagging的介紹)很類似,都是採用同一種基分類器的組合方法。而與bagging不同的是,boosting是集中關注分類器錯分的那些資料來獲得新的分類器

  此外,bagging中分類器權重相等,而boosting中分類器的權值並不相等,分類器的錯誤率越低,那麼其對應的權重也就越大,越容易對預測結果產生影響。boosting有許多版本,而今天要介紹的是比較流行的AdaBoost。

AdaBoost的一般流程如下所示:

(1)收集資料

(2)準備資料:依賴於所用的基分類器的型別,這裡的是單層決策樹,即樹樁,該型別決策樹可以處理任何型別的資料。

(3)分析資料

(4)訓練演算法:利用提供的資料集訓練分類器

(5)測試演算法:利用提供的測試資料集計算分類的錯誤率

(6)使用演算法:演算法的相關推廣,滿足實際的需要

9.神經網路

Neural Networks 適合一個input可能落入至少兩個類別裡。一般來說,神經網路的架構可以分為三類:

前饋神經網路:
這是實際應用中最常見的神經網路型別。第一層是輸入,最後一層是輸出。如果有多個隱藏層,我們稱之為“深度”神經網路。

在 hidden 層 和 output 層都有自己的 classifier。

input 輸入到網路中,被啟用,計算的分數被傳遞到下一層,啟用後面的神經層,最後output 層的節點上的分數代表屬於各類的分數。同樣的 input 被傳輸到不同的節點上,之所以會得到不同的結果是因為各自節點有不同的weights 和 bias。


迴圈網路:
迴圈網路在他們的連線圖中定向了迴圈,這意味著你可以按照箭頭回到你開始的地方。他們可以有複雜的動態,使其很難訓練。他們更具有生物真實性。
迴圈網路的目的使用來處理序列資料。在傳統的神經網路模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連線的,每層之間的節點是無連線的。但是這種普通的神經網路對於很多問題卻無能無力。例如,你要預測句子的下一個單詞是什麼,一般需要用到前面的單詞,因為一個句子中前後單詞並不是獨立的。
迴圈神經網路,即一個序列當前的輸出與前面的輸出也有關。具體的表現形式為網路會對前面的資訊進行記憶並應用於當前輸出的計算中,即隱藏層之間的節點不再無連線而是有連線的,並且隱藏層的輸入不僅包括輸入層的輸出還包括上一時刻隱藏層的輸出。

對稱連線網路:
對稱連線網路有點像迴圈網路,但是單元之間的連線是對稱的(它們在兩個方向上權重相同)。比起迴圈網路,對稱連線網路更容易分析。這個網路中有更多的限制,因為它們遵守能量函式定律。沒有隱藏單元的對稱連線網路被稱為“Hopfield 網路”。有隱藏單元的對稱連線的網路被稱為玻爾茲曼機。

本文只對前饋神經網路展開討論。感知機可以說是神經網路的基礎。可以把感知機看作是 n 維例項空間中的超平面決策面,對於超平面一側的樣本,感知器輸出 1,對於另一側的例項輸出 0,這個決策超平面方程是 w⋅x=0。 那些可以被某一個超平面分割的正反樣例集合稱為線性可分(linearly separable)樣例集合。與、或、非問題都是線性可分的問題,使用一個有兩輸入的感知機能容易地表示,而異或並不是一個線性可分的問題,所以使用單層感知機是不行的,這時候就要使用多層感知機來解決疑惑問題了。

要訓練一個感知機,從隨機的權值開始,反覆地應用這個感知機到每個訓練樣例,只要它誤分類樣例就修改感知機的權值。重複這個過程,直到感知機正確分類所有的樣例。每一步根據感知機訓練法則來修改權值,也就是修改與輸入 xi 對應的權 wi,

法則如下:

這裡 t 是當前訓練樣例的目標輸出,o 是感知機的輸出,η 是一個正的常數稱為學習速率。學習速率的作用是緩和每一步調整權的程度,它通常被設為一個小的數值(例如 0.1),而且有時會使其隨著權調整次數的增加而衰減。

多層感知機,或者說是多層神經網路無非就是在輸入層與輸出層之間加了多個隱藏層而已,CNN,DBN等神經網路只不過是將重新設計了每一層的型別。

10.馬爾可夫

若隨機過程 滿足馬爾可夫性,則稱為馬爾可夫過程。一個馬爾科夫過程是狀態間的轉移僅依賴於前n個狀態的過程。這個過程被稱之為n階馬爾科夫模型。馬爾科夫鏈的節點是狀態,邊是轉移概率,是條件概率分佈的一種有向狀態轉移表達。