svm是乙個分類方法,用w^x+b定義分類函式, 於是求w、b,為尋最大間隔,引出1/2||w||^2,繼而引入拉格朗日因子,化為對單一因數對偶變數a的求解(求解過程中會涉及到一系列最優化或凸二 次規劃等問題),如此,求w.b與求a等價,而求a的解法即為smo,至於核函式,是為處理非線性情況,若直接對映到高維計算恐維度**,故在低維計算, 等效高維表現。
優化目標:
到這個形式以後,就可以很明顯地看出來,它是乙個凸優化問題,或者更具體地說,它是乙個二次優化問題——目標函式是二次的,約束條件是線性的。這個問題可以用任何現成的 qp (quadratic programming) 的優化包進行求解。
雖然這個問題確實是乙個標準的 qp 問題,但是它也有它的特殊結構,通過 lagrange duality 變換到對偶變數 (dual variable) 的優化問題之後,可以找到一種更加有效的方法來進行求解——這也是 svm 盛行的一大原因,通常情況下這種方法比直接使用通用的 qp 優化包進行優化要高效得多。此外,在推導過程中,許多有趣的特徵也會被揭露出來,包括剛才提到的 supporting vector 的問題。
通過給每乙個約束條件加上乙個 lagrange multiplier,我們可以將它們融和到目標函式裡去:
然後我們令:
現在的目標函式變成了:
然後,代回:
此時我們得到關於 dual variable a的優化問題:
這裡的形式的有趣之處在於,對於新點x的**,只需要計算它與訓練資料點的內積即可(這裡表示向量內積),這一點至關重要,是之後使用 kernel 進行非線性推廣的基本前提。此外,所謂 supporting vector 也在這裡顯示出來——事實上,所有非 supporting vector 所對應的係數a都是等於零的,因此對於新點的內積計算實際上只要針對少量的「支援向量」而不是所有的訓練資料即可。
在得到了 dual 對偶形式之後,通過 kernel 推廣到非線性的情況就變成了一件非常容易的事情了。
對於非線性的情況,svm 的處理方法是選擇乙個核函式k(x,z),通過將資料對映到高維空間,來解決在原始空間中線性不可分的問題。由於核函式的優良品質,這樣的非線性擴充套件在計算量上並沒有比原來複雜多少,這一點是非常難得的。當然,這要歸功於核方法——除了 svm 之外,任何將計算表示為資料點的內積的方法,都可以使用核方法進行非線性擴充套件。
高斯核:會將原始空間對映為無窮維空間的那個傢伙。不過,如果σ選擇很大的話,高次特徵上的權重實際上衰減得非常快,所以實際上(數值上近似一下)相當於乙個低維的子空間;反過來,如果σ選得很小,則可以將任意的資料對映為線性可分——當然,這並不一定是好事,因為隨之而來的可能是非常嚴重的過擬合問題。不過,總的來說,通過調控引數 σ,高斯核實際上具有相當高的靈活性,也是使用最廣泛的核函式之一。
遞迴計算過程和迭代計算過程
這次主要想通過幾個sicp的題目來說明遞迴計算過程和迭代計算過程。1 階乘 遞迴計算過程 define factorial n if n 1 1 factorial n 1 n 迭代計算過程 define fact iter counter result if counter 1 result fa...
PinBlock計算過程
引數 密碼,賬號,leftpinkey,rightpinkey out data 該引數為了帶出計算出來的pinblock 1先將密碼轉換為bcd碼 注意,轉碼後長度會變化,eg ascii碼的6位密碼轉成bcd碼後會縮短 放入pinblock定義好的16個長度的空字元陣列中 2再將賬號轉換為bcd...
詳解ROC AUC計算過程
roc全稱是 受試者工作特徵 receiver operating characteristic roc曲線的面積就是auc area under the curve auc用於衡量 二分類問題 機器學習演算法效能 泛化能力 python中sklearn直接提供了用於計算roc的函式 1 下面就把函...