過去幾個月,一直在學習機器學習模型,輸入只是學習的一部分,輸出能夠幫助本身更熟練地掌握概念和知識。把一個複雜的事物簡單的講述出來,才能表示真正弄懂了這個知識。因此我將在博客中儘可能簡單地把這些模型講述出來,以加深本身的掌握,也爲他人提供一點點參考。在此感謝大神劉建平Pinard的博客,若有任何疑惑可參考該神博客,這只是個人狗尾續貂之做。算法
本篇介紹分類模型中的代數模型,分類模型我我的認爲,根據基本數學方法進行分類,有代數模型,樹模型,機率模型,其餘。具體分類狀況以下:網絡
代數模型的意思是,咱們老是運用Xθ+b=y的或者相似的形式來求得分類和迴歸的結果。這裏樣本矩陣(m*n),θ是咱們要求的係數(n*1),乘積結果就是m個樣本的迴歸結果。儘管咱們後面可能進行激活函數的變換,但基本的數學方法就是如此。機器學習
線性迴歸的基本思想在二維平面的展示就是:用一條直線來儘可能擬合圖中的點,讓全部點到這條直線的距離最小,咱們的目的是求得這樣一條直線y=θx+b,在二維裏θ是一個數,但在多維上,就是一個向量了。分佈式
輸入是樣本矩陣和樣本的y(這個叫標籤值)。好比一個以下的樣本:函數
輸出是係數向量θ學習
θ的解釋:在本例裏θ是一個形如(θ1,θ2,θ3,θ4)的向量,他們分別與身高年齡等特徵相乘最後相加,獲得髮量y‘(y'跟實際的y是有差距的,畢竟咱們是擬合得來的,咱們的目的就是經過損失函數的優化,讓差距最小)。優化
θ的做用:當獲得一個新的樣本,有身高、年齡、性別、體重,咱們用θ能夠預測到髮量,這就是迴歸。atom
模型的損失咱們用均方差來度量,(y'-y)2(這個也好解釋,就是預測的y值與實際y值得差距),咱們想獲得一個θ讓全部樣本的均方差和最小,因而咱們對θ求偏導等於0。spa
損失函數:全部樣本的均方差和(前面的1/2只是爲了求導方便而添加的,不會影響求導結果:好比y=x2和y=2x2求導y'=0結果都同樣)3d
優化方法就是求極值的方法,對於線性模型,咱們能夠用梯度降低和最小二乘:
梯度降低:(隨便另外一個初始θ,a是迭代步長,能夠本身設定),迭代數次後θ變化不大,就能夠得出結果了。
這裏求梯度是標量對向量的求導,運用的到公式主以下,很是簡單就能夠計算出來
最小二乘:(是一種求解析解的方法,能夠直接獲得結果,但最小二乘有一些侷限性)
輸入特徵矩陣X和y值
設定一個初始θ
循環
直到θ變化很小
輸出θ
邏輯迴歸的基本思想在二維平面上借鑑線性迴歸,咱們想要一條線把二維平面上的兩類點儘可能分開。咱們再把結果y用一個函數g(激活函數)投射到一個有限的空間(0-1)裏面去,這樣咱們就能經過判斷g(Y)的值來判斷類別。好比g(Y)>0.5是1類,g(Y)<0.5是0類。(爲何要用這個激活函數?我的理解它很是適合咱們的一、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值
設定一個初始θ
循環
直到θ變化很小
輸出θ
感知機的基本思想和邏輯迴歸相似,在二維平面上,用一條線分開兩類,在三維平面上,用一個平面分開兩類。因此使用感知機的數據必須是線性可分的數據。與邏輯迴歸不一樣,邏輯迴歸讓全部點儘可能遠離分隔線,感知機讓誤分類的樣本距離分隔線儘可能近,讓誤分類樣本離超平面的距離儘可能小(當沒有誤分類點時,感知機存在多個超平面均可以正確分類)。而且用的激活函數也不一樣,感知機用了最簡單的激活函數:
(θ和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矩陣,每次調用內積就好了,因爲我是講基本原理,這裏就不贅述了,有興趣請自行搜索)
支持向量機的基本思想與感知機相似,可是在超平面的規定上進行了一些優化。感知機想要誤分類點到超平面的距離最近,最好爲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),經過 ys(∑i=1mαiyixTixs+b)=1,計算出每一個支持向量(xx,ys)對應的b∗s,計算出這些b∗s=ys−∑i=1mαiyixTixs. 全部的b∗s對應的平均值即爲最終的b∗=1S∑i=1Sb∗s