Adaboost 算法的原理與推導

2021-02-13 算法愛好者
(點擊上方公眾號,可快速關注)

來源:v_JULY_v

blog.csdn.net/v_july_v/article/details/40718799

如有好文章投稿,請點擊 → 這裡了解詳情

1 Adaboost的原理


1.1 Adaboost是什麼    


AdaBoost,是英文"Adaptive Boosting"(自適應增強)的縮寫,由Yoav Freund和Robert Schapire在1995年提出。它的自適應在於:前一個基本分類器分錯的樣本會得到加強,加權後的全體樣本再次被用來訓練下一個基本分類器。同時,在每一輪中加入一個新的弱分類器,直到達到某個預定的足夠小的錯誤率或達到預先指定的最大迭代次數。

具體說來,整個Adaboost 迭代算法就3步:

初始化訓練數據的權值分布。如果有N個樣本,則每一個訓練樣本最開始時都被賦予相同的權值:1/N。

訓練弱分類器。具體訓練過程中,如果某個樣本點已經被準確地分類,那麼在構造下一個訓練集中,它的權值就被降低;相反,如果某個樣本點沒有被準確地分類,那麼它的權值就得到提高。然後,權值更新過的樣本集被用於訓練下一個分類器,整個訓練過程如此迭代地進行下去。

將各個訓練得到的弱分類器組合成強分類器。各個弱分類器的訓練過程結束後,加大分類誤差率小的弱分類器的權重,使其在最終的分類函數中起著較大的決定作用,而降低分類誤差率大的弱分類器的權重,使其在最終的分類函數中起著較小的決定作用。換言之,誤差率低的弱分類器在最終分類器中佔的權重較大,否則較小。

1.2 Adaboost算法流程

給定一個訓練數據集T={(x1,y1), (x2,y2)…(xN,yN)},其中實例x \in \mathcal{X},而實例空間\mathcal{X} \subset \mathbb{R}^n,yi屬於標記集合{-1,+1},Adaboost的目的就是從訓練數據中學習一系列弱分類器或基本分類器,然後將這些弱分類器組合成一個強分類器。

Adaboost的算法流程如下:

使用具有權值分布Dm的訓練數據集學習,得到基本分類器(選取讓誤差率最低的閾值來設計基本分類器):

計算Gm(x)在訓練數據集上的分類誤差率

 

由上述式子可知,Gm(x)在訓練數據集上的誤差率em就是被Gm(x)誤分類樣本的權值之和。

計算Gm(x)的係數,am表示Gm(x)在最終分類器中的重要程度(目的:得到基本分類器在最終分類器中所佔的權重):


由上述式子可知,em <= 1/2時,am >= 0,且am隨著em的減小而增大,意味著分類誤差率越小的基本分類器在最終分類器中的作用越大。

更新訓練數據集的權值分布(目的:得到樣本的新的權值分布),用於下一輪迭代


使得被基本分類器Gm(x)誤分類樣本的權值增大,而被正確分類樣本的權值減小。就這樣,通過這樣的方式,AdaBoost方法能「重點關注」或「聚焦於」那些較難分的樣本上。

其中,Zm是規範化因子,使得Dm+1成為一個概率分布:

從而得到最終分類器,如下:

1.3 Adaboost的一個例子

下面,給定下列訓練樣本,請用AdaBoost算法學習一個強分類器。

求解過程:初始化訓練數據的權值分布,令每個權值W1i = 1/N = 0.1,其中,N = 10,i = 1,2, ..., 10,然後分別對於m = 1,2,3, ...等值進行迭代。

拿到這10個數據的訓練樣本後,根據 X 和 Y 的對應關係,要把這10個數據分為兩類,一類是「1」,一類是「-1」,根據數據的特點發現:「0 1 2」這3個數據對應的類是「1」,「3 4 5」這3個數據對應的類是「-1」,「6 7 8」這3個數據對應的類是「1」,9是比較孤獨的,對應類「-1」。拋開孤獨的9不講,「0 1 2」、「3 4 5」、「6 7 8」這是3類不同的數據,分別對應的類是1、-1、1,直觀上推測可知,可以找到對應的數據分界點,比如2.5、5.5、8.5 將那幾類數據分成兩類。當然,這只是主觀臆測,下面實際計算下這個具體過程。

