【導讀】作者用超過1.2萬字的篇幅,總結了自己學習機器學習過程中遇到知識點?!叭腴T后,才知道機器學習的魅力與可怕?!毕M陂喿x本文的你,也能在機器學習上學有所成。 機器學習:使計算機改進或是適應他們的行為,從而使他們的行為更加準確。也就是通過數(shù)據(jù)中學習,從而在某項工作上做的更好。引用王鈺院士在2008年會議的一句話,假定W是給定世界的有限或者無限的所有對象的集合,Q是我們能夠或得到的有限數(shù)據(jù),Q是W的一個很小的真子集,機器學習就是根據(jù)世界的樣本集來推算世界的模型,使得模型對于整體世界來說為真。機器學習的兩個驅動:神經網絡,數(shù)據(jù)挖掘。- 監(jiān)督學習:提供了包含正確回答的訓練集,并以這個訓練集為基礎,算法進行泛化,直到對所有的可能輸入都給出正確回答,這也稱在范例中學習。
- 無監(jiān)督學習:沒有提供正確回答,算法試圖鑒別出輸入之間的相似,從而將同樣的輸入歸為一類,這種方法稱密度學習。
- 強化學習:介于監(jiān)督和無監(jiān)督之間,當答案不正確時,算法被告知,如何改正則不得而知,算法需要去探索,試驗不同情況,直到得到正確答案,強化學習有時稱為伴隨評論家的學習,因為他只對答案評分,而不給出改進建議。
- 進化學習:將生物學的進化看成一個學習過程,我們研究如何在計算機中對這一過程進行建模,采用適應度的概念,相當于對當前解答方案好壞程度的評分。(不是所有機器學習書籍都包含進化學習)
優(yōu)點:泛化,對于未曾碰到的輸入也能給出合理的輸出。- 輸入:輸入向量x作為算法輸入給出的數(shù)據(jù)
- 突觸:wij是節(jié)點i和節(jié)點j之間的加權連接,類似于大腦中的突觸,排列成矩陣W
- 目標:目標向量t,有n個維度,監(jiān)督學習所需要等待額外數(shù)據(jù),提供了算法正在學習的“正確答案”
- 激活函數(shù):對于神經網絡,g(·)是一種數(shù)學函數(shù),描述神經元的激發(fā)和作為對加權輸入的響應
- 誤差:E是根據(jù)y和t計算網絡不準確性的函數(shù)
- 權重空間:當我們的輸入數(shù)據(jù)達到200維時,人類的限制使得我們無法看見,我們最多只能看到三維投影,而對于計算機可以抽象出200個相互正交的軸的超平面進行計算,神經網絡的參數(shù)是將神經元連接到輸入的一組權重值,如將神經元的權重視為一組坐標,即所謂的權重空間
- 維度災難:隨著維度的增加,單位超球面的體積也在不斷增加,2d中,單位超球面為圓,3d中則為求,而更高的維度便稱為超球面,Vn = (2π/n)*Vn-2,于是當n>2π時,體積開始縮小,因此可用數(shù)據(jù)減少,意味著我們需要更多的數(shù)據(jù),當數(shù)據(jù)到達100維以上時,單位數(shù)據(jù)變得極小,進而需要更多的數(shù)據(jù),從而造成維度災難
算法成功程度是預測和一直目標進行比較,對此我們需要一組新的數(shù)據(jù),測試集。當對算法進行訓練時,過度的訓練將會導致過擬合,即擬合曲線與數(shù)據(jù)完美擬合,但是失去了泛化能力,為檢測過擬合我們需要用測試集進行驗證,稱為統(tǒng)計中的交叉驗證,它是模型選擇中的一部門:為模型選擇正確的參數(shù),以便盡可能的泛化。數(shù)據(jù)的準備,我們需要三組數(shù)據(jù)集,訓練算法的訓練集,跟蹤算法學習效果的驗證集,用于產生最終結果的測試集,數(shù)據(jù)充足情況便執(zhí)行50:25:25或60:20:20的劃分,數(shù)據(jù)集分配應隨機處理,當數(shù)據(jù)請核實板塊,則采用流出方法或多折交叉驗證。混淆矩陣是檢測結果是否良好的分類,制作一個方陣,其包含水平和垂直方向上所有可能的類,在(i,j)處的矩陣元素告訴我們在目標中有多少模式被放入類i中,主對角線上任何東西都是正確答案,主對角線元素之和除以所有元素的和,從而得到的百分比便是精度。精度指標:真正例是被正確放入類1,假正例是被錯誤放入類1,而真反例是被正確放入類2,假反例是被錯誤放入類2。- 敏感率=#TP/(#TP+#FN) 特異率=#TN/(#TN+#FP)
- 查準率=#TP/(#TP+#FP) 查全率=#TP/(#TP+#FN)
- F1 = 2*(查準率*查全率)/(查準率+查全率)
受試者工作曲線:y軸真正例率,x軸假正例率,線下區(qū)面積:AUC。數(shù)據(jù)與概率的轉換:通過貝葉斯法則處理聯(lián)合概率P(C,X)和條件概率P(X|C)得出P(C|X),MAP問題是訓練數(shù)據(jù)中最可能的類是什么。將所有類的最終結果考慮在內的方法稱為貝葉斯最優(yōu)分類。基本統(tǒng)計概念:協(xié)方差,度量兩個變量的依賴程度。Cov({xi},{yi})=E({xi} – u)E({yi} – v)權衡偏差與方差:偏差-方差困境:更復雜的模型不一定能產生更好的結果;模型糟糕可能由于兩個原因,模型不準確而與數(shù)據(jù)不匹配,或者不精確而有極大的不穩(wěn)定性。第一種情況稱為偏差,第二種情況稱為方差。魯棒是Robust的音譯,也就是健壯和強壯的意思。它是在異常和危險情況下系統(tǒng)生存的關鍵。比如說,計算機軟件在輸入錯誤、磁盤故障、網絡過載或有意攻擊情況下,能否不死機、不崩潰,就是該軟件的魯棒性。神經網絡模仿的便是生物學中的神經網絡,通過輸入進而判定神經元激活否。將一系列的神經元放置在一起,假設數(shù)據(jù)存在模式。通過神經元一些已知的樣例,我們希望他能夠發(fā)現(xiàn)這種模式,并且正確預測其他樣例,稱為模式識別。為了讓神經網絡能夠學習,我們需要改變神經元的權重和閾值進而得到正確的結果,歷史上的第一個神經網絡——感知器。突觸連接強度的變化和兩個相連神經元激活得相關性成比例,如果兩個神經元始終同時激活,那么他們之間連接的強度會變大,反之,如果兩個神經元從來不同時激活,那么他們之間的連接會消失。也被成為長時效增強法則和神經可塑性。建模,一組輸入加權wi相當于突觸,一個加法器把輸入信號相加(等價于收集電荷的細胞膜),一個激活函數(shù),決定細胞對于當前的輸入是否激活,輸入乘于權重的和與閾值進行判斷,大于則激活,否則抑制。局限性:現(xiàn)實中的神經元不給出單一的輸出相應,而是給出一個點位序列,一種連續(xù)的方式給出分等級的輸出。神經元不會根據(jù)電腦的時鐘脈沖去順序更新,而是隨機的異步更新。Wij <- Wij – n(yi – ti)*xiN為學習效率,過大會造成網絡不穩(wěn)定,過小會造成學習時間久;yi為神經元輸出,ti為神經元目標,xi為神經元輸入,Wij為權重。一條直線將神經元激活的和不激活的神經元劃分開來,這條直線稱為決策邊界,也稱為判別函數(shù),在三維空間該決策邊界為平面,更高維則為超平面。感知器以1/γ*γ為界,其中γ為分離超平面與最接近的數(shù)據(jù)點之間的距離。只要把數(shù)據(jù)映射到正確的維度空間,那么總是可以用一個線性函數(shù)來把兩個類別區(qū)分開,為了較有效率的解決這個問題,有一整類的方法稱為核分類器,也是支持向量機的基礎。特征選擇,我們每次去掉一個不同的特征,然后試著在所得的輸入子集上訓練分類器,看結果是否有所提高,如果去掉某一個特征能使得結果有所改進,那么久徹底去掉他,在嘗試能否去掉其他的特征,這是一個測試輸出與每一個特征的相關性的過于簡單方法。回歸問題是用一條線去擬合數(shù)據(jù),而分類問題是尋找一條線來劃分不同類別?;貧w方法,引入一個指示變量,它簡單的標識每一個數(shù)據(jù)點所屬的類別。現(xiàn)在問題就變成了用數(shù)據(jù)去預測指示變量,第二種方法是進行重復的回歸,每一次對其中的一個類別,指示值為1代表樣本屬于該類別,0代表屬于其他類別。特征選擇法:仔細查找可見的并可以利用的特征而無論他們是否有用,把它與輸出變量關聯(lián)起來 特征推導法:通過應用數(shù)據(jù)遷移,即通過可以用矩陣來描述的平移和旋轉來改變圖標的坐標系,從而用舊的特征推導出新的特征,因為他允許聯(lián)合特征,并且堅定哪一個是有用的,哪一個沒用 聚類法:把相似的數(shù)據(jù)點放一起,看能不能有更少的特征 建設性方法:通過迭代不斷加入,測試每一個階段的錯誤以了解某個特征加入時是否會發(fā)生變化。破壞性方法是去掉應用在決策樹上的特征。主成分的概念是數(shù)據(jù)中變化最大的方向。算法首先通過減去平均值來把數(shù)據(jù)集中, 選擇變化最大的方向并把它設為坐標軸,然后檢查余下的變化并且找一個坐標軸使得它垂直于第一個并且覆蓋盡可能多的變化。不斷重復這個方法直到找到所有可能的坐標軸。這樣的結果就是所有的變量都是沿著直角坐標系的軸,并且協(xié)方差矩陣是對角的——每個新變量都與其他變量無關,而只與自己有關。一些變化非常小的軸可以去掉不影響數(shù)據(jù)的變化性。寫成N個點Xi=(X1i,X2i,... xXi)作為行向量。通過減去每列的平均值來把數(shù)據(jù)中心化,并令變化好的矩陣為B。計算C的特征向量和特征值,即V^-1CV=D,其中V由C的特征向量組成,D是由特征值組成的M*M階對角矩陣。把D對角線上元素按降序排列,并對V的列向量做同樣的排列。去掉那些小于η的特征值,剩下L維的數(shù)據(jù)。 觀察數(shù)據(jù)是否可以被少量不相關的因素或潛在的變量解釋,目的用于發(fā)現(xiàn)獨立因素和測量每一個因素固有的誤差。統(tǒng)計成分是獨立的,即對于E[bi,bj] = E[bi]E[bj]與及bi是不相關的。找出每個點的鄰近點(即前k個近的點):計算每對點間的距離。找到前k個小的距離。對于其他點,令Wij=0.對每個點xi:創(chuàng)建一個鄰近點的位置表z,計算zi=zi-xi。根據(jù)約束條件計算令等式(6.31)最小的權矩陣W:計算局部協(xié)方差C=ZZ^T,其中Z是zi組成的矩陣。利用CW=I計算W,其中I是N*N單位矩陣。對于非鄰近點,令Wij=0。對W/∑W設置其他元素計算使得等式(6.32)最小的低維向量 yi:創(chuàng)建M=(I-W)T(I-W).計算M的特征值和特征向量。根據(jù)特征值的大小給特征向量排序。對應于第q小的特征值,將向量y的第q行設置為第q+1 個特征向量(忽略特征值為0)計算由每對點平方相似度組成的矩陣D, Dij=|xi-xj|.計算J=IN – 1/N (IN是N*N單位矩陣,N是數(shù)據(jù)點個數(shù))。找到B的L個最大的特征值入i,,以及相對應的特征向量ei。用特征值組成對角矩陣V并且用特征向量組成矩陣P的列向量。 額外加入位置變量,通過這些變量最大化函數(shù)。設置 是從數(shù)據(jù)集中隨機選出來的值設置 (這里 是整個數(shù)據(jù)集的平均值)設置 =0.5 猜測參數(shù) 除了通過模型選擇確定停止學習的時間,前期采用驗證集思想,而信息準則則是確定一些方法從而期待這個訓練過的模型可以表現(xiàn)的多好。- 貝葉斯信息準則:BIC = 2ln(C)-klnN
K是模型中參數(shù)的數(shù)目,N是訓練樣本的數(shù)量,C是模型的最大似然。以上兩種方法都是奧卡姆剃刀的一種形式。如果沒有一個描述數(shù)據(jù)的模型,那么最好的事情就是觀察相似的數(shù)據(jù)并且把他們選擇成同一類。用一個和(一堆點的權重函數(shù))來根據(jù)輸入的距離來決定每一個數(shù)據(jù)點有多少權重。當兩個核都會對離當前輸入更近的點給出更高的權重,而當他們離當前輸入點越遠時,權重會光滑的減少為0,權重通過λ來具體化。在一個時刻選擇一個維度并且將它分裂成兩個,從而創(chuàng)建一顆二進制樹,并且讓一條直線通過這個維度里點的坐標的中位數(shù)。這與決策樹的差別不大。數(shù)據(jù)點作為樹的樹葉。制作樹與通常的二進制樹的方法基本相同:我們定義一個地方來分裂成兩種選擇——左邊和右邊, 然后沿著它們向下??梢院茏匀坏叵氲接眠f歸的方法來寫算法。選擇在哪分裂和如何分裂使得KD-Tree是不同的。在每一步只有一個維度分裂,分裂的地方是通過計算那一維度的點的中位數(shù)得到的,并且在那畫一條直線。通常,選擇哪一個維度分裂要么通過不同的選擇要么隨機選擇。算法向下搜索可能的維度是基于到目前為止樹的深度,所以在二維里,它要么是水平的要么是垂直的分裂。組成這個方法的核心是簡單地選代選取分裂的函數(shù),找到那個坐標的中位數(shù)的值,并且根據(jù)那個值來分裂點。當前現(xiàn)代機器學習中最流行的算法之一,其在大小合理的數(shù)據(jù)集上經常提供比其他機器學習算法更好的分類性能。在每個類中距離分類線最近的那些點則被稱為支持向量。如果有一個非線性可分數(shù)據(jù)集,那么就不能滿足所有數(shù)據(jù)點的約束條件,解決方法是引入一些松弛變量η>=0。任何一個對稱函數(shù)如果是正定的,都可以用來做核。這就是Mercer定理的結果,Mercer定理也指出一些核旋繞到一起的結果可能是另一個核。對于指定的內核和內核參數(shù),計算數(shù)據(jù)之間距離的內核 對于線性內核,返回K,對于多項式的次數(shù)d,返回1/σ 8 K^d。 對于RBF核,計算K=exp(-(x-x')^2/2σ*σ。 約束于 將文持向量標識為距高最近點一定距離內的向量,并處理其余的訓練集。 對于給定的測試數(shù)據(jù)z,使用支持向量對相關內核的數(shù)據(jù)進行分類,計算測試數(shù)據(jù)與支持向量的內積,進行分類,返回標記或值。當J^Tr(x)>公差并且沒有超出最大迭代次數(shù):用線性最小二乘法算出(J^TJ+vI)dx=一J^Tr中的dx。令Xnew=x+dx。 二維空間中,如下圖所示,一步沿x軸方向,另一部沿y方向,這樣足以足以達到最小值。而在n維空間我們應該走n步以達到最小值,它嘗試在線性情況下實現(xiàn)這個想法,但是我們通常感興趣的非線性情況下,只需要多一點迭代就可以達到最小。左邊:如果方向之間是相互正交的并且步長是正確的,每一個維度只需要走一步,這里走了兩步。右邊:在橢圓上共軛的方向不是相互正交的。
給一個初始點x0和停止參數(shù)ε,令p0=-▽f(x)。α=-(▽f(x)^T p)(p^T H(x)p)計算βn+1-更新p←▽f(xnew)+βk+1p。 - 貪婪搜索:整個系統(tǒng)只找一條路,在每一步都找局部最優(yōu)解。所以對于TSP,任意選擇第-個城市,然后不斷重復選擇和當前所在城市最近并且沒有訪問過的城市,直到走完所有城市。它的計算量非常小,只有O(NlogN),但它并不保證能找到最優(yōu)解,并且我們無法預測它找到的解決方案如何,有可能很糟糕。
- 爬山法:爬山法的基本想法是通過對當前解決方案的局部搜索,選擇任一個選項來改善結果,進行局部搜索時做出的選擇來自于一個移動集(moveset)。它描述了當前解決方案如何被改變從而用來產生新的解決方案。所以如果我們想象在2D歐幾里得空間中移動,可能的移動就是東、南、西、北。
對于TSP,爬山法要先任意選一個解決方案, 然后調換其中一對城市的順序,看看總的旅行距離是否減少。當交換的對數(shù)達到預先給定的數(shù)時,或找不到一個調換可以改善相對于預先給定的長度的結果時停止算法。就像貪婪算法一樣,我們無法預測結果將會怎樣:有可能找到全局最優(yōu)解,也有可能陷在第一個局部最大值上, 從而并不定能找到全局最優(yōu)解,爬山法的核心循環(huán)僅僅是調換對城市, 并且僅當它使得距離變小時才保留調換。開始時選擇一個任意的很高的溫度T,之后我們將隨機選擇狀態(tài)并且改變它們的值,監(jiān)視系統(tǒng)變化前后的能量。如果能量變低了,系統(tǒng)就會喜歡這種解決方法,所以我們接受這個變化。目前為止,這和梯度下降法很像。然而,如果能量不變低,我們仍然考慮是否接受這個解決方法,并且接受的概率是exp((Ebefore- Eafter)/T)。這叫作波爾茲曼分布(Boltzmann distribution)。注意到Ebefore Eafter 是負的,所以我們定義的概率是合理的。偶爾接受這個不好的狀態(tài)是因為我們可能找到的是局部最小,并且通過接受這個能量更多的狀態(tài),我們可以逃離出這個區(qū)域。在重復上述方法幾次后,我們采用一個退火時間表以便降低溫度并且使得該方法能延續(xù)下去直到溫度達到0。由于溫度變低,所以接受任一個特殊的較高的能量狀態(tài)的機會就會變少。最常用的退火時間表是T(l+1)=cT(t),這里0<c<1(更加常用的是0.8<c<1)。需要減慢退火的速度以允許更多的搜索。第一行為最好的解決方案和距離,第二行為運行時間,城市為10個。((1, 5, 10, 6, 3, 9, 2, 4, 8, 7, 0), 4.18)((3, 9, 2, 6, 10, 5, 1, 8, 4, 7, 0]), 4.49)((7, 9, 6, 2, 4, 0, 3, 8, 1, 5, 10]), 7.00)((10, 1, 6, 9, 8, 0, 5, 2, 4, 7, 3]), 8.95)模擬進化是如何搜索的,通過改變基因來改變個體的適應度。GA使用字符串(類似染色體的作用),字符串中的每個元素都是從某些字母表中選擇,字母表中的值通常是二進制的相當于等位基因,對于解決方法,將被變?yōu)橐粋€字符串,然后我們隨機生產字符串作為初始種群。評價適應度可以被看成一個預測,它作用于一個字符串并且返回一個值,它是遺傳算法中唯一因具體問題不同而不同的部分。最好的字符串有最高的適應值,當解決方案不好時,適應度也隨之下降,GA工作于由種群組成的字符串,然后評價每個字符串的適應度,并進行培養(yǎng)。- 聯(lián)賽選擇:反復從種群中挑選四個字符串,替換并將最適合的兩個字符串放人交配池中。
- 截斷選擇:僅按比例f挑出適應度最好的一-部分并且忽略其他的。比如,f= 0.5經常被使用,所以前50%的字符串被放入交配池,并且被等可能地選擇。這很顯然是一個非常簡單的實施方法,但是它限制了算法探索的數(shù)量,使得GA偏向于進化。
- 適應度比例選擇:最好的方法是按概率選擇字符串,每個字符串被選擇的概率與它們的適應度成比例。通常采用的函數(shù)是(對于字符串a):
這里F^α是適應度,如果適應度不是正值,則F需要在整個過程中被exp?(sF)替換,這里s是選擇強度(selection strength)參數(shù),并且你會意識到這個等式作為第4章的softmax激活):最常用時實現(xiàn)方法是在字符串中隨機找一個點,在這個點之前的部分用字符串1的,而在交叉點之后,用字符串2的剩下部分。我們實際上產生了兩個后代,第2個是由字符串2的第一部分和字符串1的第二部分組成的。這個方式稱為單點交叉,顯然,它的擴展是多點交叉。最極端的情形是均勻交叉,它的字符串中的每一個元素都隨機地選自與他的父母,下圖展示了三中類型的交叉法:交叉算子的不同形式。(a)單點交叉。隨機選擇字符串中的一個位置,然后用字符串1的第一部分和字符串2的第二部分組成后代。(b)多點交叉。選擇多個點,后代的生成方式和前面一樣。(c)均勻交叉。每個元素都隨機的選自于它的父母。 對當前最好的字符串實現(xiàn)進化通過編譯算子實現(xiàn),字符串中每個元素的值以概率p(通常很?。└淖?。可選性地,使用精英法從父代中挑選最合適的字符串,并替換子代中的一些其他字符串。
把方案編碼成字符串,選擇合適的適應度函數(shù),選擇合適的遺傳算子。最基礎的版本是我們熟知的基于種群的增長學習算法(PBIL).該算法非常簡單,像基本的GA一樣,它采用一個二進制字母表,但不保留種群,而是利用一個概率向來給出每一個元素是0或1的概率。起初,向量的每一個值都是0.5,所以每一個元素有相等的機會變成0或1,之后通過從分布指定的向量中取樣來構建群體,并計算群體中每個成員的適合度。我們使用這個種群中的一個子集(通常只有前兩個適應度最高的向量)和一個學習速率p來更新概率向量,學習速率通常被設置為0.005(這里best和second代表種群中最好的和第二好的成員):p= pX(1 - η)+ η(best十second)/2。之后丟棄這些種群,并且利用更新的概率向量重新取樣來產生新的種群,算法的核心就是簡單地利用適應度最高的兩個字符串和更多的向量來尋找新的字符串。07 強化學習 強化學習是狀態(tài)(state)或情形(situation)與動作(action)之間的映射,目的是最大化一些數(shù)值形式的獎賞(reward)。也就是說,算法知道當前的輸人(狀態(tài)),以及它可能做的一些事(動作),目的是最大化獎賞。進行學習的智能體和環(huán)境之間有著明顯的區(qū)別,環(huán)境是智能體完成動作的地方,也是產生狀態(tài)和獎賞的地方。馬爾可夫性:當前的狀態(tài)對于計算獎賞提供了足夠的信息而不需要以前的狀態(tài)信息,一個具有馬爾可夫性的強化學習成為馬爾可夫決策過程。它意味著基于以前的經歷,我們只需要知道當前的狀態(tài)和動作就可以計算下一步獎賞的近似,以及下一步的狀態(tài)。強化學習嘗試決定選擇哪一個動作來最大化未來的期望獎賞,這個期望獎賞就是值,可以考慮當前狀態(tài),對所有采取的動作進行平均,讓策略來自己解決這個問題,即狀態(tài)值函數(shù),或者考慮當前狀態(tài)和可能采取的動作即動作值函數(shù)。對于所有的s和a, 設置Q(s, a)為一個很小的隨機數(shù)。 更新Q(s, a)←Q(s, a)+u(r+γmaxa’ (s', a')-Q(s, a))應用到當前情節(jié)的每一步。直到沒有更多的情節(jié)。 對于所有的s和a,設置Q(s, a)為一個很小的隨機數(shù)。 更新Q(s, a)<-Q(s, a)+u(r+yYQ(s',a')-Q(s,a)). 都是bootstrap方法,因為他們都是從對正確答案很少的估計開始,并且在算法進行過程中不斷迭代。兩個算法一開始都沒有環(huán)境的任何信息,因此會利用ε-greedy策略隨機探索。然而,隨著時間的推移,兩個算法所產生的決策出現(xiàn)了很大的不同。產生不同的主要原因是Q-learning總是嘗試跟著最優(yōu)的路徑,也就是最短的路,這使它離懸崖很近。并且,ε-greedy也意味著有時將會不可避免地翻倒。通過對比的方式,sarsa 算法將會收斂到一個非常安全的路線,它遠離懸崖,即使走的路線很長。sarsa 算法產生了一個非常安全的路線,因為在它的Q的估計中包含了關于動作選擇的信息,而Q-learning生成了一條冒險但更短的路線。哪種路線更好由你決定,并且依賴于跌落懸崖的后果有多么嚴重。決策樹的主要思想是從樹根開始,把分類任務按順序分類成一個選擇,一步步進行到葉子節(jié)點最終得到分類的結果,樹結構可以表示成if-then規(guī)則的集合,適合應用于規(guī)則歸納系統(tǒng)。在決策樹下一次分類是,對于每一個特征,通過計算真?zhèn)€訓練集的熵減少來選擇特征,這成為信息增益,描述為整個集合的熵減去每一個特定特征被選擇后的熵減去每一個特定特征被選中后的熵。如果所有的樣本都具有同一標記:返回標記為該類標記的葉子節(jié)點。否則,如果沒有剩余特征用于測試:返回標記為最常見標記的葉子節(jié)點,否則:使用公式選擇S中具有最大信息增益的特征戶作為下一個節(jié)點。為每一個特征戶的可能取值f增加一個分支。對于每個分支:計算除去F后的每一個特征的Sf,使用Sf遞歸調用算法,計算目前樣本集合的信息增益。 假設樹是近似平衡的,那么每個節(jié)點的成本包括搜索d個可能的特征(盡管每個層級減少1,但這不會影響O(·)符號的復雜性),然后計算每個分裂的數(shù)據(jù)集的信息贈與,這需要花費O(dnlogn),其中n為該節(jié)點上數(shù)據(jù)及的大小,對于根節(jié)點,n=N,并且如果樹是平衡的,則在樹的每個階段將n除于2。在樹種的大約logN層級上對此求和,得到計算成本O(dN^2logN)。下圖為集成學習的基本思想,給定一個相對簡單的二類分類問題和一些學習器,一個學習器的橢圓覆蓋數(shù)據(jù)的一個子集,組合多個橢圓給出相當復雜的決策邊界。通過組合許多簡單的分類器(這里簡單地將橢圓決策邊界放在數(shù)據(jù)上),決策邊界可以變得更加復雜,使得正例與圓圈難以分離。每次迭代中,一個新的分類器在訓練集上訓練,而訓集中的每-個數(shù)據(jù)點在每一步迭代時都會調整權重,改變權重的根據(jù)是數(shù)據(jù)點被之前的分類器成功分類的難度。一開始, 這些權重都被初始化為1/N,其中N是訓練集中點的個數(shù)然后,每次迭代時,用所有被錯分的點的權重之和作為誤差函數(shù)ε。對于錯誤分類的點,其權重更新乘子為a=(1-ε)/ ε。對于正確分類的點,其權重不變。接著在整個數(shù)層集上做歸一化(這是降低被正確分類的數(shù)據(jù)點的重要性的有效方法)。在設定的迭代次數(shù)結束之后訓練終止,或者當所有的數(shù)據(jù)點都被正確分類后訓練終止,或者一個點的權重大于最大可用權重的一半時訓練也終止。初始化所有的權值為1/N,其中N為數(shù)據(jù)點的個數(shù)當 (t<T,最大迭代次數(shù)):在 上訓練分類器,得到數(shù)據(jù)點 的假設 計算訓練誤差 設置 如果一棵樹是好的,那么許多樹木應該更好,只要他們有足夠的變化。創(chuàng)建一個訓練集的bootstrap樣本。在決策樹的每一個節(jié)點,隨機選擇m個特征,然后只在這些特征集合中計算信息增益(或者基尼不純度),選擇最優(yōu)的一個。 計算屬于每一個可能的類別的輸入的概率,通過如下公式計算(其中w_i是對于每個分類器的權重):傳遞一個輸入到下一層門(這里的和是和該門相關的輸入上的和):無監(jiān)督學習在不知道數(shù)據(jù)點屬于這一類而那些數(shù)據(jù)點屬于另一類的情況下找到數(shù)據(jù)中相似輸入的簇。 用下面的距離將數(shù)據(jù)點安排到最近的簇中心。 將中心的位置移到這個簇中點的均值處(Nj是簇j中點的個數(shù)): 用下面的距離將數(shù)據(jù)點安排到最近的簇中心選擇一個值k,它與輸出節(jié)點的數(shù)目有關。歸一化數(shù)據(jù)以便所有的點都在單位球上。 設置權值來增加數(shù)據(jù)的前d個主成分的方向 用權重和輸入間的歐氏距離的最小值來選擇最匹配的神經元 , 用下面的公式來更新最匹配節(jié)點的權重向量: 這里 是鄰居節(jié)點的學習效率,而是鄰居函數(shù) ,它決定是否每個神經元應該是勝利神經元的鄰居(所以h=1是鄰居,h=0不是鄰居) 減少學習效率并且調整鄰居函數(shù),一般通過 ,這里0≤α≤1決定大小下降的速度,k是算法已經運行的迭代次數(shù),k_max是算法停止的迭代次數(shù)。相同的公式被用于學習效率(η,ηn)和鄰居函數(shù) 用權重和輸入間的歐氏距離的最小值來選擇最匹配的神經元n_b:(*本文為 AI科技大本營轉載文章,轉載請聯(lián)系作者)
|