關於機器學習的知識點,全在這篇文章裡了

dicksonjyl560101發表於2019-08-17


https://www.toutiao.com/a6725605865505686030/


來源:大資料

本文約 12000字, 建議閱讀 10分鐘。

本文為大家介紹機器學習的魅力與可怕。

[ 導讀 ] 作者用超過1.2萬字的篇幅,總結了自己學習機器學習過程中遇到知識點。“入門後,才知道機器學習的魅力與可怕。”希望正在閱讀本文的你,也能在機器學習上學有所成。

關於機器學習的知識點,全在這篇文章裡了


00 準備

機器學習是什麼,人工智慧的子類,深度學習的父類。

機器學習: 使計算機改進或是適應他們的行為,從而使他們的行為更加準確。也就是通過資料中學習,從而在某項工作上做的更好。

引用王鈺院士在2008年會議的一句話,假定W是給定世界的有限或者無限的所有物件的集合,Q是我們能夠或得到的有限資料,Q是W的一個很小的真子集,機器學習就是根據世界的樣本集來推算世界的模型,使得模型對於整體世界來說為真。

機器學習的兩個驅動: 神經網路,資料探勘。

機器學習的分類:

  • 監督學習: 提供了包含正確回答的訓練集,並以這個訓練集為基礎,演算法進行泛化,直到對所有的可能輸入都給出正確回答,這也稱在範例中學習。
  • 無監督學習: 沒有提供正確回答,演算法試圖鑑別出輸入之間的相似,從而將同樣的輸入歸為一類,這種方法稱密度學習。
  • 強化學習: 介於監督和無監督之間,當答案不正確時,演算法被告知,如何改正則不得而知,演算法需要去探索,試驗不同情況,直到得到正確答案,強化學習有時稱為伴隨評論家的學習,因為他只對答案評分,而不給出改進建議。
  • 進化學習: 將生物學的進化看成一個學習過程,我們研究如何在計算機中對這一過程進行建模,採用適應度的概念,相當於對當前解答方案好壞程度的評分。(不是所有機器學習書籍都包含進化學習)

優點: 泛化,對於未曾碰到的輸入也能給出合理的輸出。

監督學習: 迴歸、分類。

機器學習過程:

  • 資料的收集和準備
  • 特徵選擇
  • 演算法選擇
  • 引數和模型選擇
  • 訓練
  • 評估

專業術語:

  • 輸入: 輸入向量x作為演算法輸入給出的資料
  • 突觸: wij是節點i和節點j之間的加權連線,類似於大腦中的突觸,排列成矩陣W
  • 輸出: 輸出向量y,可以有n個維度
  • 目標: 目標向量t,有n個維度,監督學習所需要等待額外資料,提供了演算法正在學習的“正確答案”
  • 維度: 輸入向量的個數
  • 啟用函式: 對於神經網路,g(·)是一種數學函式,描述神經元的激發和作為對加權輸入的響應
  • 誤差:E是根據y和t計算網路不準確性的函式
  • 權重空間: 當我們的輸入資料達到200維時,人類的限制使得我們無法看見,我們最多隻能看到三維投影,而對於計算機可以抽象出200個相互正交的軸的超平面進行計算,神經網路的引數是將神經元連線到輸入的一組權重值,如將神經元的權重視為一組座標,即所謂的權重空間
  • 維度災難: 隨著維度的增加,單位超球面的體積也在不斷增加,2d中,單位超球面為圓,3d中則為求,而更高的維度便稱為超球面,Vn = (2π/n)*Vn-2,於是當n>2π時,體積開始縮小,因此可用資料減少,意味著我們需要更多的資料,當資料到達100維以上時,單位資料變得極小,進而需要更多的資料,從而造成維度災難

維度和體積的關係:


關於機器學習的知識點,全在這篇文章裡了


機器學習演算法測試:

演算法成功程度是預測和一直目標進行比較,對此我們需要一組新的資料,測試集。

當對演算法進行訓練時,過度的訓練將會導致過擬合,即擬合曲線與資料完美擬合,但是失去了泛化能力,為檢測過擬合我們需要用測試集進行驗證,稱為統計中的交叉驗證,它是模型選擇中的一部門:為模型選擇正確的引數,以便儘可能的泛化。

資料的準備,我們需要三組資料集,訓練演算法的訓練集,跟蹤演算法學習效果的驗證集,用於產生最終結果的測試集,資料充足情況便執行50:25:25或60:20:20的劃分,資料集分配應隨機處理,當資料請核實板塊,則採用流出方法或多折交叉驗證。

混淆矩陣是檢測結果是否良好的分類,製作一個方陣,其包含水平和垂直方向上所有可能的類,在(i,j)處的矩陣元素告訴我們在目標中有多少模式被放入類i中,主對角線上任何東西都是正確答案,主對角線元素之和除以所有元素的和,從而得到的百分比便是精度。

