機器學習有着豐富的理論,分爲有監督學習和無監督學習,有監督學習包括分類和迴歸,無監督學習包括聚類等。各種機器學習算法的基本思想都不難理解(這裏的基本思想我的理解是各個算法的模型建立),而難點在於對於模型的求解,這裏邊有着優美的理論還有一些技巧,如SVM,EM,CART,AdaBoost,RF等。這些算法都是一些專家學者歷經數年乃至十數年的研究成果,要想將它們都研究透徹確實是一項大工程,多數算法深入下去都是一本書,因此這裏旨在從理解及應用的角度對這些經典的機器學習算法進行review。
分類
1)KNN
KNN算法的原理是對於一個已標記的樣本集,不用對改樣本集進行分類器的訓練,而直接使用該樣本集作爲分類器。對於一個測試數據,我們直接計算該數據和已標記的樣本集中的數據相似度,選擇和測試樣本最相似的K個數據的標記中累計最多的類別作爲對測試數據類別的預測。
該算法適用於樣本容量比較大的類域的自動分類,而那些樣本容量小的類域採用該方法比較容易產生誤分。
對於K值的選擇,K選擇過小,得到的近鄰數過少,會降低分類精度,同時也會放大噪聲數據的干擾,而如果K選擇過大,並且測試數據屬於已標記樣本集中較少的類別,那麼在選擇K近鄰時,實際上會將不太相似的數據亦被包含進來,造成噪聲增加而導致分類準確率的降低。
對於K值的選擇目前沒有什麼好的方法,一般採用先定一個初始值,然後根據實驗測試的結果調整K值,一般初始值設置爲幾百到幾千。
KNN算法的優點:較高的預測準確率,對噪聲數據不敏感,對數據沒有任何先驗假設不需要訓練分類器。
KNN算法的缺點:當樣本不平衡時,一個類別的樣本數據多,另一個類別的樣本數據少時會降低預測準確率,這可以採用加權的方法,例如和測試數據相似度較高的樣本數據獲得較大的權重。另一個不足之處是計算量大,目前常用的解決方法是對已標記的樣本集進行剪輯,去除分類作用不大的樣本數據。
KNN算法的預測目標:連續或不連續。
2)決策樹
決策樹也叫做分類樹,它被提出了兩次。一次由統計學家Breiman等提出,花了十多年時間出書了他們的研究成果CART(1984),CART是分類迴歸樹的簡寫,顧名思義,它既能用作分類(目標離散)也能用作迴歸(目標連續)。另一次由人工智能專家Quinlan等提出,ID3(1986),C4.5(1993)及C5.0等。CART和ID3等樹形結構用做分類時,除了在分裂過程中選擇屬性的標準不同外(CART選用Gini指標,ID3選用熵增益,C4.5選用熵增益率),其它基本一致,這裏對於決策樹僅討論ID3等算法。
構建決策樹的原則是儘量使得每個節點的樣本標籤儘可能少,算法描述如下:
Check if every itemin the dataset is in the same class:
If so return the class label
Else
find the best feature to split the data
split the dataset
create a branch node
for each split
call create Branch and add the resultto the branch node
return branch node
對於ID3算法find the best feature tosplit the data的準則就是儘量使得分支之後節點的類別純一些,也就是使得後續分類能夠準確一些,它用熵增益來衡量,熵增益越大說明分裂後得到的樣本集更純一些。
C4.5算法是對ID3算法的改進,它選用熵增益率準則來選擇best featureto split,目的在於分裂信息將阻礙選擇值爲均勻分佈的屬性。例如,考慮一個含有n個樣例的集合被屬性A徹底分割(分成n組,即一個樣例一組)。這時分裂信息的值爲log2n。相反,一個布爾屬性B分割同樣的n個實例,如果恰好平分兩半,那麼分裂信息值是1。如果屬性A和B產生同樣的信息增益,那麼根據增益比率度量,明顯B會得分更高。
使用熵增益比代替熵增益來選擇屬性產生的一個實際問題是,當某個Si接近S(|Si||S|)時分母可能爲0或非常小。如果某個屬性對於S的所有樣例有幾乎同樣的值,這時要麼會導致增益比率未定義,要麼是增益比率非常大。爲了避免選擇這種屬性,我們可以採用這樣一些啓發式規則,比如先計算每個屬性的增益,然後僅對那些增益高過平均值的屬性應用增益比率測試。
C4.5對ID3改進的方面還包括:能處理連續屬性數據,能夠對不完整數據進行處理在樹構造過程中進行剪枝,在構造決策樹的時候,爲了防止overfitting,那些掛着幾個元素的節點直接構成葉子節點,這實際上是一種先剪枝的算法,後面在講CART用於迴歸時會review一種後剪枝算法。
C5.0是將C4.5算法應用到Boosting算法中,Boosting是一種Ensemble的分類算法,功能很強大,和SVM在機器學習的分類算法中佔據重要地位。Ensemble的分類算法將在後面review。
決策樹算法的優點:計算複雜度低,學習結果易於理解,允許屬性缺失,可處理不相關的屬性。
決策樹算法的缺點:易於過擬合,可以選擇先剪枝或後剪枝算法防止過擬合。
決策樹算法的預測目標:連續或不連續。
3)樸素貝葉斯
貝葉斯決策就是對於一個測試數據,計算它屬於已知的標記的樣本數據集中的每個類別的概率,即P(Ci|x),選擇概率最大的一個作爲該測試數據的決策類別,也就是通過先驗概率求後驗概率。貝葉斯決策的原理就是經典的貝葉斯定理,貝葉斯定理是由貝葉斯公式導出的。貝葉斯公式爲:P(x|C)=P(xC)/P(C)=P(C|x)*P(x)/P(C),貝葉斯公式之所以有用是因爲對於P(x|C)我們容易求出,而對於P(C|x)不容易求出,而我們又比較關心P(C|x)。貝葉斯定理爲:P(C|x)= P(x|C)*P(C)/P(x)。
求P(Ci|x)時,由貝葉斯定理得到P(Ci|x)= P(x|Ci)*P(Ci)/P(x)。由於對於所有的Ci來說P(x)是一樣的,因此可以不考慮後驗概率P(Ci|x)的分母部分,僅比較分子大小而得出決策結果。分子由乘法構成,可以進行log處理,進而只需要進行加法計算。樸素貝葉斯假設樣本數據的所有屬性是獨立的,所以P(x1……xn|Ci)* P(Ci)=P(x1|Ci)*……*P(xn|Ci)*P(Ci),這實際上是對Ci類中的樣本數據屬性的條件概率的一個加權。
由於樸素貝葉斯假設樣本數據的屬性是獨立的,因此對於有些樣本集其決策結果不太好,於是有的學者又提出了一些加權的貝葉斯決策算法,基於屬性重要性的加權,基於屬性相關性的加權以及基於粗糙集加權的貝葉斯決策算法等。
樸素貝葉斯的優點:對於容量小的數據集有較好的決策效果,能夠處理多類別決策問題。
樸素貝葉斯的缺點:對於訓練樣本數據較爲敏感。
樸素貝葉斯的預測目標:不連續。
4)Logistic迴歸
Logistic迴歸要解決的問題是對於測試數據的預測target是以概率的形式出現的,比如給出衡量某疾病的一組因素,要預測出該組因素下某疾病是會出現還是不會出現。對於這樣的問題,用一般的多元線性迴歸來解決這樣的問題就不太合適。
Logistic迴歸分析,本質上是對一組因素的線性組合所產生某種結果的可能性的一種估量,這種估量由Logistic函數給出,P(x)=e^(p0+px)/(1+e^(p0+px))。我們將其線性化,看看P(x)到底有什麼意義,線性化得到:ln(P(x)/(1-p(x)))=p0+px,可以看出當P(x)很小時,p0+px的值會很小,當p(x)很大接近於1時,p0+px的值會很大,這是符合一般規律的,因爲一組因素線性組合產生的作用越強,那麼導致某種結果的概率就越大,相反一組因素線性組合產生的作用越弱,那麼導致某種結果的概率就越小,這也是爲什麼選擇Logistic函數來對一組因素的線性組合所產生某種結果的可能性進行估量。Logistic函數實際上是將一組因素的線性組合產生的作用強度映射到了(0,1)的概率空間,那麼只要選擇了合適的閾值很容易進行二分類。
有了Logistic函數這樣的一個模型,現在剩下的工作就是對p0和p參數進行估計了。估計出了參數,我們就能夠使用Logistic迴歸模型進行預測了。
設n個觀測值爲y1,y2……yn,設pi=p{yi=1|xi}爲給定xi條件下得到yi=1的概率。同樣條件下的到yi=0的概率爲p{yi=0|xi}=1-pi。於是由上述兩個方程得到的一個觀測值的概率爲p(yi)= (pi^yi)((1-pi)^(1-yi)),因爲各項觀測值獨立,所以它們的聯合分佈可以表示爲各邊際分佈的乘積:l(p0,p)= {p(x1)^yi[1-p(x1)]^(1-y1)}*……*{p(xn)^yn[1-p(xn)]^(1-yn)}。對似然函數l(p0,p)取對數有L(p0,p)={[y1ln(p(x1))]+(1-y1)ln[1-p(x1)]}+……+{[ynln(p(xn))]+(1-yn)ln[1-p(xn)]}。可以對L求導然後用Newton-Raphson方法進行迭代求解參數p0,p。但幸運的是,L是一個凸函數,可以選擇梯度下降或隨機梯度下降法求解參數p,p0。
上面的方法是針對目標爲離散的二分類情況,如果目標爲連續的概率(值域爲[0,1])值時,我們又該怎麼辦呢?我們觀察ln(P(x)/(1-p(x)))=p0+px公式,可以看出,先用ln(P(x)/(1-p(x)))對目標爲連續值的概率進行變換,然後採用多元線性迴歸模型進行參數估計就行了。至於預測,進行相反的步驟就可以了。
Logistic迴歸的優點:算法複雜度不高,容易實現,對知識的表達容易說明。
Logistic迴歸的缺點:可能擬合度不夠,預測準確率可能較低。
Logistic迴歸的預測目標:連續或不連續
5)SVM
SVM算法可以說一直佔據着分類算法老大的位置,有着相當優美的理論。總的來說SVM算法的思想(求解分類問題的模型建立)是不難理解的,難點在於對模型的求解。算法的核心思想是一個優化問題,這個優化問題可以描述爲:尋找到分割兩類樣本數據的超平面,該超平面要滿足各類中距離分類平面最近的點到分類平面的距離最大,也就是對類間間隔最大情況下的超平面的參數進行估計。尋找最優分類面的問題最終轉換成爲一個二次尋優問題,理論是上這個二次尋優問題的解是一個全局最優解(凸二次函數),這也避免了像神經網絡方法中不可避免的局部極值問題。從SVM的建模思想上來說,它能夠避免像神經網絡等模型那樣在降低訓練集上的分類錯誤時而導致的過擬合的情況,因此對於一些未見過的測試樣本具有更好的推廣能力。
SVM算法可分爲三類:線性可分、非線性可分以及需要核函數映射三種。下面對這三種情況及相關類容進行一個brief review。
(1)線性可分情況
假設最優分類超平面的方程爲:WTx+b=0。根據點到平面的距離公式,樣本數據x到最優分類超平面的距離可表示爲:| WTx+b|/||W||。現在我們想知道的是最優分類超平面方程的參數W和b,也就是建立如下模型:
argmax[W,b] { min[n] (| WTxn+b| / ||W||) }
上述模型中W,b爲最優分類超平面參數,n爲樣本數據編號。
模型建立好了,下面就開始求解模型了。從min[n] (| WTxn+b | / ||W||)中的| WTx+b | / ||W||,可以看出,通過等比例的對W和b加權縮放,那麼會存在很多的超平面滿足min[n] (| WTxn+b | / ||W||),於是我們對超平面進行規範化,選擇使最近樣本點xk到超平面的距離| WTxk+b| / ||W|| = 1時的W和b。現在從最近樣本點到最優分類超平面的距離表示爲:WTxk+b| / ||W|| = 1 / ||W||,此時最優分類超平面構成的分類間隔爲:
m = 2 / ||W||
現在我們的目標就是求使得m最大化的W,讓後將W帶入| WTxk+b | = 1即可得到b。
最大化m = 2 / ||W||,等價於最小化:
J(W) = (1/2)*||W||2
其中帶有約束條件:
yi((Wxi)+b) >= 1
(i=1, 2, 3,……,N)
yi是樣本點類別,其值爲+1或-1,(Wxi)=WTxi。
J(W)是一個帶約束的極值問題,通過拉格朗日乘數法,可將J(W)轉換成一個不受約束的極值問題,即關於W,b,和拉格朗日乘子α的最小化L:
L(W,b,α)=(1/2)*||W||2-∑i=1Nαi[yi((Wxi)+b)-1]
(αi > 0)
求L(W,b,α)對W和b的偏導,並令其等於零得到:
W=∑i=1Nαiyixi, ∑i=1Nαiyi=0
將上述兩式帶入L(W,b,α)得到:
L(α)=(-1/2)∑i=1N∑j=1Nαiαjyiyj(xixj)+∑i=1Nαi
(αi > 0, ∑i=1Nαiyi=0)
L(α)是一個關於α的拉格朗日對偶問題,是一個關於α的凸二次規劃問題,詳細解法可參看相關理論,後續有時間也會針對優化理論寫一寫博文。
根據最優化解的性質(Karush-Kuhn-Tucker-conditions),解α必須滿足:αi[yi(WTxi+b)-1]= 0(i = 1,……,N),因此對於每個樣本點必須滿足αi=0或yi(WTxi+b)-1=0。從而那些不滿足yi(WTxi+b)-1=0的樣本點對應的αi必爲0;而只有那些滿足yi(WTxi+b)-1=0的樣本點纔有對應的大於0的αi,這些樣本點就被稱作支持向量。
求出係數α,W,b的最優解α*,W*,b*後,得到如下的分類器:
h(x)=sgn((W*x)+b*)=sgn(∑i=1Nαi*yi(xix)+b*)
其中x是待分類的測試樣本數據,xi是N個訓練樣本數據,xi和x之間是點積的關係。對於非支持向量而言,其αi等於0,所以分類器可如下表示:
h(x)=sgn(∑i∈SVαi*yi(xix)+b*)
(2)非線性可分情況(C-SVM)
爲處理非線性情況,引入鬆弛變量ei>0,此時約束條件變爲:
yi((Wxi)+b) >= 1-ei
(i=1, 2, 3,……,n)
當ei=0,上述約束條件變爲線性可分時的約束條件;當0<ei<1時,說明約束條件允許樣本點落在分割間隔內,但大於0則說明分類超平面仍能夠正確分類;當ei>1時,說明約束條件已經允許分類超平面錯誤分類出現了。
附加一個錯誤代價係數C後,目標函數變爲最小化下式:
J(W,e) = (1/2)*||W||2+C∑i=1Nei
目標函數包括兩個部分,第一部分和線性可分情況一樣,第二部分是分類造成的分類錯誤代價,只有ei>0的那些“錯誤”樣本點(錯誤分類和落在分類間隔內的樣本點)纔會產生代價。事實上,最小化目標函數J(W,e)體現了對最大化間隔(目標函數第一部分)和最小錯誤分類代價(目標函數第二部分)之間的權衡。通過調整代價係數C的值,可以對兩者之間進行權衡,找出最優的C來降低分類器的訓練錯誤同時保證適當的推廣能力。
類似線性可分情況的推導,可得到一個對偶問題,最大化下式:
L(α)=∑i=1Nαi - 1/2∑i=1N∑j=1Nαiαjyiyj(xixj)
(0<αi<C, ∑i=1Nαiyi=0)
再用二次規劃技術求出係數α,W,b的最優解α*,W*,b*後,得到的分類器與線性可分情況一樣。
(3)核函數映射情況
線性分類的能力畢竟有限,而且對於非線性可分情況也不能一味的放寬約束條件,這樣會導致更多的訓練錯誤。這時可以通過一個非線性映射f:Rn->RD將樣本數據映射到高維的特徵空間RD,映射後的樣本數據在RD特徵空間中線性可分。如果在高維特徵空間中仍非線性可分,則可考慮非線性可分的情況。在分類時,我們直接將測試樣本數據映射到高維特徵空間後,使用RD特徵空間中的分類器。
類似(2)中的推導過程,我們得到如下對偶問題,最大化下式:
L(α)=∑i=1Nαi - 1/2∑i=1N∑j=1Nαiαjyiyj(f(xi)f(xj))
(0<αi<C, ∑i=1Nαiyi=0)
這時有:
W=∑i=1Nαiyif(xi)
所以最終的分類器爲:
h(x)=sgn((W*f(x))+b*)=sgn(∑i=1Nαi*yi(f(xi)f(x))+b*)
同樣對於非支持向量而言,其αi等於0,於是上式可表示爲:
h(x)=sgn(∑i∈SVαi*yi(f(xi)f(x))+b*)
(4)核函數
一般情況下我們都沒必要關係映射函數f的具體形式。可以注意到在(3)中的優化函數L(α)以及分類函數h(x)中都只涉及的樣本特徵之間的點積運算(f(xi)f(xj))。因此在高維空間只需要進行點積運算,向量的點積也就是一個常數,那麼我們能不能夠拋開f的具體形式,而根據原特徵空間中的xi,xj直接得到(f(xi)f(xj))的結果呢?答案是肯定的,這可以用原特徵空間中的核函數實現的。
根據泛函的相關理論,只要一種核函數K(xi,xj)滿足Mercer條件,它就對應某一變換空間(RD)中的內積。Mercer核函數計算高維空間中的點積公式:
K(xi,xj) = (f(xi)f(xj))
常用的核函數有線性和函數,多項式核函數,徑向基核函數,Sigmoid核函數等,其中徑向基核函數最爲常用。
SVM的優點:分類錯誤率低,計算量低,結果容易解釋。
SVM的缺點:對參數調整和核函數的選擇較爲敏感,基本算法只能用於而分類。
SVM的預測目標:連續或不連續。
有三種策略將二分類SVM推廣到多分類,它們分別是一對多最大響應策略、一對一投票策略及一對一淘汰策略。
6)Ensemble
Ensemble類的分類算法的核心思想是由弱分類器構造強分類器,其大致可以分爲兩類,一類是基於Bagging(Bootstrap Aggregating)的,另一類基於Boosting的。基於Bagging的常用算法是RF(Random Forest),基於Boosting的常用算法是AdaBoost。
AdaBoost和RF算法雖然沒有as elegant as SVM的theory,但是他們的思想是非常有意思的,可以說都是resultof thinking’s collision,他們的核心思想都是由弱分類器構造強分類器。
(1)AdaBoost
AdaBoost是1995年Freund和Schapire提出的,它解決了早期的Boosting算法存在的許多問題。其算法僞代碼描述(Robert E. Schapire, A brief introduction to boosting,1999)如下:
AdaBoost和Random Forests算法最大的區別在於AdaBoost算法中的弱分類器的組合權重不一樣,而bagging的每個弱分類器的組合權重是相等的。
AdaBoost算法的優點:較低的推廣(測試)誤差,編碼容易,適用於多數的分類器,不用調整參數。
AdaBoost算法的缺點:對異常數據敏感。
(2)Random Forest
Random Forest是Bagging (Breiman, 1996)和Random Feature Selection(Amit and Geman 1997)的結合。RandomForest算法對輸入的數據要進行行(Bagging)、列(Random Feature Selection)的採樣。對於行採樣,採用有放回的方式,也就是在採樣得到的樣本集合中,可能有重複的樣本。假設輸入樣本爲N個,那麼採樣的樣本也爲N個。這樣使得在訓練的時候,每一棵樹的輸入樣本都不是全部的樣本,使得相對不容易出現over-fitting。然後進行列採樣,從M個feature中,選擇m個(m<M)。之後就是對採樣之後的數據使用完全分裂的方式建立出決策樹,這樣決策樹的某一個葉子節點要麼是無法繼續分裂的,要麼裏面的所有樣本的都是指向的同一個分類。
Random Forest在衡量generalization error時,使用的是out-of-bagestimation方法,主要是Bagging採樣使得這種方法成爲可能。Random Forest還提供了屬性重要性的計算方法,其描述爲:1)對於隨機森林中的每一顆決策樹,使用相應OOB(袋外數據)數據來計記爲OOBerr1;2)隨機地對袋外數據OOB所有樣本數據的特徵xi加入噪聲干擾(就可以隨機的改變樣本在特徵xi處的值),再次計算它的袋外數據誤差,記爲errOOB2;3)假設隨機森林中有N棵樹,那麼對於特徵xi的重要性爲∑(errOOB2-errOOB1)/N,之所以可以用這個表達式作爲相應特徵的重要性的度量值是因爲,若給某個特徵隨機加入噪聲之後,袋外的準確率大幅度降低,則說明這個特徵對於樣本的分類結果影響很大,也就是說它的重要程度比較高。
基於Random Forest提供的屬性重要性計算方法,提出了隨機森林的特徵選擇方法(Robin Genuer, Variable Selection using Random Forests,2012)。
首先特徵選擇的目標有兩個:
1’:找到與因變量高度相關的特徵變量。
2’:選擇出數目較少的特徵變量並且能夠充分的預測應變量的結果。
其次一般特徵選擇的步驟爲:
1’:初步估計和排序
a)對隨機森林中的特徵變量按照VI(Variable Importance)降序排序。
b)確定刪除比例,從當前的特徵變量中剔除相應比例不重要的指標,從而得到一個新的特徵集。
c)用新的特徵集建立新的隨機森林,並計算特徵集中每個特徵的VI,並排序。
d)重複以上步驟,直到剩下m個特徵。
2’:根據1中得到的每個特徵集和它們建立起來的隨機森林,計算對應的袋外誤差率(OOB err),將袋外誤差率最低的特徵集作爲最後選定的特徵集。
Random Forest算法的優點:
1. 對於很多種資料,它可以產生高準確度的分類器。
2. 它可以處理大量的輸入變量。
3. 它可以在決定類別時,評估變量的重要性。
4. 在建造森林時,它可以在內部對於一般化後的誤差產生不偏差的估計。
5. 它包含一個好方法可以估計遺失的資料,並且,如果有很大一部分的資料遺失,仍可以維持準確度。
6. 它提供一個實驗方法,可以去偵測 variable interactions 。
7. 對於不平衡的分類資料集來說,它可以平衡誤差。
8. 它計算各例中的親近度,對於數據挖掘、偵測偏離者(outlier)和將資料視覺化非常有用。
9. 使用上述。它可被延伸應用在未標記的資料上,這類資料通常是使用非監督式聚類。也可偵測偏離者和觀看資料。
10. 學習過程是很快速的。
Random Forest算法的缺點:
1. 隨機森林已經被證明在某些噪音較大的分類或迴歸問題上會過擬。
2. 對於有不同級別的屬性的數據,級別劃分較多的屬性會對隨機森林產生更大的影響,所以隨機森林在這種數據上產出的屬性權值是不可信的。
Random Forest算法預測目標:連續或不連續。
參考資料:
Machine Learning in Action
Induction of Decision Trees
數字圖像處理與機器視覺
A brief introduction to boosting
Random Forests
Variable Selection using Random Forests
http://blog.csdn.net/cuoqu/article/details/9319459
http://www.cnblogs.com/wentingtu/archive/2011/12/22/2297405.html
http://www.360doc.com/content/13/1206/09/13528701_334877080.shtml