svm算法原理_机器学习——分类算法(1)
一、 K近鄰
KNN算法的基本思想就是在訓練集中數據和標簽已知的情況下,輸入測試數據,將測試數據的特征與訓練集中對應的特征進行相互比較,找到訓練集中與之最為相似的前K個數據,則該測試數據對應的類別就是K個數據中出現次數最多的那個分類,其算法的描述為:
1)計算測試數據與各個訓練數據之間的距離;
2)按照距離的遞增關系進行排序;
3)選取距離最小的K個點;
4)確定前K個點所在類別的出現頻率;
5)返回前K個點中出現頻率最高的類別作為測試數據的預測分類。
其中在計算距離時采用歐氏距離或曼哈頓距離:
k值的選擇:當k值較小時,預測結果對近鄰的實例點非常敏感,容易發生過擬合;如果k值過大模型會傾向大類,容易欠擬合;通常k是不大于20的整數
優點:精度高,對異常值不敏感
缺點:k值敏感,空間復雜度高(需要保存全部數據),時間復雜度高(平均O(logM),M是訓練集樣本數)
二、感知機
PLA全稱是Perceptron Linear Algorithm,即線性感知機算法,屬于一種最簡單的感知機(Perceptron)模型。它是支持向量機和神經網絡的基礎。感知機模型是機器學習二分類問題中的一個非常簡單的模型。它的基本結構如下圖所示:
假設訓練數據集是線性可分的,感知機學習的目標是求得一個能夠將訓練數據集正實例點和負實例點完全正確分開的分離超平面。如果是非線性可分的數據,則最后無法獲得超平面。所以感知機的目標函數為一條直線或者一個超平面,其輸出為:
其中wx+b表示空間中的一點的坐標,我們的目標取找到合適的w和b,使得f(x)和真實的y值相符合,當然不可能達到完全符合,所以應當是盡可能多的點被正確分類。換句話說就是讓那些分錯類的點越接近邊界線越好。這時我們就可以用距離來定義損失函數了:損失值=錯誤的點到邊界的距離的總和。優化的對象便是讓這個距離之和最小。
由點到平面的距離公式我們可以得到任意一點距離我們上面定義的模型的距離為:
有了計算距離的方式,我們來看看損失函數究竟怎么定義。這里需要注意的是我們的目標是那些分錯類的點,而不是所有點,因此不能直接將距離作為損失函數,所以我們需要找出那些分錯類的點,建立他們的損失函數。這里正好可以利用絕對值來進行區分正確點和錯誤點。對于模型來說,在分類錯誤的情況下,若w?xi+b>0,去掉絕對值不變,則實際的yi應該是等于-1,為了使原式保持正值,則添加一個負號。而當w?xi+b<0時,去掉絕對值加負號,此時yi等于1,上式為正值。因此由這個特性我們可以去掉上面的絕對值符號,將公式轉化為:
去掉||w||后得到最終的損失函數為:
這里求最小值采用的是隨機梯度下降算法,因為我們每次取一個點來判斷他是不是錯誤點,然后才能帶入優化。
三、支持向量機SVM
支持向量機與感知機相似。他的目的也是取尋找一條直線或一個超平面將數據進行二分類。只不過感知機的原理是到邊界的距離最小,而SVM的原理則是“間隔最大化”。
從上圖可以看出,如果數據集線性可分,那么這樣的直線又無數條,但是我們的目標是找到一條容忍度最好的直線,即黃色的那條。
一般來說,一個點距離分離超平面的遠近可以表示分類預測的確信度,如圖中的A B兩個樣本點,B點被預測為正類的確信度要大于A點,所以SVM的目標是尋找一個超平面,使得離超平面較近的異類點之間能有更大的間隔,即不必考慮所有樣本點,只需讓求得的超平面使得離它近的點間隔最大
2. 怎么計算間隔
f(x)=wTx+b 表示空間中一點的坐標。當f(x) 等于0的時候,x便是位于超平面上的點,而f(x) 大于0的點對應 y=1 的數據點,f(x)小于0的點對應y=-1的點。這里的y=1和-1都是可以隨意指定的,相當于兩種label,為了方便計算就取1和-1了。
根據上述原理我們可以總結為一個表達式:
實際上該公式等價于yi(WTxi+b)≥ +1。這就是最大間隔假設
3. 什么是支持向量
距離超平面最近的這幾個樣本點滿足yi(WTxi+b)=1,它們被稱為“支持向量”。虛線稱為邊界,兩條虛線間的距離稱為間隔(margin)。所謂的支持向量,就是使得上式等號成立,即最靠近兩條虛邊界線的向量。如果WTxi+b>1,那就說明更加支持了。
所以我們在計算最大間隔的時候,其實關注的是支持向量到超平面的距離。
由上述兩式聯立可得
對于支持向量,WTxi+b=1或-1,所以最大間隔變為:
這樣我們們便確定了目標函數
等價于:
SVM函數的求解屬于凸二次規劃問題,采用拉格朗日乘數法求解。添加拉格朗日乘子 αi≥0,則整個拉格朗日函數可寫成:
4. 非線性支持向量機與核函數技
對于非線性分類問題,顯然無法用一個線性分離超平面來把不同的類別的數據點分開,那么可以用以下思路解決這個問題:
- 首先使用一個變換 z=?(x)將非線性特征空間x映射到新的線性特征空間z
- 在新的z特征空間里使用線性SVM學習分類的方法從訓練數據中學習分類模型
但是,這里有一個問題: ?(xi)??(xj)計算起來要分兩步,先映射x到z空間,然后在z空間(一般是較高維度)作高維度的內積zi?zj。
為了簡化這個運算過程,如果我們找到一個核函數K(xi,xj), 即K是關于x的函數,其運算在低維空間上進行,然后使得K(xi,xj)=?(xi)??(xj),那么只需要計算一個比較好計算的核函數K(xi,xj),就可以避免先映射,再在高維空間內積的復雜運算。
常見的核函數有:二次多項式核、高斯核
5. 軟間隔
我們一直假設訓練樣本在樣本空間或特征空間食線性可分的,即存在一個超平面能將不同類的樣本完全劃分開。然而,在現實任務中往往很難確定合適的核函數使得訓練樣本在特征空間中線性可分;退一步說,即便恰好找到了某個核函數使訓練樣本在特征空間中線性可分,也很難斷定這個貌似線性可分的結果不是由于過擬合造成的。緩解該問題的一個方法是允許支持向量機在一些樣本上出錯,為此要引入“軟間隔”的概念。當然我們還要限制這些分錯的樣本個數應當越少越好
之前做了一個最大間隔的假設,即所有樣本都滿足:
也就是說所有的樣本都得被分對,這稱之為“硬間隔”,而軟間隔則允許某些樣本不滿足約束條件,于是,目標函數可寫為
其中C是常數,L0/1是0/1的損失函數:
當C越大,模型的容忍程度就越小,邊界越瘦,C越小,邊界越胖,越多的樣本被分錯,所以C為無窮大時迫使所有樣本都得滿足約束
直接使用0/1的損失函數求解不好求,一般都是將其變為hinge損失函數:
此時,我們的優化目標函數也就變成了:
引入一個變量ξn=1? yi(Wx+b),我們成為“松弛因子”,如果yi(Wx+b)<1,帶入hinge損失中,損失值大于0,說明樣本被分錯,因此ξn代表犯了多少錯。優化的目標函數最終變為:
5. LR和SVM不同點
- LR采用log損失,SVM采用合頁(hinge)損失
邏輯回歸方法基于概率理論,假設樣本為1的概率可以用sigmoid函數來表示,然后通過極大似然估計的方法估計出參數的值(基于統計的,其損失函數是人為設定的凸函數) 。支持向量機基于幾何間隔最大化原理,認為存在最大幾何間隔的分類面為最優分類面.(有嚴格的推導)
- LR對異常值敏感,SVM對異常值不敏感
支持向量機只考慮局部的邊界線附近的點,而邏輯回歸考慮全局(遠離的點對邊界線的確定也起作用,雖然作用會相對小一些)。LR模型找到的那個超平面,是盡量讓所有點都遠離他,而SVM尋找的那個超平面,是只讓最靠近中間分割線的那些點盡量遠離,即只用到那些支持向量的樣本。
- 對非線性問題的處理方式不同
LR主要靠特征構造,必須組合交叉特征,特征離散化。SVM也可以這樣,還可以通過kernel(因為只有支持向量參與核計算,計算復雜度不高)。(由于可以利用核函數,。SVM則可以通過對偶求解高效處理。LR則在特征空間維度很高時,表現較差。)
- 正則化不同
SVM的損失函數就自帶正則(損失函數中的1/2||w||^2項),這就是為什么SVM是結構風險最小化算法的原因,而LR必須另外在損失函數上添加正則項
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的svm算法原理_机器学习——分类算法(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java ee是什么_死磕 java集合
- 下一篇: 华为开发微信鸿蒙版,HUAWEI Dev