迭代過程1

對於m=1,在權值分布為D1(10個數據,每個數據的權值皆初始化為0.1)的訓練數據上,經過計算可得:

閾值v取2.5時誤差率為0.3(x < 2.5時取1,x > 2.5時取-1,則6 7 8分錯,誤差率為0.3),

閾值v取5.5時誤差率最低為0.4(x < 5.5時取1,x > 5.5時取-1,則3 4 5 6 7 8皆分錯,誤差率0.6大於0.5,不可取。故令x > 5.5時取1,x < 5.5時取-1,則0 1 2 9分錯,誤差率為0.4),

閾值v取8.5時誤差率為0.3(x < 8.5時取1,x > 8.5時取-1,則3 4 5分錯,誤差率為0.3)。

可以看到,無論閾值v取2.5,還是8.5,總得分錯3個樣本,故可任取其中任意一個如2.5,弄成第一個基本分類器為:

上面說閾值v取2.5時則6 7 8分錯,所以誤差率為0.3,更加詳細的解釋是:因為樣本集中

0 1 2對應的類(Y)是1,因它們本身都小於2.5,所以被G1(x)分在了相應的類「1」中,分對了。

3 4 5本身對應的類(Y)是-1,因它們本身都大於2.5,所以被G1(x)分在了相應的類「-1」中,分對了。

但6 7 8本身對應類(Y)是1,卻因它們本身大於2.5而被G1(x)分在了類"-1"中,所以這3個樣本被分錯了。

9本身對應的類(Y)是-1,因它本身大於2.5,所以被G1(x)分在了相應的類「-1」中,分對了。

從而得到G1(x)在訓練數據集上的誤差率(被G1(x)誤分類樣本「6 7 8」的權值之和)e1=P(G1(xi)≠yi) = 3*0.1 = 0.3。

然後根據誤差率e1計算G1的係數:

這個a1代表G1(x)在最終的分類函數中所佔的權重,為0.4236。

接著更新訓練數據的權值分布,用於下一輪迭代:

值得一提的是,由權值更新的公式可知,每個樣本的新權值是變大還是變小,取決於它是被分錯還是被分正確。

即如果某個樣本被分錯了,則yi * Gm(xi)為負,負負得正,結果使得整個式子變大(樣本權值變大),否則變小。

第一輪迭代後,最後得到各個數據新的權值分布D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715,  0.0715, 0.1666, 0.1666, 0.1666, 0.0715)。由此可以看出,因為樣本中是數據「6 7 8」被G1(x)分錯了,所以它們的權值由之前的0.1增大到0.1666,反之,其它數據皆被分正確,所以它們的權值皆由之前的0.1減小到0.0715。

分類函數f1(x)= a1*G1(x) = 0.4236G1(x)。

此時,得到的第一個基本分類器sign(f1(x))在訓練數據集上有3個誤分類點(即6 7 8)。

從上述第一輪的整個迭代過程可以看出:被誤分類樣本的權值之和影響誤差率,誤差率影響基本分類器在最終分類器中所佔的權重。

 迭代過程2

對於m=2,在權值分布為D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715,  0.0715, 0.1666, 0.1666, 0.1666, 0.0715)的訓練數據上,經過計算可得:

閾值v取2.5時誤差率為0.1666*3(x < 2.5時取1,x > 2.5時取-1,則6 7 8分錯,誤差率為0.1666*3),

閾值v取5.5時誤差率最低為0.0715*4(x > 5.5時取1,x < 5.5時取-1,則0 1 2 9分錯,誤差率為0.0715*3 + 0.0715),

閾值v取8.5時誤差率為0.0715*3(x < 8.5時取1,x > 8.5時取-1,則3 4 5分錯,誤差率為0.0715*3)。

所以,閾值v取8.5時誤差率最低,故第二個基本分類器為:

面對的還是下述樣本:

很明顯,G2(x)把樣本「3 4 5」分錯了,根據D2可知它們的權值為0.0715, 0.0715,  0.0715,所以G2(x)在訓練數據集上的誤差率e2=P(G2(xi)≠yi) = 0.0715 * 3 = 0.2143。

計算G2的係數:

更新訓練數據的權值分布:

