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