精度指標: 真正例是被正確放入類1,假正例是被錯誤放入類1,而真反例是被正確放入類2,假反例是被錯誤放入類2。

真正例(TP)

假正例(FP)

假反例(FN)

真反例(TN)

  • 敏感率=#TP/(#TP+#FN) 特異率=#TN/(#TN+#FP)
  • 查準率=#TP/(#TP+#FP) 查全率=#TP/(#TP+#FN)
  • F1 = 2*(查準率*查全率)/(查準率+查全率)

受試者工作曲線: y軸真正例率,x軸假正例率,線下區面積:AUC。

資料與概率的轉換: 通過貝葉斯法則處理聯合概率P(C,X)和條件概率P(X|C)得出P(C|X),MAP問題是訓練資料中最可能的類是什麼。將所有類的最終結果考慮在內的方法稱為貝葉斯最優分類。

損失矩陣: 指定類Ci被分為類Cj所涉及的風險。

基本統計概念: 協方差,度量兩個變數的依賴程度。

Cov({xi},{yi})=E({xi} – u)E({yi} – v)

權衡偏差與方差: 偏差-方差困境:更復雜的模型不一定能產生更好的結果;模型糟糕可能由於兩個原因,模型不準確而與資料不匹配,或者不精確而有極大的不穩定性。第一種情況稱為偏差,第二種情況稱為方差。

01 神經元、神經網路和線性判別

1. 魯棒性

魯棒是Robust的音譯,也就是健壯和強壯的意思。它是在異常和危險情況下系統生存的關鍵。比如說,計算機軟體在輸入錯誤、磁碟故障、網路過載或有意攻擊情況下,能否不當機、不崩潰,就是該軟體的魯棒性。

2. 神經網路

神經網路模仿的便是生物學中的神經網路,通過輸入進而判定神經元啟用否。

將一系列的神經元放置在一起,假設資料存在模式。通過神經元一些已知的樣例,我們希望他能夠發現這種模式,並且正確預測其他樣例,稱為模式識別。為了讓神經網路能夠學習,我們需要改變神經元的權重和閾值進而得到正確的結果,歷史上的第一個神經網路——感知器。

3. Hebb法則

突觸連線強度的變化和兩個相連神經元啟用得相關性成比例,如果兩個神經元始終同時啟用,那麼他們之間連線的強度會變大,反之,如果兩個神經元從來不同時啟用,那麼他們之間的連線會消失。也被成為長時效增強法則和神經可塑性。

4. McCulloch和Pitts神經元

建模,一組輸入加權wi相當於突觸,一個加法器把輸入訊號相加(等價於收集電荷的細胞膜),一個啟用函式,決定細胞對於當前的輸入是否啟用,輸入乘於權重的和與閾值進行判斷,大於則啟用,否則抑制。侷限性:現實中的神經元不給出單一的輸出相應,而是給出一個點位序列,一種連續的方式給出分等級的輸出。神經元不會根據電腦的時鐘脈衝去順序更新,而是隨機的非同步更新。

5. 感知器

關於機器學習的知識點,全在這篇文章裡了


▲感知器神經網路

  • 權重更新規則

Wij <- Wij – n(yi – ti)*xi

N為學習效率,過大會造成網路不穩定,過小會造成學習時間久;yi為神經元輸出,ti為神經元目標,xi為神經元輸入,Wij為權重。

  • 感知器學習演算法

分為兩部分,訓練階段和再現階段。

初始化

設定所有的權重wij為小的隨機數(正或負都可)。

訓練

對T次迴圈

對每一個輸入向量:

利用啟用函式g計算每一個神經元j的啟用狀態:

關於機器學習的知識點,全在這篇文章裡了


利用下式更新每一個權重:

關於機器學習的知識點,全在這篇文章裡了


再現

利用下式計算每一個神經元j的啟用狀態:

關於機器學習的知識點,全在這篇文章裡了


6. 線性可分性

一條直線將神經元啟用的和不啟用的神經元劃分開來,這條直線稱為決策邊界,也稱為判別函式,在三維空間該決策邊界為平面,更高維則為超平面。

7. 感知器收斂定理

感知器以1/γ*γ為界,其中γ為分離超平面與最接近的資料點之間的距離。

只要把資料對映到正確的維度空間,那麼總是可以用一個線性函式來把兩個類別區分開,為了較有效率的解決這個問題,有一整類的方法稱為核分類器,也是支援向量機的基礎。

8. 資料項預處理

特徵選擇,我們每次去掉一個不同的特徵,然後試著在所得的輸入子集上訓練分類器,看結果是否有所提高,如果去掉某一個特徵能使得結果有所改進,那麼久徹底去掉他,在嘗試能否去掉其他的特徵,這是一個測試輸出與每一個特徵的相關性的過於簡單方法。

