我對adaboost的一點理解

2021-06-16 12:45:54 字數 2353 閱讀 5957

我理解的adaboost演算法

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

容易在介紹adaboost

演算法的文章中找到其演算法流程

我的疑問:1

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

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

3、第七步如何歸一化?

4、第八步怎麼理解?

很多文章是這樣來介紹adaboost

演算法的:給訓練樣本分配權重,一般第一次平均分配,即:

輪,直到訓練完成。這樣

t個弱分類器就被加強成為了乙個強分類器。

類似的說法看了很多,但我只能說對adaboost

有最粗略的感性認識:這是乙個由弱到強的過程。至於怎麼樣得到弱分類器,又是怎麼從弱到強的,我根本不了解。而這些才是這個演算法的核心。於是我試著上網找程式,我想程式中肯定有處理的細節。我找到了 乙個外國人寫的程式,花了一天半看通了程式,才明白其實所謂的「乙個弱分類器」其實也就是一次

運用某維特徵並且選取某閾值及判決方向使判錯樣本權值之和最小的過程。這句話包含的意思是:乙個弱分類器的判決用的只是所有訓練樣本n

維特徵中的一維而已,在那一維特徵下選取適當的閾值及方向(光有閾值當然不行,比如閾值為

39,那麼是把該維特徵大於

39的樣本判為正樣本呢,還是小於

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

n維特徵,但是也可以訓練出無數個弱分類器(無數次地從這

n維特徵中找最優)。

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

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

這個問題可以這樣理解:從整個訓練過程來看,我們總是趨向於將所有樣本判對,即正樣本判為正樣本,負樣本判為負樣本。儘管某樣本可能被某個弱分類器判錯,毫無疑問在下乙個弱分類器的訓練過程中它的權重會被加大,被判對的可能性增大,即從t

個弱分類器的整體結果來看它趨向於把該樣本判對。極端一點,某個權重很大的弱分類器把某樣本判錯了,但是其他

t-1個弱分類器都把它判對了,這

t-1個弱分類器的權重之和完全可能大於那個權重很大的弱分類器(當然也可能小於,那它就不幸包含在錯誤率中了,我們只能期望用更多的弱分類器把它分對),最後的結果還是把它判對。

關於adaboost

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

上面幾個圖說明了兩個問題:1、弱分類器對訓練樣本的判決其實是

按某維特徵對訓練集一刀切。所以我認為這樣的示意圖是不對的。

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

我對補碼的一點理解

剛剛學習c語言,接觸補碼時,有些不解,計算機為什麼要把減法變成加法來運算呢 一步到位,處理速度不更快麼?後來查了資料才知道,這與計算機本身的計算結構有關,減法變加法,物理方面更容易實現。但補碼是怎樣把減法便加法的呢?本人思考了一下,有如下心得 我們先來看一道題 59 18 47 就是 0011 10...

我對opensocia的一點l理解

我對opensocial的理解就是乙個開發者的開放平台,具體的說,是乙個應用到sns社群網的乙個第三方的api。它的使用者主要是針對開發者和sns社群 sns社群 根據opensocial 規則搭建乙個平台供開發者使用,開發者根據api在自己的作品做一定的修改,用來符合opensocial的規則,就...

我對stl和GP的一點理解

什麼是stl?什麼是template?其實之所以要有stl,要有gp,那是因為對於一些不同型別的資料,他們常常有一些相同的操作,比如同一型別的兩個資料之間相加,相減。而我們常常對不同型別的資料又會有一些相同的操作的過程,或者我喜歡稱為有順序的一組操作集合,這個過程中,除了物件的型別不一樣,其他的都一...