D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667,  0.01667, 0.1060, 0.1060, 0.1060, 0.0455)。被分錯的樣本「3 4 5」的權值變大,其它被分對的樣本的權值變小。

f2(x)=0.4236G1(x) + 0.6496G2(x)

此時,得到的第二個基本分類器sign(f2(x))在訓練數據集上有3個誤分類點(即3 4 5)。

迭代過程3

對於m=3,在權值分布為D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667,  0.01667, 0.1060, 0.1060, 0.1060, 0.0455)的訓練數據上,經過計算可得:

閾值v取2.5時誤差率為0.1060*3(x < 2.5時取1,x > 2.5時取-1,則6 7 8分錯,誤差率為0.1060*3),

閾值v取5.5時誤差率最低為0.0455*4(x > 5.5時取1,x < 5.5時取-1,則0 1 2 9分錯,誤差率為0.0455*3 + 0.0715),

閾值v取8.5時誤差率為0.1667*3(x < 8.5時取1,x > 8.5時取-1,則3 4 5分錯,誤差率為0.1667*3)。

所以閾值v取5.5時誤差率最低,故第三個基本分類器為:

依然還是原樣本:

此時,被誤分類的樣本是:0 1 2 9,這4個樣本所對應的權值皆為0.0455,

所以G3(x)在訓練數據集上的誤差率e3 = P(G3(xi)≠yi) = 0.0455*4 = 0.1820。

計算G3的係數:

更新訓練數據的權值分布:

D4 = (0.125, 0.125, 0.125, 0.102, 0.102,  0.102, 0.065, 0.065, 0.065, 0.125)。被分錯的樣本「0 1 2 9」的權值變大,其它被分對的樣本的權值變小。

f3(x)=0.4236G1(x) + 0.6496G2(x)+0.7514G3(x)

此時,得到的第三個基本分類器sign(f3(x))在訓練數據集上有0個誤分類點。至此,整個訓練過程結束。

現在,咱們來總結下3輪迭代下來,各個樣本權值和誤差率的變化,如下所示(其中,樣本權值D中加了下劃線的表示在上一輪中被分錯的樣本的新權值):

訓練之前,各個樣本的權值被初始化為D1 = (0.1, 0.1,0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1);

第一輪迭代中,樣本「6 7 8」被分錯,對應的誤差率為e1=P(G1(xi)≠yi) = 3*0.1 = 0.3,此第一個基本分類器在最終的分類器中所佔的權重為a1 = 0.4236。第一輪迭代過後,樣本新的權值為D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715,  0.0715, 0.1666, 0.1666, 0.1666, 0.0715);

第二輪迭代中,樣本「3 4 5」被分錯,對應的誤差率為e2=P(G2(xi)≠yi) = 0.0715 * 3 = 0.2143,此第二個基本分類器在最終的分類器中所佔的權重為a2 = 0.6496。第二輪迭代過後,樣本新的權值為D3 = (0.0455, 0.0455, 0.0455, 0.1667, 0.1667,  0.01667, 0.1060, 0.1060, 0.1060, 0.0455);

第三輪迭代中,樣本「0 1 2 9」被分錯,對應的誤差率為e3 = P(G3(xi)≠yi) = 0.0455*4 = 0.1820,此第三個基本分類器在最終的分類器中所佔的權重為a3 = 0.7514。第三輪迭代過後,樣本新的權值為D4 = (0.125, 0.125, 0.125, 0.102, 0.102,  0.102, 0.065, 0.065, 0.065, 0.125)。

從上述過程中可以發現,如果某些個樣本被分錯,它們在下一輪迭代中的權值將被增大,同時,其它被分對的樣本在下一輪迭代中的權值將被減小。就這樣,分錯樣本權值增大,分對樣本權值變小,而在下一輪迭代中,總是選取讓誤差率最低的閾值來設計基本分類器,所以誤差率e(所有被Gm(x)誤分類樣本的權值之和)不斷降低。

綜上,將上面計算得到的a1、a2、a3各值代入G(x)中,G(x) = sign[f3(x)] = sign[ a1 * G1(x) + a2 * G2(x) + a3 * G3(x) ],得到最終的分類器為:

G(x) = sign[f3(x)] = sign[ 0.4236G1(x) + 0.6496G2(x)+0.7514G3(x) ]。