9. 線性迴歸

迴歸問題是用一條線去擬合資料,而分類問題是尋找一條線來劃分不同類別。迴歸方法,引入一個指示變數,它簡單的標識每一個資料點所屬的類別。現在問題就變成了用資料去預測指示變數,第二種方法是進行重複的迴歸,每一次對其中的一個類別,指示值為1代表樣本屬於該類別,0代表屬於其他類別。

02 維度簡約

1. 降維的三種演算法

  • 特徵選擇法: 仔細查詢可見的並可以利用的特徵而無論他們是否有用,把它與輸出變數關聯起來
  • 特徵推導法: 通過應用資料遷移,即通過可以用矩陣來描述的平移和旋轉來改變圖示的座標系,從而用舊的特徵推匯出新的特徵,因為他允許聯合特徵,並且堅定哪一個是有用的,哪一個沒用
  • 聚類法: 把相似的資料點放一起,看能不能有更少的特徵

2. 特徵選擇方法

建設性方法:通過迭代不斷加入,測試每一個階段的錯誤以瞭解某個特徵加入時是否會發生變化。破壞性方法是去掉應用在決策樹上的特徵。

  • 主成分分析(PCA)

主成分的概念是資料中變化最大的方向。演算法首先通過減去平均值來把資料集中, 選擇變化最大的方向並把它設為座標軸,然後檢查餘下的變化並且找一個座標軸使得它垂直於第一個並且覆蓋儘可能多的變化。

不斷重複這個方法直到找到所有可能的座標軸。這樣的結果就是所有的變數都是沿著直角座標系的軸,並且協方差矩陣是對角的——每個新變數都與其他變數無關,而只與自己有關。一些變化非常小的軸可以去掉不影響資料的變化性。

  • 具體演算法
寫成N個點Xi=(X1i,X2i,... xXi)作為行向量。把這些向量寫成一個矩陣X(X將是N*M階矩陣)。通過減去每列的平均值來把資料中心化,並令變化好的矩陣為B。計算協方差陣C= 1/N *B^TB。計算C的特徵向量和特徵值,即V^-1CV=D,其中V由C的特徵向量組成,D是由特徵值組成的M*M階對角矩陣。把D對角線上元素按降序排列,並對V的列向量做同樣的排列。去掉那些小於η的特徵值,剩下L維的資料。

3. 基於核的PCA演算法

選擇核並且把它應用於距離矩陣從而得到矩陣K。計算K的特徵值和特徵向量。通過特徵值的平方根標準化特徵向量。保留與最大特徵值對應的特徵向量。

4. 因素分析

觀察資料是否可以被少量不相關的因素或潛在的變數解釋,目的用於發現獨立因素和測量每一個因素固有的誤差。

5. 獨立成分分析(ICA)

統計成分是獨立的,即對於E[bi,bj] = E[bi]E[bj]與及bi是不相關的。

6. 區域性線性嵌入演算法

找出每個點的鄰近點(即前k個近的點):計算每對點間的距離。找到前k個小的距離。對於其他點,令Wij=0.對每個點xi:建立一個鄰近點的位置表z,計算zi=zi-xi。

根據約束條件計算令等式(6.31)最小的權矩陣W:計算區域性協方差C=ZZ^T,其中Z是zi組成的矩陣。利用CW=I計算W,其中I是N*N單位矩陣。對於非鄰近點,令Wij=0。

對W/∑W設定其他元素計算使得等式(6.32)最小的低維向量 yi:建立M=(I-W)T(I-W).計算M的特徵值和特徵向量。根據特徵值的大小給特徵向量排序。對應於第q小的特徵值,將向量y的第q行設定為第q+1 個特徵向量(忽略特徵值為0)

關於機器學習的知識點,全在這篇文章裡了


關於機器學習的知識點,全在這篇文章裡了


7. 多維標度演算法

計算由每對點平方相似度組成的矩陣D, Dij=|xi-xj|.計算J=IN – 1/N (IN是N*N單位矩陣,N是資料點個數)。計算B=-1/2JDJ^T.找到B的L個最大的特徵值入i,,以及相對應的特徵向量ei。用特徵值組成對角矩陣V並且用特徵向量組成矩陣P的列向量。計算嵌入x=pv^0.5

8. ISOMAP演算法

建立所有點對之間的距離確定每個點的鄰近點,並做成一個權重表G通過找最短路徑估計測地距離dG把經典MDS演算法用於一系列dG

03 概率學習

1. 期望最大演算法(EM)

額外加入位置變數,通過這些變數最大化函式。

2. 高斯混合模型的期望最大演算法

初始化

設定

關於機器學習的知識點,全在這篇文章裡了

是從資料集中隨機選出來的值

設定

關於機器學習的知識點,全在這篇文章裡了

