機器學習總結(2)—分類中的代數模型

simpleye1發表於2020-10-24

前言

  過去幾個月,一直在學習機器學習模型,輸入只是學習的一部分,輸出可以幫助自己更熟練地掌握概念和知識。把一個複雜的事物簡單的講述出來,才能表示真正弄懂了這個知識。所以我將在部落格中儘量簡單地把這些模型講述出來,以加深自己的掌握,也為他人提供一點點參考。在此感謝大神劉建平Pinard的部落格,如有任何疑惑可參考該神部落格,這只是我的狗尾續貂之作。

正文

  本篇介紹分類模型中的代數模型,分類模型我個人認為,根據基本數學方法進行分類,有代數模型,樹模型,概率模型,其他。具體分類情況如下:

 

 

   代數模型的意思是,我們總是運用Xθ+b=y的或者類似的形式來求得分類和迴歸的結果。這裡樣本矩陣(m*n),θ是我們要求的係數(n*1),乘積結果就是m個樣本的迴歸結果。儘管我們後面可能進行啟用函式的變換,但基本的數學方法就是如此。

1.線性迴歸

  基本思想

  線性迴歸的基本思想在二維平面的展現就是:用一條直線來儘量擬合圖中的點,讓所有點到這條直線的距離最小,我們的目的是求得這樣一條直線y=θx+b,在二維裡θ是一個數,但在多維上,就是一個向量了。

  輸入

  輸入是樣本矩陣和樣本的y(這個叫標籤值)。比如一個如下的樣本:

  輸出

  輸出是係數向量θ

  θ的解釋:在本例裡θ是一個形如(θ1,θ2,θ3,θ4)的向量,他們分別與身高年齡等特徵相乘最後相加,得到髮量y‘(y'跟實際的y是有差距的,畢竟我們是擬合得來的,我們的目的就是通過損失函式的優化,讓差距最小)。

  θ的作用:當得到一個新的樣本,有身高、年齡、性別、體重,我們用θ可以預測到髮量,這就是迴歸。

  損失函式

  模型的損失我們用均方差來度量,(y'-y)2(這個也好解釋,就是預測的y值與實際y值得差距),我們想得到一個θ讓所有樣本的均方差和最小,於是我們對θ求偏導等於0。

損失函式:所有樣本的均方差和(前面的1/2只是為了求導方便而新增的,不會影響求導結果:比如y=x2和y=2x2求導y'=0結果都一樣)

  優化方法

  優化方法就是求極值的方法,對於線性模型,我們可以用梯度下降和最小二乘:

  梯度下降:(隨便另一個初始θ,a是迭代步長,可以自己設定),迭代數次後θ變化不大,就可以得出結果了。

這裡求梯度是標量對向量的求導,運用的到公式主如下,非常簡單就可以計算出來

  

  最小二乘:(是一種求解析解的方法,可以直接得到結果,但最小二乘有一些侷限性)

  虛擬碼

  輸入特徵矩陣X和y值

  設定一個初始θ

    迴圈

    直到θ變化很小

  輸出θ

2.邏輯迴歸

  基本思想

  邏輯迴歸的基本思想在二維平面上借鑑線性迴歸,我們想要一條線把二維平面上的兩類點儘量分開。我們再把結果y用一個函式g(啟用函式)投射到一個有限的空間(0-1)裡面去,這樣我們就能通過判斷g(Y)的值來判斷類別。比如g(Y)>0.5是1類,g(Y)<0.5是0類。(為什麼要用這個啟用函式?個人理解它非常適合我們的1、0概率模型)

  這個函式g我們用sigmoid啟用函式。它的基本形式是(這裡z就是y的意思),這個函式形式可以讓y值無窮大時接近1,無窮小時接近0,y取0時接近為0.5。它的導數有很好的性質:

用矩陣形式表示(算出來是一個向量)

  輸入

  輸入還是X和y,這時候y就是0和1的值了,二分類嘛

  輸出

  我們想得到一個θ,讓分類結果儘量正確。

  損失函式

  由於是y是0,1構成,不再是連續值,所以不能使用均方差了。於是我們用最大似然法來得到損失函式,最大似然法的基本思想就是求得θ,讓P(概率)儘量大。單個樣本的概率分散式為,y只能取0和1。

  對所有樣本來說,概率分佈為:(其實就是把各個樣本的概率乘起來,極其簡單)

  我們要最大化這個函式,就等於最小化-L(θ)這個函式

  

  於是損失函式為:(加了個對數,為了方便計算,因為對數可以把乘法轉化為加法)

  

  (E是全為1的向量)

  (這裡再說一說極大似然法,舉個簡單的例子,我有兩個硬幣(100元的硬幣,1元的硬幣),分別丟擲,我想得到1,0的觀測結果(1是正面),我用力度θ可以控制正反面的概率,於是我當然要求一個θ讓100元的硬幣正面概率大,讓1元的反面概率大,這樣相乘的結果才能最大概率接近我想要的。這就是極大似然,求出現概率最大時,θ等於多少)

  (同時再說一下這裡極大似然的幾何意義,最大概率,也就是所有點儘可能離分界線遠遠的)

優化方法

  還是用梯度法:

  

   

虛擬碼

  輸入特徵矩陣X和y值

  設定一個初始θ

    迴圈

    直到θ變化很小

  輸出θ

3.感知機

  基本思想

  感知機的基本思想和邏輯迴歸類似,在二維平面上,用一條線分開兩類,在三維平面上,用一個平面分開兩類。所以使用感知機的資料必須是線性可分的資料。與邏輯迴歸不同,邏輯迴歸讓所有點儘量遠離分隔線,感知機讓誤分類的樣本距離分隔線儘量近,讓誤分類樣本離超平面的距離儘量小(當沒有誤分類點時,感知機存在多個超平面都可以正確分類)。並且用的啟用函式也不同,感知機用了最簡單的啟用函式:

(θ和x均為向量,這個啟用函式有利於我們區分誤分類點)

 

  輸入

  感知機的輸入,依然是X樣本集,y是1和-1的標籤(設立-1的標籤有利於我們設定損失函式)

  輸出

  得到合適的超平面的引數θ

  損失函式

  我們用誤分類點到超平面的距離作為損失函式,並求它的最小值,那麼哪些是誤分類點呢:的點就是誤分類點,因為對於誤分類點,y和θ*x一定異號。判斷好了哪些是誤分類點後,把他們跟超平面的距離加起來,總的距離為:(這個公式理解起來很容易,把-y和求和符號除開,就是點到線的距離公式,-y只是為了保證式子為正,求和符號為了求得所有誤分類點距離,對了||θ||2表示2範數,就等於θ向量中每個數的平方和求平方根)

  觀察式子,式子的分子分母同時存在θ,很顯然當θ增大N倍,分母分子同樣增大N倍,整體不變。由於我們不關心具體求導等於多少,只關心什麼時候是極值,所以我們可以固定分母或者分子為1,然後求另一個即分子自己或者分母的倒數的最小化作為損失函式,這樣可以簡化我們的損失函式。

  於是損失函式為

  優化方法

  我們採用隨即梯度下降法(SGD),每次更新只用一個誤分類樣本進行梯度迭代更新:

  (批量迭代是這樣)

  (隨機迭代的更新公式,yx在誤分類樣本中隨機選擇)

  虛擬碼

  輸入X和y(1,-1)的樣本集

  1.設定初始θ,迭代步長a(感知機不唯一,所以初始值和步長會影響超平面)

  2.判斷誤分類樣本集M

    3.在誤分類樣本中隨機選擇1個樣本

    4.更新

    5.檢查訓練集裡是否還有誤分類的點,如果沒有,演算法結束,輸出。如果有,繼續第2步

  (感知機還有一個對偶的演算法形式,可以簡化演算法,就是提前計算好Gram矩陣,每次呼叫內積就行了,由於我是講基本原理,這裡就不贅述了,有興趣請自行搜尋)

4.支援向量機

  基本思想

  支援向量機的基本思想與感知機類似,但是在超平面的規定上進行了一些優化。感知機想要誤分類點到超平面的距離最近,最好為0也就沒有誤分類點了。在沒有誤分類點時,感知機存在多個超平面都可以進行有效分類。而支援向量機則考慮在那麼多個超平面中,哪個最好呢?於是選擇一個超平面,讓支援向量到超平面的間隔最大。所以這裡支援向量機的基礎條件是不存在誤分類點。

  什麼叫支援向量:支援向量就是正確分類後,那些距離超平面很近的點。更通俗來說,比如一個欄杆把學生分為了男生女生,最靠近欄杆的學生就是支援向量,而這個最靠近的學生跟欄杆的垂直距離叫間隔。

  (間隔的度量,這裡我們用幾何間隔,幾何間隔就是求點到線的正常公式,還有一個函式間隔就是隻取這個公式的分子部分,分子部分就是函式間隔,函式間隔可以用來判斷分類正確與否,用來做約束條件,跟感知機一樣)

(中間實線為最優超平面)

  輸入

  輸入與感知機一樣,樣本X和分類y(1,-1)

  輸出

  輸出最佳的超平面引數θ

  損失函式

  我們要最大化,支援向量到超平面的距離(幾何間隔),我們最大化這個距離的目標函式為:

(min的目的是找支援向量,max的目的是最大化支援向量和超平面的距離,約束條件是在正確分類的點的情況下。勘誤:w範數下面應該有個2,這裡的分母w意思是分子的w中的元素新增上b,參看感知機用一個θ就完全表示了)

  很明顯,這個函式極其難優化,因為不同的w,我們要選不同的樣本點的xi,但是我們經過一系列abaaba的操作後,就可以簡化為下面的式子,我們的損失函式為:

 

(這裡是abaaba操作,可以不看,具體操作如下:我們注意到與感知機一樣,分子上下都有w,可以同時縮放w和b而不影響求最大值,那麼我們同時放大N倍,使得N*y(wx+b)=1,於是我們整個公式就相當於求,單看這個公式,前面的公式不要去想,公式成這樣以後,1代表了函式間隔,我們前面說了正確分類的點,距離要大於函式間隔,因此約束條件相應改變。注意,這裡求距離的時候,我們已經沒有選擇用哪個點的xi了,公式裡沒有xi了,我們把函式間隔就設定為1)

  優化方法

  對於上面這個式子,它叫做不等式約束條件下的最優化,又叫KKT條件問題,解決這種問題的方法我們有一個套路叫“拉格朗日函式法”,把有約束優化問題轉化無約束優化問題:

 對於上述式子,我們通過對偶形式轉換求w,b偏導數為0來得到w,b關於a的式子,並把總方程轉化為只關於ai的式子:

通過SMO演算法求a向量最終可解得w,b

這裡說一下求b的方法,找出S個支援向量,判斷條件是a向量(形狀為m*1)裡面ai>0的點對應的i這個樣本,就是支援向量,對於這個支援向量有公式如下:

,於是我們可以計算出每個支援向量的b,然後求均值,其實這裡b值應該都一樣,只是為了以後演算法改進軟間隔的健壯性求個均值。

(這是一個解析法+迭代法的優化,求偏導為0是解析法,smo是迭代法)

  虛擬碼

  輸入跟感知機一樣,X樣本和y(1,-1)

  1.構造一個約束優化問題,即上面只關於a的哪個式子

  2.用SMO法求a

  3.求出w,

  4.求出b:找出支援向量,運用公式求出每個支援向量的b,求均值

  輸出一個w和b,也就是θ

  

  演算法改進(關於軟間隔和硬間隔)

  上述演算法只能應對線性完全可分的情況,但如果資料大部分是線性可分,但是存在異常點,導致不能線性可分了,如

   又或者,異常點沒有達到不可分的底部,但會嚴重擠壓間隔空間,如:

 

 

 

  如果沒有藍點,那麼我的超平面間隔就會寬且合理,有了這個異常點讓分隔變得異常窄。

  如何處理這兩種情況呢?SVM引入軟間隔的方法來解決,相對來說,我們上面的方法就是硬間隔

  硬間隔的最大化條件為

 

  軟間隔引入一個鬆弛變數ξi,使得約束成為,這樣對於異常點,只要我們ξi變大,就能抵消異常點的傷害了,但是如果所有點都加大鬆弛變數,不就亂套了嗎,於是我們對於鬆弛變數的變大也要有懲罰,,這樣我們就可以得到合適的應對誤分類點的方法了。C是懲罰係數,要自己規定,C越小,就越可以容忍誤分類點,具體設定可以通過網格搜尋確定。

 

  關於軟間隔的損失函式優化問題,其實與硬間隔類似,任然求偏導,得到a的表示式,用SMO求a,得解。

  演算法改進(非線性問題)

  SVM演算法內容實在是多啊

  對於非線性問題,我們的基本思想是,投影到高維平面去,增加維度,就可以變成線性的,比如y=x+x2這個非線性問題,我們把x2設為x2,那麼y=x1+x2這個線性問題,問題就得到了解決。

  看看我們的目標函式最終形態:

  關於維度的問題,只出現在了xi*xj這個向量內積上,於是比如本來xi是1維非線性,我們用一個函式把它投射到2維線性可分,於是公式變成:,但是當維數太高,比如1萬維,太難以計算,於是我們就用上了核函式!

 

  核函式的基本思想是要讓我們能用低緯向量計算,卻產生高維向量線性可分的結果。如何計算?那就涉及到我們用哪個核函式了,現有的核函式有:

  多項式核函式:

  

  高斯核函式:

  

  sigmoid核函式:

   

  其中引數都需要自己調整,以適應高維可分性。

  於是我們的目標函式變成:

  

 

  代入到我們的演算法當中,就可求解,至此SVM的優化結束

  本章完結撒花,後續還有神經網路,矩陣分解

 

 

 

 

 

 

找出所有的S個支援向量,即滿足αs>0(xs,ys)αs>0對應的樣本(xs,ys),通過 ys(i=1mαiyixTixs+b)=1ys(∑i=1mαiyixiTxs+b)=1,計算出每個支援向量(xx,ys)(xx,ys)對應的bsbs∗,計算出這些bs=ysi=1mαiyixTixsbs∗=ys−∑i=1mαiyixiTxs. 所有的bsbs∗對應的平均值即為最終的b=1Si=1Sbs

相關文章