2 Adaboost的誤差界


 通過上面的例子可知,Adaboost在學習的過程中不斷減少訓練誤差e,直到各個弱分類器組合成最終分類器,那這個最終分類器的誤差界到底是多少呢?

事實上,Adaboost 最終分類器的訓練誤差的上界為:

下面,咱們來通過推導來證明下上述式子。

當G(xi)≠yi時,yi*f(xi)<0,因而exp(-yi*f(xi))≥1,因此前半部分得證。

關於後半部分,別忘了:

整個的推導過程如下:

這個結果說明,可以在每一輪選取適當的Gm使得Zm最小,從而使訓練誤差下降最快。接著,咱們來繼續求上述結果的上界。

對於二分類而言,有如下結果:

其中

繼續證明下這個結論。

由之前Zm的定義式跟本節最開始得到的結論可知:

而這個不等式可先由e^x和1-x的開根號,在點x的泰勒展開式推出。

值得一提的是,如果取γ1, γ2… 的最小值,記做γ(顯然,γ≥γi>0,i=1,2,...m),則對於所有m,有:

這個結論表明,AdaBoost的訓練誤差是以指數速率下降的。另外,AdaBoost算法不需要事先知道下界γ,AdaBoost具有自適應性,它能適應弱分類器各自的訓練誤差率 。

最後,Adaboost 還有另外一種理解,即可以認為其模型是加法模型、損失函數為指數函數、學習算法為前向分步算法的二類分類學習方法,下個月即12月份會再推導下,然後更新此文。而在此之前,有興趣的可以參看《統計學習方法》第8.3節或其它相關資料。

3 Adaboost 指數損失函數推導


事實上,在上文1.2節Adaboost的算法流程的步驟3中,我們構造的各個基本分類器的線性組合

是一個加法模型,而Adaboost算法其實是前向分步算法的特例。那麼問題來了,什麼是加法模型,什麼又是前向分步算法呢?

3.1 加法模型和前向分步算法


如下圖所示的便是一個加法模型

 其中,稱為基函數,稱為基函數的參數,稱為基函數的係數。

在給定訓練數據及損失函數的條件下,學習加法模型成為經驗風險極小化問題,即損失函數極小化問題:

隨後,該問題可以作如此簡化:從前向後,每一步只學習一個基函數及其係數,逐步逼近上式,即:每步只優化如下損失函數:

這個優化方法便就是所謂的前向分步算法。

下面,咱們來具體看下前向分步算法的算法流程:

輸入:訓練數據集

損失函數:

基函數集:

輸出:加法模型

算法步驟:

初始化

對於m=1,2,..M

a) 極小化損失函數

得到參數和

b) 更新


最終得到加法模型

就這樣,前向分步算法將同時求解從m=1到M的所有參數(、)的優化問題簡化為逐次求解各個、(1≤m≤M)的優化問題。

3.2 前向分步算法與Adaboost的關係


在上文第2節最後,我們說Adaboost 還有另外一種理解,即可以認為其模型是加法模型、損失函數為指數函數、學習算法為前向分步算法的二類分類學習方法。其實,Adaboost算法就是前向分步算法的一個特例,Adaboost 中,各個基本分類器就相當於加法模型中的基函數,且其損失函數為指數函數。

換句話說,當前向分步算法中的基函數為Adaboost中的基本分類器時,加法模型等價於Adaboost的最終分類器

你甚至可以說,這個最終分類器其實就是一個加法模型。只是這個加法模型由基本分類器及其係數組成,m = 1, 2, ..., M。前向分步算法逐一學習基函數的過程,與Adaboost算法逐一學習各個基本分類器的過程一致。

下面,咱們便來證明:當前向分步算法的損失函數是指數損失函數

時,其學習的具體操作等價於Adaboost算法的學習過程。

假設經過m-1輪迭代,前向分步算法已經得到:

而後在第m輪迭代得到、和。其中,為:

而和未知。所以,現在咱們的目標便是根據前向分步算法訓練和,使得最終在訓練數據集T上的指數損失最小,即

針對這種需要求解多個參數的情況,可以先固定其它參數,求解其中一兩個參數,然後逐一求解剩下的參數。例如我們可以固定和,只針對和做優化。

換言之,在面對和這2m個參數都未知的情況下,可以:

先假定和已知,求解出和;

然後再逐一求解其它未知參數。

且考慮到上式中的既不依賴也不依賴G,所以是個與最小化無關的固定值,記為,即

則上式可以表示為(後面要多次用到這個式子,簡記為):

值得一提的是,雖然與最小化無關,但依賴於,隨著每一輪迭代而發生變化。

接下來,便是要證使得上式達到最小的和就是Adaboost算法所求解得到的和。

為求解上式,咱們先求再求。

首先求。對於任意,使上式最小的G(x)由下式得到:

別忘了,


跟1.2節所述的誤差率的計算公式對比下:


可知,上面得到的便是Adaboost算法的基本分類器,因為它是在第m輪加權訓練數據時,使分類誤差率最小的基本分類器。換言之,這個便是Adaboost算法所要求的,別忘了,在Adaboost算法的每一輪迭代中,都是選取讓誤差率最低的閾值來設計基本分類器。

 然後求。還是回到之前的這個式子上:

這個式子的後半部分可以進一步化簡,得:

接著將上面求得的

代入上式中,且對求導,令其求導結果為0,即得到使得一式最小的,即為:

這裡的跟上文1.2節中的計算公式完全一致。

此外,毫無疑問,上式中的便是誤差率:

 即就是被Gm(x)誤分類樣本的權值之和。

 就這樣,結合模型

可以推出

 從而有:

與上文1.2節介紹的權值更新公式

相比,只相差一個規範化因子,即後者多了一個

所以,整個過程下來,我們可以看到,前向分步算法逐一學習基函數的過程,確實是與Adaboost算法逐一學習各個基本分類器的過程一致,兩者完全等價。

綜上,本節不但提供了Adaboost的另一種理解:加法模型,損失函數為指數函數,學習算法為前向分步算法,而且也解釋了最開始1.2節中基本分類器及其係數的由來,以及對權值更新公式的解釋,你甚至可以認為本節就是對上文整個1.2節的解釋。

4 參考文獻與推薦閱讀


wikipedia上關於Adaboost的介紹:http://zh.wikipedia.org/zh-cn/AdaBoost;

鄒博之決策樹與Adaboost PPT:http://pan.baidu.com/s/1hqePkdY;

鄒博講Adaboost指數損失函數推導的PPT:http://pan.baidu.com/s/1kTkkepD(第85頁~第98頁);

《統計學習方法 李航著》第8章;

關於adaboost的一些淺見:http://blog.sina.com.cn/s/blog_6ae183910101chcg.html;

A Short Introduction to Boosting:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.93.5148&rep=rep1&type=pdf;

南大周志華教授做的關於boosting 25年的報告PPT:http://vdisk.weibo.com/s/FcILTUAi9m111;

《數據挖掘十大算法》第7章 Adaboost;

http://summerbell.iteye.com/blog/532376;

統計學習那些事:http://cos.name/2011/12/stories-about-statistical-learning/;

統計學習基礎學習筆記:http://www.loyhome.com/%E2%89%AA%E7%BB%9F%E8%AE%A1%E5%AD%A6%E4%B9%A0%E7%B2%BE%E8%A6%81the-elements-of-statistical-learning%E2%89%AB%E8%AF%BE%E5%A0%82%E7%AC%94%E8%AE%B0%EF%BC%88%E5%8D%81%E5%9B%9B%EF%BC%89/;

PRML第十四章組合模型讀書筆記:http://vdisk.weibo.com/s/DmxNcM5_IaUD;

順便推薦一個非常實用的在線編輯LaTeX 公式的網頁:http://www.codecogs.com/latex/eqneditor.php?lang=zh-cn。

覺得本文有幫助?請分享給更多人

關注「算法愛好者」,修煉編程內功