(這裡

關於機器學習的知識點,全在這篇文章裡了

是整個資料集的平均值)

設定

關於機器學習的知識點,全在這篇文章裡了

=0.5

迭代直到收斂:

關於機器學習的知識點,全在這篇文章裡了


3. 通常的期望最大化演算法

初始化

猜測引數

關於機器學習的知識點,全在這篇文章裡了


迭代直到收斂:

關於機器學習的知識點,全在這篇文章裡了


關於機器學習的知識點,全在這篇文章裡了


4. 資訊準則

除了通過模型選擇確定停止學習的時間,前期採用驗證集思想,而資訊準則則是確定一些方法從而期待這個訓練過的模型可以表現的多好。

  • 艾卡資訊準則:AIC = ln(C)-k
  • 貝葉斯資訊準則:BIC = 2ln(C)-klnN


K是模型中引數的數目,N是訓練樣本的數量,C是模型的最大似然。以上兩種方法都是奧卡姆剃刀的一種形式。

5. 奧卡姆剃刀

如無必要,勿增實體,即簡單有效原理。

6. 最近鄰法

如果沒有一個描述資料的模型,那麼最好的事情就是觀察相似的資料並且把他們選擇成同一類。

7. 核平滑法

用一個和(一堆點的權重函式)來根據輸入的距離來決定每一個資料點有多少權重。當兩個核都會對離當前輸入更近的點給出更高的權重,而當他們離當前輸入點越遠時,權重會光滑的減少為0,權重通過λ來具體化。

8. KD-Tree

在一個時刻選擇一個維度並且將它分裂成兩個,從而建立一顆二進位制樹,並且讓一條直線通過這個維度裡點的座標的中位數。這與決策樹的差別不大。資料點作為樹的樹葉。

製作樹與通常的二進位制樹的方法基本相同:我們定義一個地方來分裂成兩種選擇——左邊和右邊, 然後沿著它們向下。可以很自然地想到用遞迴的方法來寫演算法。

選擇在哪分裂和如何分裂使得KD-Tree是不同的。在每一步只有一個維度分裂,分裂的地方是通過計算那一維度的點的中位數得到的,並且在那畫一條直線。通常,選擇哪一個維度分裂要麼通過不同的選擇要麼隨機選擇。

演算法向下搜尋可能的維度是基於到目前為止樹的深度,所以在二維裡,它要麼是水平的要麼是垂直的分裂。組成這個方法的核心是簡單地選代選取分裂的函式,找到那個座標的中位數的值,並且根據那個值來分裂點。

04 支援向量機

1. 支援向量機(SVM)

當前現代機器學習中最流行的演算法之一,其在大小合理的資料集上經常提供比其他機器學習演算法更好的分類效能。

2. 支援向量

在每個類中距離分類線最近的那些點則被稱為支援向量。

如果有一個非線性可分資料集,那麼就不能滿足所有資料點的約束條件,解決方法是引入一些鬆弛變數η>=0。

3. 選擇核

任何一個對稱函式如果是正定的,都可以用來做核。這就是Mercer定理的結果,Mercer定理也指出一些核旋繞到一起的結果可能是另一個核。

4. 支援向量機演算法

初始化:

對於指定的核心和核心引數,計算資料之間距離的核心

這裡主要的工作是計算K=XX^T。

對於線性核心,返回K,對於多項式的次數d,返回1/σ 8 K^d。

