从Loagistic 到 SVM算法
? ? ? ?SVM(支持向量機),一種二類分類器,之所以稱之為向量機,是因為它本身就產生一個二值決策結果,即使一種決策“機”,支持向量機的泛化錯誤低(具有結構風險最小),具有很強的學習能力,因此很多人認為它是最好的監督學習算法。
SVM與Logistic回歸的聯系:
? ? ? ?logistic回歸的目的就是從特征值中學習出一個0/1分類模型。而這個模型的輸入是將特征的線性組合作為自變量,由于sigmod函數的自變量具有從負無窮到正無窮的輸入范圍,因此它可以把任何一個輸入映射到0/1
sigmod函數的形式化表示: Hθ(x) = g(θTx) = 1/(1 + e-θTx ?),x代表n為特征向量,函數g就是logistic函數
假設函數就是特征屬于y = 1 的概率
P(y=1|x;θ) =?Hθ(x) ;
p(y =0|x;θ) = 1 -??Hθ(x)
當需要判斷一個輸入特征向量輸入那個類時,只需要求θTx,如果θTx> 0,P(y=1|x;θ) ?> 0.5?,則表示屬于類1.否則就是類0,所以logistic也可以看做一個概率估計問題。
因此在logistic回歸求解過程中,關鍵是通過訓練樣本求解出θ,
假設?θ =?θ0 * x0+?θ1*x1 +?θ2 * x2.......+?θn * xn
對于θ的求解,可以使用梯度上升法,梯度上升法基于的思想就是要找到某函數的最大值,最好的方法就是沿著函數梯度方向探尋。(求解最大值使用梯度上升法,而梯度下降法用來求解函數的最小值)
梯度上升法的偽代碼如下:
每個回歸系數初始化為1
重復R次:
計算整個數據集的梯度
使用alpha * gradient更新回歸系數的向量
返回回歸系數。
使用logistic回歸判決時,決定權在意θTx,當θTx >>0使,則H(θTx) = 1,反正H(θTx) = 0,如果我們只是從θT出發
希望模型的達到的目的無非就是讓訓練樣本數據中y = 1 的特征θTx >> 0,而y = 0 的的特征
θTx <<0,logistic的目標就是學習θ,使得y = 1 的特征遠大于1, y = 0的特征遠小于0,
強調在全部的訓練實例上達到這個目標。
假設中間就是那條曲線θTx = 0,logistic回歸就是強調所有點盡可能的遠離中間那條線,學習出的結過也是θTx = 0 這條曲線
考慮上面3個點A,B,C,從圖中可以看到A是確定的X類,然而C是不大確定的,這樣就可以得到一個結論,我們應該找到那么一條直接,使得靠近曲線
的分割點,讓他們盡可能的遠離中間的那條線,而不是所有的點都必須遠離中間的曲線。因為那樣的話,就等于使得一部分的點靠近中間的曲線,
而另一部分的點,更加遠離分割線,這需要權衡兩部分的點。這也是logistic回歸和SVM的一個重要的區別,SVM考慮的是應該使得那些靠近分割線的點(支持向量)
遠離分割面,所以可以這么說,logistic是全局考慮所有的點距離最大化,而SVM則是局部考慮支持向量的距離最大化。
?SVM
SVM 的目的就是找出一個超平面盡可能的把兩類數據分開,希望找到離分割面的距離最近的點,確保它們離超平面盡可能的遠,這里把點到分割面的距離稱為間隔,所以把SVM稱為最大間隔法。支持向量就是指離超平面最近的那些點。所以,SVM的目標就是最大化支持向量到分割面的距離,
假設超平面的形式可以寫成 WTx + b ,要計算點A到分割面的距離,必須先找出點到分割面的法線或垂線的距離,根據點到直線的距離公式
有 |WTA + b/|W||。這里的b理解為截距。把向量W和常數b一起描述了所給數據的分割線。
?現在的目標就是要找到W和b,為此,我們必須找到具有最小間隔的數據點,而這些點就是支持向量。一旦找到這些支持向量,就需要對該間隔進行最大化,所以
方程可以寫成?
arg maxw,b?{minn(yi *(wTx + b)}/||w||} ?(1)
令r =?yi *(wTx + b),定義幾何距離,假設令所有支持向量的距離等于1.那么就可以求解||w||-1最大值得到最終的結果,但是,本非所以的點到超平面的距離都等于1,只要那些
距離最近的點才是1,那些遠離超平面的點的距離大于。公式中的最小值就是找出那些支持向量,最大值就是使得那些支持向量離超平面的距離最大化,所以求||w||-1最大值,是在約束條件?yi *(wTx + b) ?>= 1的條件,這是一個極值優化問題,可以利用拉格朗日乘子去求解
所以?minn(yi *(wTx + b)}/||w|| ? ?=> 等價于 ?{ ? min{1/2 *?||w||2?}, ? (?yi *(wTx + b) ?>= 1)?
令?(2)
轉為極值問題之后,對w求導 dL/dw = 0. 有 w = sumi?αi ?* yi * xi。 ? 且 sumi?αi ?* yi = 0;
?對公式1的最小問題可以 轉換為 ?(3)
公式3中的內
這里得到最大化相對于 求解 max{L(w,b,a)},所以求解w和b相對于求解alphas的值,求最大化L(w,b,a),這是一個二次規劃的問題,使用SMO(sequential Minimal Optimization)算法來快速的求解alpha的值。
SMO算法的目標就是求解出一系列的alpha值和b,一旦求解這些alpha,就很容易求解w,從而構造出超平面。SMO算法的原理:每次循環中選擇兩個alpha進行優化處理,一點找到一對合適的alpha,那么就會有其中一個增大,例外一個減少,這里所謂的合適,就是指兩個alpha必須符合條件,條件滿足KKT條件。就是這兩個alpha必須都在間隔邊界之外,而第二個條件就是這兩個alpha還咩有進行過區間化處理或者不在邊界上。
從公式3 可以到,有個兩個特征向量的內積形式,這里用到了核技巧。因為我們知道不是所有的數據都是線性可分的,當數據在低維不可分或者分割面不明顯時,可以把低維特征值映射到高維,核函數的作用就是把一個特征空間映射到另一個特征空間,通常情況下都是低維映射到高維空間。通常應用最廣泛的就是徑向基函數(radial basis function) ,核函數的選擇必須滿足核函數矩陣式半正定的。那么任意一個核函數就會對于一個特征映函數Φ(x)TΦ(y)相乘。
核函數的而一個優勢在于不需要知道具體的空間變化函數Φ(x),當計算兩個Φ(x)TΦ(y)相乘時,可以直接利用核函數求解,SVM 優化中一個特別好的地方就是可以把所以的運算都可以寫成內積形式,這樣我們就可以把內積運算轉換為核函數的方法,稱為核技巧(kernel trick)。這樣,一般在低維不可分的數據在映射到高維上,都具有較好的分割效果。
支持向量的數目存在一個最優值,SVM的優點就是它能對數據進行高效分類,如果支持向量太少,就可能得到一個很差的決策邊界,如果支持向量過多,也就相當于每次都利用整個數據集來進行分類,這種方法稱為K鄰近。
? ? 本質上來說,SVM是一個兩類分類器,其分類結果不是1就是-1,可以使用SVM兩類分類器擴展到多類分類器(參考:A Comparison of Methods for Muticlass Support Vector Machines)。
SVM 算法最初是為二值分類問題設計的,當處理多類問題時,就需要構造合適的多類分類器。目前,構造SVM多類分類器的方法主要有兩類:一類是直接法,直接在目標函數上進行修改,將多個分類面的參數求解合并到一個最優化問題中,通過求解該最優化問題“一次性”實現多類分類。這種方法看似簡單,但其計算復雜度比較高,實現起來比較困難,只適合用于小型問題中;另一類是間接法,主要是通過組合多個二分類器來實現多分類器的構造,常見的方法有one-against-one和one-against-all兩種。
a.一對多法(one-versus-rest,簡稱OVR SVMs)。訓練時依次把某個類別的樣本歸為一類,其他剩余的樣本歸為另一類,這樣k個類別的樣本就構造出了k個SVM。分類時將未知樣本分類為具有最大分類函數值的那類。
假如我有四類要劃分(也就是4個Label),他們是A、B、C、D。于是我在抽取訓練集的時候,分別抽取A所對應的向量作為正集,B,C,D所對應的向量作為負集;B所對應的向量作為正集,A,C,D所對應的向量作為負集;C所對應的向量作為正集, A,B,D所對應的向量作為負集;D所對應的向量作為正集,A,B,C所對應的向量作為負集,這四個訓練集分別進行訓練,然后的得到四個訓練結果文件,在測試的時候,把對應的測試向量分別利用這四個訓練結果文件進行測試,最后每個測試都有一個結果f1(x),f2(x),f3(x),f4(x).于是最終的結果便是這四個值中最大的一個。
note:這種方法有種缺陷,因為訓練集是1:M,這種情況下存在biased.因而不是很實用.
b.一對一法(one-versus-one,簡稱OVO SVMs或者pairwise)。其做法是在任意兩類樣本之間設計一個SVM,因此k個類別的樣本就需要設計k(k-1)/2個SVM。當對一個未知樣本進行分類時,最后得票最多的類別即為該未知樣本的類別。Libsvm中的多類分類就是根據這個方法實現的。
還是假設有四類A,B,C,D四類。在訓練的時候我選擇A,B; A,C; A,D; B,C; B,D;C,D所對應的向量作為訓練集,然后得到六個訓練結果,在測試的時候,把對應的向量分別對六個結果進行測試,然后采取投票形式,最后得到一組結果。
投票是這樣的.
A=B=C=D=0;
(A, B)-classifier 如果是A win,則A=A+1;otherwise,B=B+1;
(A,C)-classifer 如果是A win,則A=A+1;otherwise, C=C+1;
...
(C,D)-classifer 如果是A win,則C=C+1;otherwise,D=D+1;
The decision is the Max(A,B,C,D)
notw:這種方法雖然好,但是當類別很多的時候,model的個數是n*(n-1)/2,代價還是相當大的.
c.層次支持向量機(H-SVMs)。層次分類法首先將所有類別分成兩個子類,再將子類進一步劃分成兩個次級子類,如此循環,直到得到一個單獨的類別為止。
?
?
轉載于:https://www.cnblogs.com/fartherfuture/p/3734631.html
總結
以上是生活随笔為你收集整理的从Loagistic 到 SVM算法的全部內容,希望文章能夠幫你解決所遇到的問題。