相關焦點

  • AdaBoost--從原理到實現
    (這段話摘自統計學習那些事)了解了這段有意思的起源,下面來看adaboost算法應該會興趣大增。Adaboost 舉例也許你看了上面的介紹或許還是對adaboost算法雲裡霧裡的,沒關係,百度大牛舉了一個很簡單的例子,你看了就會對這個算法整體上很清晰了。
  • 比較全面的Adaboost算法總結(二)
    Boosting算法基本原理2. Boosting算法的權重理解3. AdaBoost的算法流程4. AdaBoost算法的訓練誤差分析5. AdaBoost算法的解釋6. AdaBoost算法的過擬合問題討論7. AdaBoost算法的正則化8.
  • AdaBoost算法詳解以及代碼實現
    這篇博客主要解釋AdaBoost的算法詳情以及實現。它可以理解為是首個「boosting」方式的集成算法。是一個關注二分類的集成算法。一、算法的總體情況AdaBoost的目標是建立如下的最終的分類器:其中,假設我們輸入的訓練數據總共有nn個,用(x_1,y_y),\cdots,(x_n,y_n)(x1,yy),⋯,(xn,yn)表示,其中xx是一個多為向量,而其對應的y=\{-1,1\}y={−1,1}。1.1、sign函數這裡的sign函數是符號函數。
  • 理解AdaBoost算法
    AdaBoost看上去是一個腦洞大開想出來的算法,你可能會問:為什麼弱分類器的權重計算公式是這樣的?為什麼樣本權重的更新公式是這樣的?事實上,它們是有來歷的。我們可以用廣義加法模型+指數損失函數來推導出AdaBoost的訓練算法。廣義加法模型擬合的目標函數是多個基函數的線性組合:其中
  • 非對稱加密算法——RSA加密原理及數學推導
    所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種「由已知加密密鑰推導出解密密鑰在計算上是不可行的」密碼體制。是由該算法設計者「Rivest、Shamir、Adleman」的名字構成,(可能看之前還認識「RSA」三個字母,看完後迷糊了。下面將詳細介紹。)
  • 關於Adaboost算法
    Adaboost是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。一.引入對於Adaboost,可以說是久聞大名,據說在Deep Learning出來之前,SVM和Adaboost是效果最好的 兩個算法,而Adaboost是提升樹(boosting tree),所謂「提升樹」就是把「弱學習算法」提升(boost)為「強學習算法」(語自《統計學習方法》),而其中最具代表性的也就是
  • 獨家 | 一文讀懂Adaboost
    算法分析通過2.2算法的偽代碼我們可以分析一下Adaboost算法。分析算法的性能(收斂性、複雜度):在此處的分析中,我們忽略基礎模型優化的複雜度,默認基礎模型是非常簡單的模型。前面已經說明了Adaboost算法其最終模型訓練集的誤差是有上確界的,也就是說該算法是確切可以收斂到誤差界的。這一點保證了Adaboost算法的可收斂性。算法的優劣勢:前面就Adaboost算法分析了這麼多,那麼它到底有哪些優勢,又有哪些不足呢?
  • 【白話機器學習】算法理論+實戰之AdaBoost算法
    寫在前面如果想從事數據挖掘或者機器學習的工作,掌握常用的機器學習算法是非常有必要的,常見的機器學習算法:監督學習算法:邏輯回歸,線性回歸,決策樹,樸素貝葉斯,K近鄰,支持向量機,集成算法Adaboost等無監督算法:聚類,降維,關聯規則, PageRank等為了詳細的理解這些原理
  • 算法推導:反向傳播算法
    13.3.1 反向傳播算法推導如下圖所示為一個神經網絡的結構圖,由於本文主要探討激活函數在反向傳播過程中的作用,因此不會帶入數值進行計算,而是以兩個權重的更新為案例進行公式的推導,分別為如何通過反向傳播算法更新和的值。
  • 數學推導+純Python實現機器學習算法30:系列總結與感悟
    一點總結     整個系列對常用的、主流的機器學習模型與算法進行了梳理,主題只有兩個,一個是數學推導,一個手寫實現。因為機器學習原理大多都是由數學支撐,基本的機器學習數學公式推導對於深入掌握機器學習十分重要;另一方面,通過手寫實現機器學習算法,深入理解算法細節,進一步提高算法實現的代碼能力。
  • 9大核心經典算法推導公式詳解來了!一步步教你掌握核心算法~
    機器學習等方面的內容,很多庫裡面都已經封裝好了,為什麼還要學那麼多公式推導?對於初學者,它們的意義在哪裡?我們來看一下具體場景:發論文最重要的環節就是找到創新點,而創新點在於你對研究理論的理解程度,如果不理解算法是怎麼進行改進的,不了解算法模型之間的優缺點,你根本無法對論文有深入的理解,更別說復現論文了。
  • EM算法原理總結
    EM算法也稱期望最大化(Expectation-Maximum,簡稱EM)算法,它是一個基礎算法,是很多機器學習領域算法的基礎,比如隱式馬爾科夫算法(HMM), LDA主題模型的變分推斷等等。本文就對EM算法的原理做一個總結。EM算法要解決的問題我們經常會從樣本觀察數據中,找出樣本的模型參數。
  • 數學推導+純Python實現機器學習算法28:奇異值分解SVD
    作為一個基礎算法,我們有必要將其單獨拎出來在機器學習系列中進行詳述。特徵值與特徵向量     在學習SVD原理之前,我們有必要對矩陣的特徵值與特徵向量進行回顧。我們可以嘗試將SVD用於圖像的壓縮算法。其原理就是保存像素矩陣的前k個奇異值,並在此基礎上做圖像恢復。由SVD的原理我們可以知道,在SVD分解中越靠前的奇異值越重要,代表的信息含量越大。     下面我們嘗試對一個圖像進行SVD分解,並分別取前1~50個奇異值來恢復該圖像。需要恢復的圖像如下(厚著臉皮拿筆者自己作為示例):
  • 輕鬆看懂機器學習十大常用算法
    通過本篇文章可以對ML的常用算法有個常識性的認識,沒有代碼,沒有複雜的理論推導,就是圖解一下,知道這些算法是什麼,它們是怎麼應用的,例子主要是分類問題。每個算法都看了好幾個視頻,挑出講的最清晰明了有趣的,便於科普。 以後有時間再對單個算法做深入地解析。
  • 【機器學習基礎】數學推導+純Python實現機器學習算法21:馬爾可夫鏈蒙特卡洛
    19:PCA降維數學推導+純Python實現機器學習算法18:奇異值分解SVD數學推導+純Python實現機器學習算法17:XGBoost數學推導+純Python實現機器學習算法16:Adaboost>數學推導+純Python實現機器學習算法15:GBDT數學推導+純Python實現機器學習算法14:Ridge嶺回歸數學推導+純Python實現機器學習算法13:Lasso回歸
  • 光流(Optical Flow)算法原理及示例
    Lucas–Kanade方法(KLT)是一種基於光流原理的特徵點跟蹤算法。本文首先介紹光流的原理,然後介紹了KLT及其相關的KLT變體算法。光流約束方程假設I(x,y,t)為時刻t像素點(x,y)的像素值(亮度),該像素點在兩個圖像幀之間移動了Δx,Δy,Δt。
  • 反向傳播(BP)算法的數學原理
    這篇論文介紹了一系列神經網絡模型,證實了反向傳播算法在這些神經網絡中高效的訓練/學習性能,使得利用神經網絡解決一系列過去無解的難題成為可能。直到現在,BP算法仍然是訓練神經網絡模型的基礎算法。BP算法涉及大量的數學推導,如果對數學不感興趣但又想學習神經網絡,完全可以把BP算法看做一個黑盒來用,而不必關心其推導細節。
  • LibRec 每周算法:FTRL原理與工程實踐 (by Google)
    FTRL原理介紹FTRL算法的設計思想其實並不複雜,就是每次找到讓之前所有目標函數(損失函數加正則項)之和最小的參數。該算法在處理諸如邏輯回歸之類的帶非光滑正則化項(如L1正則項)的凸優化問題上表現出色,在計算精度和特徵的稀疏性上做到了很好的trade-off,而且在工程實現上做了大量優化,性能優異。
  • 《深度學習》聖經花書的數學推導、原理與Python代碼實現
    MingchaoZhu同學基於數學推導和產生原理重新描述了書中的概念,並用Python (numpy 庫為主) 復現了書本內容,在Github上開放,歡迎大家查看學習。同時,它還介紹了工業界中實踐者用到的深度學習技術,包括深度前饋網絡、正則化、優化算法、卷積網絡、序列建模和實踐方法等,並且調研了諸如自然語言處理、語音識別、計算機視覺、在線推薦系統、生物信息學以及視頻遊戲方面的應用。
  • 數學推導+純Python實現機器學習算法12:貝葉斯網絡
    在上一講中,我們講到了經典的樸素貝葉斯算法。