對於RBF核,計算K=exp(-(x-x')^2/2σ*σ。

訓練:

將約束集組裝為要求解的矩陣:

關於機器學習的知識點,全在這篇文章裡了

約束於

關於機器學習的知識點,全在這篇文章裡了


將這些矩陣傳遞給求解器。

將文持向量標識為距高最近點一定距離內的向量,並處理其餘的訓練集。

用公式(8.10)計算b^*

5. 分類

對於給定的測試資料z,使用支援向量對相關核心的資料進行分類,計算測試資料與支援向量的內積,進行分類,返回標記或值。

05 優化和搜尋

1. 下山法

朝哪個方向移動才能下降儘可能快:

  • 採用線性搜尋,知道方向,那麼久沿著他一直走,直到最小值,這僅是直線的搜尋;
  • 信賴域,通過二次型建立函式的區域性模型並且找到這個區域性模型的最小值。由於我們不知道防線,因此可以採用貪婪選擇法並且在每個點都沿著下降最快的方向走,這就是所知的最速下降,它意味著pk=-▽f(xk)。最速下降基於函式中的泰勒展開,這是一種根據導數近似函式值的方法。

2. Lenenberg-Marquardt演算法

給定一個初始點X0當J^Tr(x)>公差並且沒有超出最大迭代次數:重複:用線性最小二乘法算出(J^TJ+vI)dx=一J^Tr中的dx。令Xnew=x+dx。計算實際減少和預測減少的比例:實際=||f(x)- f(xnew)||預測=▽f^T(x)*xnew-xp=實際/預測如果0<p<0.25:接受:x=Xnew。或者如果p>0.25:接受: x=Xnew。增加信賴城大小(減少v)。或者:拒絕。減少信賴域大小(增加v)。一直到x被更新或超出跌代的最大次數

3. 共軛梯度

二維空間中,如下圖所示,一步沿x軸方向,另一部沿y方向,這樣足以足以達到最小值。而在n維空間我們應該走n步以達到最小值,它嘗試線上性情況下實現這個想法,但是我們通常感興趣的非線性情況下,只需要多一點迭代就可以達到最小。

關於機器學習的知識點,全在這篇文章裡了


▲左邊:如果方向之間是相互正交的並且步長是正確的,每一個維度只需要走一步,這裡走了兩步。右邊:在橢圓上共軛的方向不是相互正交的。

具體演算法:

給一個初始點x0和停止引數ε,令p0=-▽f(x)。設定Pnew=P0當Pnew>εεp0時:用牛頓-拉夫森迭代法計算αkP當ααdp>ε2時:α=-(▽f(x)^T p)(p^T H(x)p)x=x+αPdp=P^TP評價▽f(xnew)。計算βn+1-更新p←▽f(xnew)+βk+1p。檢查及重新啟動。

4. 搜尋的三種基本方法

  • 窮舉法: 檢查所有方法,保證找到全域性最優
  • 貪婪搜尋: 整個系統只找一條路,在每一步都找區域性最優解。所以對於TSP,任意選擇第-個城市,然後不斷重複選擇和當前所在城市最近並且沒有訪問過的城市,直到走完所有城市。它的計算量非常小,只有O(NlogN),但它並不保證能找到最優解,並且我們無法預測它找到的解決方案如何,有可能很糟糕。
  • 爬山法: 爬山法的基本想法是通過對當前解決方案的區域性搜尋,選擇任一個選項來改善結果,進行區域性搜尋時做出的選擇來自於一個移動集(moveset)。它描述了當前解決方案如何被改變從而用來產生新的解決方案。所以如果我們想象在2D歐幾里得空間中移動,可能的移動就是東、南、西、北。


對於TSP,爬山法要先任意選一個解決方案, 然後調換其中一對城市的順序,看看總的旅行距離是否減少。當交換的對數達到預先給定的數時,或找不到一個調換可以改善相對於預先給定的長度的結果時停止演算法。

就像貪婪演算法一樣,我們無法預測結果將會怎樣:有可能找到全域性最優解,也有可能陷在第一個區域性最大值上, 從而並不定能找到全域性最優解,爬山法的核心迴圈僅僅是調換對城市, 並且僅當它使得距離變小時才保留調換。

5. 模擬退火演算法

開始時選擇一個任意的很高的溫度T,之後我們將隨機選擇狀態並且改變它們的值,監視系統變化前後的能量。如果能量變低了,系統就會喜歡這種解決方法,所以我們接受這個變化。目前為止,這和梯度下降法很像。

然而,如果能量不變低,我們仍然考慮是否接受這個解決方法,並且接受的概率是exp((Ebefore- Eafter)/T)。這叫作波爾茲曼分佈(Boltzmann distribution)。注意到Ebefore Eafter 是負的,所以我們定義的概率是合理的。偶爾接受這個不好的狀態是因為我們可能找到的是區域性最小,並且通過接受這個能量更多的狀態,我們可以逃離出這個區域。

在重複上述方法幾次後,我們採用一個退火時間表以便降低溫度並且使得該方法能延續下去直到溫度達到0。由於溫度變低,所以接受任一個特殊的較高的能量狀態的機會就會變少。最常用的退火時間表是T(l+1)=cT(t),這裡0<c<1(更加常用的是0.8<c<1)。需要減慢退火的速度以允許更多的搜尋。

6. 四種演算法TSP結果比較

第一行為最好的解決方案和距離,第二行為執行時間,城市為10個。


Exhaustive search

((1, 5, 10, 6, 3, 9, 2, 4, 8, 7, 0), 4.18)
1781.0613
Greedy search
((3, 9, 2, 6, 10, 5, 1, 8, 4, 7, 0]), 4.49)
0.0057
Hill Climbing
((7, 9, 6, 2, 4, 0, 3, 8, 1, 5, 10]), 7.00)
0.4572
Simulated Annealing
((10, 1, 6, 9, 8, 0, 5, 2, 4, 7, 3]), 8.95)
0.0065

06 進化學習

1. 遺傳演算法(GA)

模擬進化是如何搜尋的,通過改變基因來改變個體的適應度。

GA使用字串(類似染色體的作用),字串中的每個元素都是從某些字母表中選擇,字母表中的值通常是二進位制的相當於等位基因,對於解決方法,將被變為一個字串,然後我們隨機生產字串作為初始種群。

