分類器的作用:常規(guī)任務是利用給定的類別、已知的訓練數(shù)據來學習分類規(guī)則和分類器,然后對未知數(shù)據進行分類(或預測)。邏輯回歸(logistics)、SVM等常用于解決二分類問題,對于多分類問題(multi-class classification),比如識別手寫數(shù)字,它需要10個分類,同樣也可以用邏輯回歸或SVM,只是需要多個二分類來組成多分類,但這樣容易出錯且效率不高,常用的多分類方法有softmax。 分類算法:劃分為了兩類 1.基于概率密度的方法和基于判別函數(shù)的方法。
2.根據監(jiān)督方式劃分分類算法,分類學習問題可分為三大類:有監(jiān)督分類、半監(jiān)督分類和無監(jiān)督分類。
Softmax分類Softmax 函數(shù)的定義如下所示: 其中,Vi 是分類器前級輸出單元的輸出。i 表示類別索引,總的類別個數(shù)為 C。Si 表示的是當前元素的指數(shù)與所有元素指數(shù)和的比值。Softmax 將多分類的輸出數(shù)值轉化為相對概率,更容易理解和比較。 使用softmax激勵函數(shù)作為輸出層的多層感知機,卷積層和池化層每個的輸出代表高級特征,目的是用這些特征進行分類。加入全連接層也是學習特征之間非線性組合的有效辦法。卷積層和池化層提取出來的特征很好,但是如果考慮這些特征之間的組合,就更好了。 Softmax函數(shù)把任意實值的向量轉變成元素取之0到1且和為1的向量。將多個神經元的輸出,映射到(0,1)區(qū)間內,可以看成概率來理解,從而來進行多分類。
logistic分類器以Bernoulli(伯努利) 分布為模型建模的,顧名思義,邏輯分類,是一種二分類法,能將數(shù)據分成0和1兩類。logistic分類的流程比較簡單,主要有線性求和,sigmoid函數(shù)激活,計算誤差,修正參數(shù)這4個步驟。前兩部用于判斷,后兩步用于修正。 線性求和以及sigmoid函數(shù) 假設有一個n維的輸入列向量 x,也有一個n維的參數(shù)列向量h, 還有一個偏置量b, 那么就可以線性求和得到z 此時因為z的值域是[?∞,+∞] ,是無法根據z來判斷x 到底是屬于0還是1的。因此我們需要一個函數(shù),來將z的值映射到[0,1]之間, 這就是激活函數(shù)。激活函數(shù)有很多種,這里的激活函數(shù)是sigmoid函數(shù)。 sigmoid函數(shù)形狀為 可以看到它是介于0~1之間。那么在判斷的時候,首先對之前得到的z代入sigmoid函數(shù) 當 a 大于0.5的時候,我們判定x應屬于1類,如果小于0.5,則屬于0類。這樣,就完成了判斷的工作 。 詳細過程:https://www.cnblogs.com/yinheyi/p/6131262.html 誤差計算以及參數(shù)修正 上面完成的判斷過程中用到了參數(shù)向量h和偏置量b。 可以說,h和b的值直接關系到logistic判斷的準確性。那么這兩組參數(shù)是如何獲得的呢?這就涉及到了參數(shù)的修正。在最開始的時候,h中的值是隨機的,而b的值是0. 我們通過不斷的訓練來使得h和b能夠盡可能的達到一個較優(yōu)的值。 那么如何訓練呢?假設我們期望輸入x的判定是y,而實際得到的判定值是a,那么我們定義一個損失函數(shù)C(a,y),通過修正h和b的值來使得C最小化,這是一個優(yōu)化問題。在凸優(yōu)化問題中,可以通過 來直接算得h和b的最優(yōu)解。然而在某些情況下,例如數(shù)據規(guī)模很大,或者非凸優(yōu)化問題中,則不能這么做,而是用迭代的方法來得到局部最優(yōu)解。 其中 η 表示學習率。在這里,損失函數(shù)定為平方損失函數(shù),即 那么可以得到 這樣,就能夠得到每次迭代的參數(shù)更新公式為 將logistic擴展到多分類 從之前可以看出,普通的logistic只能進行二分類,即只能夠分為0或者1。那么如果這些樣本屬于多個類該怎么辦呢?人們想了很多辦法,例如一對多法,依次把某個類別的樣本歸為一類,其他剩余的樣本歸為另一類,這樣k個類需要構建k個分類器。還有一對一法,在任意兩類樣本之間設計一個分類器,k個類需要k(k-1)/2個分類器。 在這里,我們將輸出由一個值更改為一個向量。例如有3個類,那么輸出就是一個長度為3 的列向量,對應項的值為1,其他為0。即 分別表示第0,1,2個類。 也可以看成是原來若干個logistic分類器組合在一起。對應的某個分類器只對該類輸出1,其他情況都輸出0.從這一點上來講,這個做法有點類似于一對多法。此時,由于輸出從一個數(shù)成為一個向量,之前的公式都要加以修改。首先,原來的y,a,z,b變成了列向量, 向量hh變成了矩陣W。這樣,判斷部分的公式變?yōu)?/p> 此時的 σ 函數(shù)表示對向量中的每一個元素單獨做運算。即 得到的a向量中,其最大值所在的位置索引即為判斷出的分類。 參數(shù)修正部分的公式也是類似的, 注意有些向量之間是進行點乘的。 Boosting顧名思義,是提升的意思。弱分類器轉化為強分類器---原理即三個臭皮匠,賽過諸葛亮一樣。把很多分類準確率很低的分類器通過更新對數(shù)據的權重,集成起來形成一個分類效果好的分類器。 它是一種框架算法,先從初始訓練集訓練出一個基學習器,再根據基學習器的表現(xiàn)對訓練樣本分布進行調整,使得先前基學習器做錯的訓練樣本在后續(xù)受到更多的關注,然后基于調整后的樣本分布來訓練下一個基學習器;如此重復進行,直至基學習器數(shù)目達到事先指定的值T,最終將這T個基學習器進行加權結合。 一般來說,找到弱學習算法要相對容易一些,然后通過反復學習得到一系列弱分類器,組合這些弱分類器得到一個強分類器。Boosting算法要涉及到兩個部分,加法模型和前向分步算法。加法模型就是說強分類器由一系列弱分類器線性相加而成。一般組合形式如下: 其中,h(x;am)是一個個的弱分類器,am是弱分類器學習到的最優(yōu)參數(shù),βm是弱學習在強分類器中所占比重,P是所有am和βm的組合,這些弱分類器線性相加組成強分類器。 前向分步就是說在訓練過程中,下一輪迭代產生的分類器是在上一輪的基礎上訓練得來的。也就是可以寫成這樣的形式: 由于采用的損失函數(shù)不同,Boosting算法有很多不同的類型,其中比較經典的有AdaBoost,其損失函數(shù)為指數(shù)損失的。 AdaboostBoosting有一個重大缺陷,即該算法要求事先知道弱分類算法分類正確率的下限,這在實際問題中很難做到。 Adaptive Boosting,自適應增強。它的自適應在于:前一個基本分類器分錯的樣本會得到加強,加權后的全體樣本再次被用來訓練下一個基本分類器。同時,在每一輪中加入一個新的弱分類器,直到達到某個預定的足夠小的錯誤率或達到預先指定的最大迭代次數(shù)。 Adaboost 迭代算法分為3步:
算法流程 給定一個訓練數(shù)據集T={(x1,y1), (x2,y2)…(xN,yN)},其中實例,而實例空間,yi屬于標記集合{-1,+1},Adaboost的目的就是從訓練數(shù)據中學習一系列弱分類器或基本分類器,然后將這些弱分類器組合成一個強分類器。 算法流程如下: 1.初始化訓練數(shù)據的權值分布。每一個訓練樣本最開始時都被賦予相同的權值:1/N。 2.進行多輪迭代,用m = 1,2, ..., M表示迭代的第多少輪 a.使用具有權值分布Dm的訓練數(shù)據集學習,得到基本分類器(選取讓誤差率最低的閾值來設計基本分類器): b.計算Gm(x)在訓練數(shù)據集上的分類誤差率 由上述式子可知,Gm(x)在訓練數(shù)據集上的誤差率em就是被Gm(x)誤分類樣本的權值之和。 c.計算Gm(x)的系數(shù),am表示Gm(x)在最終分類器中的重要程度(目的:得到基本分類器在最終分類器中所占的權重): 由上述式子可知,em≤1/2時,am≥0,am隨em減小而增大,分類誤差率越小的基本分類器在最終分類器中的作用越大。 d.更新訓練數(shù)據集的權值分布(目的:得到樣本的新的權值分布),用于下一輪迭代。
使得被基本分類器Gm(x)誤分類樣本的權值增大,而被正確分類樣本的權值減小,重點關注或聚焦于那些較難分的樣本上。 其中,Zm是規(guī)范化因子,使得Dm+1成為一個概率分布:
3.組合各個弱分類器 從而得到最終分類器,如下: 實例 有如下的訓練樣本,我們需要構建強分類器對其進行分類。x是特征,y是標簽。 令權值分布D1=(w1,1,w1,2,…,w1,10) 并假設一開始的權值分布是均勻分布:w1,i=0.1,i=1,2,…,10w1,i=0.1,i=1,2,…,10 現(xiàn)在開始訓練第一個弱分類器。發(fā)現(xiàn)閾值取2.5時分類誤差率最低,得到弱分類器為: 當然,也可用別的弱分類器,只要誤差率最低即可。這里為了方便,用了分段函數(shù)。得到了分類誤差率e1=0.3。 第二步計算G1(x)在強分類器中的系數(shù) 第三步更新樣本的權值分布,用于下一輪迭代訓練。由公式: 得到新的權值分布,從各0.1變成了: 可以看出,被分類正確的樣本權值減小了,被錯誤分類的樣本權值提高了。 第四步得到第一輪迭代的強分類器: 以此類推,經過第二輪……第N輪,迭代多次直至得到最終的強分類器。迭代范圍可以自己定義,比如限定收斂閾值,分類誤差率小于某一個值就停止迭代,比如限定迭代次數(shù),迭代1000次停止。這里數(shù)據簡單,在第3輪迭代時,得到強分類器: 的分類誤差率為0,結束迭代。 F(x)=sign(F3(x))就是最終的強分類器。 SVM借鑒博客:https://blog.csdn.net/mm_bit/article/details/46988925
support vector machines,支持向量機,是一個二分類的分類模型(經改造后也可用于多分類,但比較復雜)。分類的思想是,給定給一個包含正例和反例的樣本集合,其目的是尋找一個超平面來對樣本根據正例和反例進行分割,尋找一個超平面,使得離超平面比較近的點能有更大的間距。也就是我們不考慮所有的點都必須遠離超平面,我們關心求得的超平面能夠讓所有點中離它最近的點具有最大間距。 優(yōu)點: 在解決小樣本、非線性及高維模式識別中表現(xiàn)出許多特有的優(yōu)勢,并能夠推廣應用到函數(shù)擬合等其他機器學習問題中。 如下面3個圖,分類圖1中的兩類球,很簡單,用一根棍子即可;但圖2中一條直線貌似不能完成分類的任務,可以想象就像武俠片的大俠一樣,拍下桌子,球飛到空中。然后,大俠抓起一張紙,插到了兩種球的中間,如圖2右邊的部分;從直觀的角度看這些球像是被一條曲線分開了,如圖3。其中這些球叫做【data】,棍子叫做【classifier】, 最大間隙trick叫做【optimization】, 拍桌子叫做【kernelling】,那張紙叫做【hyperplane】。
如果一個線性函數(shù)能夠將樣本完全正確的分開,就稱這些數(shù)據是線性可分的,否則稱為非線性可分的。線性函數(shù)在一維空間里就是一個點,在二維空間里就是一條直線,三維空間里就是一個平面,如果不關注空間的維數(shù),這種線性函數(shù)叫做超平面(Hyper Plane)。在樣本空間中,劃分超平面可通過如下線性方程來描述:
假設它已經完成了對樣本的分隔,且兩種樣本的標簽分別是{+1,-1},那么對于一個分類器來說,g(x)>0和個g(x)<0就可以分別代表兩個不同的類別,+1和-1。 但光是分開是不夠的,SVM的核心思想是盡最大努力使分開的兩個類別有最大間隔,這樣才使得分隔具有更高的可信度。而且對于未知的新樣本才有很好的分類預測能力(在機器學習中叫泛化能力),SVM讓間隔最大的辦法是:讓離分隔面最近的數(shù)據點具有最大的距離。為了描述離分隔超平面最近的數(shù)據點,需要找到兩個和這個超平面平行和距離相等的超平面: H1: y = wTx + b=+1 和 H2: y = wTx + b=-1 在這兩個超平面上的樣本點也就是理論上離分隔超平面最近的點,是它們的存在決定了H1和H2的位置,支撐起了分界線,它們就是所謂的支持向量,這就是支持向量機的由來。 由兩個超平面就可以定義上面提到的間隔(margin)了,二維情況下 ax+by=c1和ax+by=c兩條平行線的距離公式為: 可以推出H1和H2兩個超平面的間隔為2/||w||,即現(xiàn)在的目的是要最大化這個間隔。所以support vector machine又叫Maximum margin hyper plane classifier(最大間隔超平面分類器),等價于最小化||w||,為了之后的求導和計算方便,進一步等價于最小化 。 假設超平面能將樣本正確分類,則可令:
兩個式子綜合一下有:
這就是目標函數(shù)的約束條件。現(xiàn)在這個問題就變成了一個最優(yōu)化問題: 而且這是一個凸二次規(guī)劃問題,一般的解決方法有兩種1是用現(xiàn)成的優(yōu)化工具包直接求解,2是使用Lagrange Duality找到一種更有效的方法求解。 實例 svm的輸入是一組向量以及每個向量對應的分類:
|
|
來自: cosmic_Klogger > 《機器學習》