1. 程式人生 > >我對adaboost的一點理解

我對adaboost的一點理解

我理解的adaboost演算法

  ————由程式反觀演算法

容易在介紹adaboost演算法的文章中找到其演算法流程

我的疑問:1、第三步如何根據訓練資料訓練弱分類器?弱分類器的個數由什麼定,特徵維  數?

  2、第四步那個公式什麼意思?

  3、第七步如何歸一化?

  4、第八步怎麼理解?

很多文章是這樣來介紹adaboost演算法的:給訓練樣本分配權重,一般第一次平均分配,即:。訓練弱分類器,根據訓練結果的誤差率決定該分類器所佔權重,同時調整樣本權重,判對的樣本權重被減小(第七步中,乘以),判錯的樣本權重被加大(第七步,乘以),以便在下一輪訓練中更加關注這些分錯的樣本。如此重複T輪,直到訓練完成。這樣

T個弱分類器就被加強成為了一個強分類器。

類似的說法看了很多,但我只能說對adaboost有最粗略的感性認識:這是一個由弱到強的過程。至於怎麼樣得到弱分類器,又是怎麼從弱到強的,我根本不瞭解。而這些才是這個演算法的核心。於是我試著上網找程式,我想程式中肯定有處理的細節。我找到了 一個外國人寫的程式,花了一天半看通了程式,才明白其實所謂的“一個弱分類器”其實也就是一次運用某維特徵並且選取某閾值及判決方向使判錯樣本權值之和最小的過程。這句話包含的意思是:一個弱分類器的判決用的只是所有訓練樣本n維特徵中的一維而已,在那一維特徵下選取適當的閾值及方向(光有閾值當然不行,比如閾值為39,那麼是把該維特徵大於

39的樣本判為正樣本呢,還是小於39的判為正樣本呢?)可以得到當前樣本權重分配情況(此時樣本權重可能已經不是平均分配的了,而是經過了權重調整,有的大,有的小)下的最小判錯樣本權重之和(注意,與錯誤率是兩個不同概念!二者只有在樣本權重平均分配時才是相同概念)。某維特徵在前面判決中已經用過了並不影響後面的弱分類器還是用該維特徵來判,只要該維特徵在那一輪的判決中可以使判錯樣本權重之和最小。也就是說訓練樣本只有n維特徵,但是也可以訓練出無數個弱分類器(無數次地從這n維特徵中找最優)。

訓練出一個弱分類器的意思是找到了某維特徵、閾值、方向。同時,這個弱分類判決的結果在最後的綜合中佔據的重要性,即弱分類器的權重(區別樣本權重,全文共涉及這兩個權重)也由該弱分類器的判錯樣本權重和(不是錯誤率)決定了,即第四步的。所以第四步那個公式的意思就是判錯樣本權重求和。訓練出一個分類器了之後,改變樣本權重的意義在於“下一個弱分類器能夠更加關注這些判錯的樣本,從而把判錯的樣本判對”。為什麼加大判錯樣本的權重就能讓下一個弱分類器更加關注他們呢?因為我們選擇的標準是“判錯樣本權重之和最小”,可以想像,在這個標準的指引下,不論判決具體用到哪一維特徵,我們都趨向於將上次判錯的樣本判對,不然它們每個的權重都那麼大,連它們都判錯了,就不可能使“權重之和最小”了。

這樣就有另外一個問題了,從結果來看,我們無疑達到了選擇的標準,“使得判錯的樣本權重和最小”(有可能因為“足夠小”使得該弱分類器的權重很大!),但是另一個不爭的事實是我們把本輪判決的閾值和方向做了有利於那些上一輪判錯的樣本的改變。也就是說盡管此時我們的“判錯樣本權重之和很小”,實際上此時的錯誤率是很高的。有很多樣本在這個弱分類器的判決中,在我們選定的某一維特徵、閾值、方向下,被錯判了!偏偏這個弱分類器的權重又那麼大,豈不是會導致最後的結果有很多錯誤?

這個問題可以這樣理解:從整個訓練過程來看,我們總是趨向於將所有樣本判對,即正樣本判為正樣本,負樣本判為負樣本。儘管某樣本可能被某個弱分類器判錯,毫無疑問在下一個弱分類器的訓練過程中它的權重會被加大,被判對的可能性增大,即從T個弱分類器的整體結果來看它趨向於把該樣本判對。極端一點,某個權重很大的弱分類器把某樣本判錯了,但是其他T-1個弱分類器都把它判對了,這T-1個弱分類器的權重之和完全可能大於那個權重很大的弱分類器(當然也可能小於,那它就不幸包含在錯誤率中了,我們只能期望用更多的弱分類器把它分對),最後的結果還是把它判對。

關於adaboost演算法的計算過程,舉個簡單的例子來說明,假設每個樣本只有兩個特徵。這樣我們可以方便地用平面上的一個點表徵一個樣本。如下圖

上面幾個圖說明了兩個問題:1、弱分類器對訓練樣本的判決其實是按某維特徵對訓練集一刀切。所以我認為這樣的示意圖是不對的。

2.訓練完成後實際是對特徵空間進行了某種劃分。而檢測時則是看該樣本處在特徵空間的哪個劃分區。處於正樣本曲則判為正樣本,處在負樣本區則判為負樣本。