評價適應度可以被看成一個預測,它作用於一個字串並且返回一個值,它是遺傳演算法中唯一因具體問題不同而不同的部分。最好的字串有最高的適應值,當解決方案不好時,適應度也隨之下降,GA工作於由種群組成的字串,然後評價每個字串的適應度,並進行培養。

產生後代的常用3種方法:

  • 聯賽選擇: 反覆從種群中挑選四個字串,替換並將最適合的兩個字串放人交配池中。
  • 截斷選擇: 僅按比例f挑出適應度最好的一-部分並且忽略其他的。比如,f= 0.5經常被使用,所以前50%的字串被放入交配池,並且被等可能地選擇。這很顯然是一個非常簡單的實施方法,但是它限制了演算法探索的數量,使得GA偏向於進化。
  • 適應度比例選擇: 最好的方法是按概率選擇字串,每個字串被選擇的概率與它們的適應度成比例。通常採用的函式是(對於字串a):



關於機器學習的知識點,全在這篇文章裡了


這裡F^α是適應度,如果適應度不是正值,則F需要在整個過程中被exp⁡(sF)替換,這裡s是選擇強度(selection strength)引數,並且你會意識到這個等式作為第4章的softmax啟用):


關於機器學習的知識點,全在這篇文章裡了



2. 遺傳運算元產生

最常用時實現方法是在字串中隨機找一個點,在這個點之前的部分用字串1的,而在交叉點之後,用字串2的剩下部分。我們實際上產生了兩個後代,第2個是由字串2的第一部分和字串1的第二部分組成的。這個方式稱為單點交叉,顯然,它的擴充套件是多點交叉。

最極端的情形是均勻交叉,它的字串中的每一個元素都隨機地選自與他的父母,下圖展示了三中型別的交叉法:

關於機器學習的知識點,全在這篇文章裡了


▲交叉運算元的不同形式。(a)單點交叉。隨機選擇字串中的一個位置,然後用字串1的第一部分和字串2的第二部分組成後代。(b)多點交叉。選擇多個點,後代的生成方式和前面一樣。(c)均勻交叉。每個元素都隨機的選自於它的父母。

對當前最好的字串實現進化通過編譯運算元實現,字串中每個元素的值以概率p(通常很小)改變。

3. 基本遺傳演算法

初始化進過我們選的字母表產生N個長為L的字元事。學習生成一個(開始是空的)新的種群。重複: 通過適應度在當前種群中選擇兩個字串。 重組它們產生兩個新的字串。 讓後代變異。 要麼把兩個後代加到種群中,要麼使用精英法和比賽法 保持記錄種群中最好的字串。直到新種群中產生N個字串可選性地,使用精英法從父代中挑選最合適的字串,並替換子代中的一些其他字串。追蹤新種群中最好的字串。用新種群代替當前種群直到到達停止標準。


4. 使用遺傳演算法進行圖著色

把方案編碼成字串,選擇合適的適應度函式,選擇合適的遺傳運算元。

5. 與取樣結合的進化學習

最基礎的版本是我們熟知的基於種群的增長學習演算法(PBIL).該演算法非常簡單,像基本的GA一樣,它採用一個二進位制字母表,但不保留種群,而是利用一個概率向來給出每一個元素是0或1的概率。

起初,向量的每一個值都是0.5,所以每一個元素有相等的機會變成0或1,之後通過從分佈指定的向量中取樣來構建群體,並計算群體中每個成員的適合度。

我們使用這個種群中的一個子集(通常只有前兩個適應度最高的向量)和一個學習速率p來更新概率向量,學習速率通常被設定為0.005(這裡best和second代表種群中最好的和第二好的成員):p= pX(1 - η)+ η(best十second)/2。

之後丟棄這些種群,並且利用更新的概率向量重新取樣來產生新的種群,演算法的核心就是簡單地利用適應度最高的兩個字串和更多的向量來尋找新的字串。

07 強化學習

強化學習是狀態(state)或情形(situation)與動作(action)之間的對映,目的是最大化一些數值形式的獎賞(reward)。也就是說,演算法知道當前的輸人(狀態),以及它可能做的一些事(動作),目的是最大化獎賞。進行學習的智慧體和環境之間有著明顯的區別,環境是智慧體完成動作的地方,也是產生狀態和獎賞的地方。

1. 馬爾可夫決策過程

馬爾可夫性:當前的狀態對於計算獎賞提供了足夠的資訊而不需要以前的狀態資訊,一個具有馬爾可夫性的強化學習成為馬爾可夫決策過程。它意味著基於以前的經歷,我們只需要知道當前的狀態和動作就可以計算下一步獎賞的近似,以及下一步的狀態。

2. 值

強化學習嘗試決定選擇哪一個動作來最大化未來的期望獎賞,這個期望獎賞就是值,可以考慮當前狀態,對所有采取的動作進行平均,讓策略來自己解決這個問題,即狀態值函式,或者考慮當前狀態和可能採取的動作即動作值函式。

3. O-learning演算法

初始化對於所有的s和a, 設定Q(s, a)為一個很小的隨機數。重複:初始化s。用目前的策略選擇動作a。重複: 使用ε-greedy或者其他策略來選擇動作a。 採取動作a並得到獎賞r。 取樣新的狀態s’ 更新Q(s, a)←Q(s, a)+u(r+γmaxa’ (s', a')-Q(s, a)) 設定s←s'應用到當前情節的每一步。直到沒有更多的情節。

4. Sarsa演算法

初始化對於所有的s和a,設定Q(s, a)為一個很小的隨機數。重複:初始化s。用當前策略選擇動作重複: 實行動作a並得到獎賞r 取樣新的狀態s' 用當前策略選擇動作a 更新Q(s, a)<-Q(s, a)+u(r+yYQ(s',a')-Q(s,a)). s<-s’,a<-a’應用到當前情節的每一步直到沒有更多的情節。


  • 兩種演算法的相同

都是bootstrap方法,因為他們都是從對正確答案很少的估計開始,並且在演算法進行過程中不斷迭代。

  • 不同

兩個演算法一開始都沒有環境的任何資訊,因此會利用ε-greedy策略隨機探索。然而,隨著時間的推移,兩個演算法所產生的決策出現了很大的不同。

產生不同的主要原因是Q-learning總是嘗試跟著最優的路徑,也就是最短的路,這使它離懸崖很近。並且,ε-greedy也意味著有時將會不可避免地翻倒。通過對比的方式,sarsa 演算法將會收斂到一個非常安全的路線,它遠離懸崖,即使走的路線很長。

sarsa 演算法產生了一個非常安全的路線,因為在它的Q的估計中包含了關於動作選擇的資訊,而Q-learning生成了一條冒險但更短的路線。哪種路線更好由你決定,並且依賴於跌落懸崖的後果有多麼嚴重。

08 樹的學習

決策樹的主要思想是從樹根開始,把分類任務按順序分類成一個選擇,一步步進行到葉子節點最終得到分類的結果,樹結構可以表示成if-then規則的集合,適合應用於規則歸納系統。

1. ID3

在決策樹下一次分類是,對於每一個特徵,通過計算真個訓練集的熵減少來選擇特徵,這成為資訊增益,描述為整個集合的熵減去每一個特定特徵被選擇後的熵減去每一個特定特徵被選中後的熵。

  • 具體演算法
如果所有的樣本都具有同一標記:返回標記為該類標記的葉子節點。否則,如果沒有剩餘特徵用於測試:返回標記為最常見標記的葉子節點,否則:使用公式選擇S中具有最大資訊增益的特徵戶作為下一個節點。為每一個特徵戶的可能取值f增加一個分支。對於每個分支:計算除去F後的每一個特徵的Sf,使用Sf遞迴呼叫演算法,計算目前樣本集合的資訊增益。


  • 決策樹複雜度

假設樹是近似平衡的,那麼每個節點的成本包括搜尋d個可能的特徵(儘管每個層級減少1,但這不會影響O(·)符號的複雜性),然後計算每個分裂的資料集的資訊贈與,這需要花費O(dnlogn),其中n為該節點上資料及的大小,對於根節點,n=N,並且如果樹是平衡的,則在樹的每個階段將n除於2。在樹種的大約logN層級上對此求和,得到計算成本O(dN^2logN)。

09 委員會決策:整合學習

下圖為整合學習的基本思想,給定一個相對簡單的二類分類問題和一些學習器,一個學習器的橢圓覆蓋資料的一個子集,組合多個橢圓給出相當複雜的決策邊界。

關於機器學習的知識點,全在這篇文章裡了


▲通過組合許多簡單的分類器(這裡簡單地將橢圓決策邊界放在資料上),決策邊界可以變得更加複雜,使得正例與圓圈難以分離。

1. AdaBoost(自適應提升)

每次迭代中,一個新的分類器在訓練集上訓練,而訓集中的每-個資料點在每一步迭代時都會調整權重,改變權重的根據是資料點被之前的分類器成功分類的難度。一開始, 這些權重都被初始化為1/N,其中N是訓練集中點的個數然後,每次迭代時,用所有被錯分的點的權重之和作為誤差函式ε。

對於錯誤分類的點,其權重更新乘子為a=(1-ε)/ ε。對於正確分類的點,其權重不變。接著在整個數層集上做歸一化(這是降低被正確分類的資料點的重要性的有效方法)。在設定的迭代次數結束之後訓練終止,或者當所有的資料點都被正確分類後訓練終止,或者一個點的權重大於最大可用權重的一半時訓練也終止。

具體演算法:

初始化所有的權值為1/N,其中N為資料點的個數

關於機器學習的知識點,全在這篇文章裡了

(t<T,最大迭代次數):

關於機器學習的知識點,全在這篇文章裡了

上訓練分類器,得到資料點

關於機器學習的知識點,全在這篇文章裡了

的假設

關於機器學習的知識點,全在這篇文章裡了


計算訓練誤差

關於機器學習的知識點,全在這篇文章裡了


設定

關於機器學習的知識點,全在這篇文章裡了


使用如下公式更新權值:

關於機器學習的知識點,全在這篇文章裡了


其中Zn為標準化常量

返回標記為最普通類標的葉子節點

2. 隨機森林

如果一棵樹是好的,那麼許多樹木應該更好,只要他們有足夠的變化。

3. 基本的隨機森林訓練演算法

對於每N個樹:建立一個訓練集的bootstrap樣本。使用這個bootstrap樣本訓練決策樹。在決策樹的每一個節點,隨機選擇m個特徵,然後只在這些特徵集合中計算資訊增益(或者基尼不純度),選擇最優的一個。重複過程直到決策樹完成。

4. 專家混合演算法

對於每一個專家:

計算屬於每一個可能的類別的輸入的概率,通過如下公式計算(其中w_i是對於每個分類器的權重):

關於機器學習的知識點,全在這篇文章裡了


對於樹上的每個門控網路:

計算:

關於機器學習的知識點,全在這篇文章裡了


傳遞一個輸入到下一層門(這裡的和是和該門相關的輸入上的和):

關於機器學習的知識點,全在這篇文章裡了


10 無監督學習

無監督學習在不知道資料點屬於這一類而那些資料點屬於另一類的情況下找到資料中相似輸入的簇。

1. k-means演算法

初始化

選擇一個k值。

在輸入空間中選擇k個隨機位置。

將簇中心μj,安排到這些位置。

學習

重複:

對每一個資料點Xi:

計算到每一個簇中心的距離。

用下面的距離將資料點安排到最近的簇中心。

關於機器學習的知識點,全在這篇文章裡了


對每個簇中心:

將中心的位置移到這個簇中點的均值處(Nj是簇j中點的個數):

關於機器學習的知識點,全在這篇文章裡了


直到簇中心停止移動

使用

對每個測試點:

計算到每個簇中心的距離。

用下面的距離將資料點安排到最近的簇中心

關於機器學習的知識點,全在這篇文章裡了


2. 線上k-Means演算法

初始化

選擇一個值k,它與輸出節點的數目有關。

用小的隨機值來初始化權重。

學習

歸一化資料以便所有的點都在單位球上。

重複:

對每一個資料點:

計算所有節點的啟用。

選出啟用最高的那個節點作為勝利者。

用公式更新權重。

直到迭代的次數超過閾值。

使用

對於每個測試點:

計算所有節點的啟用

選擇啟用最高的節點作為勝利者

3. 自組織特徵對映演算法

初始化

選擇大小(神經元數目)和對映的維度d

或者

隨機選擇權重向量的值使得它們都是不同的OR

設定權值來增加資料的前d個主成分的方向

學習

重複

對每一個資料點:

用權重和輸入間的歐氏距離的最小值來選擇最匹配的神經元

關於機器學習的知識點,全在這篇文章裡了

關於機器學習的知識點,全在這篇文章裡了


用下面的公式來更新最匹配節點的權重向量:

關於機器學習的知識點,全在這篇文章裡了


這裡η(t)是學習效率

其他的神經元用下面的公式更新權重向量:

關於機器學習的知識點,全在這篇文章裡了


這裡

關於機器學習的知識點,全在這篇文章裡了

是鄰居節點的學習效率,而是鄰居函式

關於機器學習的知識點,全在這篇文章裡了

,它決定是否每個神經元應該是勝利神經元的鄰居(所以h=1是鄰居,h=0不是鄰居)

減少學習效率並且調整鄰居函式,一般通過

關於機器學習的知識點,全在這篇文章裡了

,這裡0≤α≤1決定大小下降的速度,k是演算法已經執行的迭代次數,k_max是演算法停止的迭代次數。相同的公式被用於學習效率(η,ηn)和鄰居函式

關於機器學習的知識點,全在這篇文章裡了


直到對映停止改變或超出了最大迭代的次數

使用

對每個測試點:

用權重和輸入間的歐氏距離的最小值來選擇最匹配的神經元n_b:

關於機器學習的知識點,全在這篇文章裡了


編輯:黃繼彥

— 完 —



https://www.toutiao.com/a6725605865505686030/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2653979/,如需轉載,請註明出處,否則將追究法律責任。

相關文章