SVM 與SVR


支持向量機(SVM)本身是針對二分類問題提出的,而SVR(支持向量回歸)是SVM(支持向量機)中的一個重要的應用分支。SVR回歸與SVM分類的區別在於,SVR的樣本點最終只有一類,它所尋求的最優超平面不是SVM那樣使兩類或多類樣本點分的“最開”,而是使所有的樣本點離着超平面的總偏差最小。

​ SVM是要使到超平面最近的樣本點的“距離”最大;

​ SVR則是要使到超平面最遠的樣本點的“距離”最小。

img

SVM/SVR圖示

​ 回歸就像是尋找一堆數據的內在的關系。不論這堆數據有幾種類別組成,得到一個公式,擬合這些數據,當給個新的坐標值時,能夠求得一個新的值。所以對於SVR,就是求得一個面或者一個函數,可以把所有數據擬合了(就是指所有的數據點,不管屬於哪一類,數據點到這個面或者函數的距離最近)

​ 統計上的理解就是:使得所有的數據的類內方差最小,把所有的類的數據看作是一個類。

​ 傳統的回歸方法當且僅當回歸f(x)完全等於y時才認為是預測正確,需計算其損失;而支持向量回歸(SVR)則認為只要是f(x)與y偏離程度不要太大,既可認為預測正確,不用計算損失。具體的就是設置一個閾值α,只是計算 |f(x) - y| > α 的數據點的loss。如圖:支持向量回歸表示只要在虛線內部的值都可認為是預測正確,只要計算虛線外部的值的損失即可。

img

SVR超平面示意

​ 在實際的SVR應用時所用到的方法以sklearn中為例:

​ sklearn.svm.SVR(kernel='rbf', degree=3, gamma='auto_deprecated', coef0=0.0, tol=0.001, C=1.0, epsilon=0.1, shrinking=True, cache_size=200, verbose=False, max_iter=-1)

​ 根據不同訓練集、特征集,其中的參數的值的變化所得到的結果也會有不同,下面簡單了解一下SVR中的參數的意義及部分參數所參考的值:

​ kernel: type: string;optional(default=‘rbf’)

算法中所使用的核函數類型,其中有(‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’,‘precomputer’,默認使用‘rbf’)

​ degree:type:int, optional(default=3)

​ 多項式核函數的次數,默認為3,所以當核函數為‘poly’時用到,其它核函數忽略

​ gamma:type:float, optional(default=‘auto’)

​ 核函數的系數, 在核函數為‘rbf’, ‘poly’, ‘sigmoid’時使用,其他核函數忽略。gamma的值必須大於0, 隨着gamma的增大,對於測試集分類效果越差,對於訓練集分類效果好,並且使模型的復雜度提高,泛化能力(對未知數的預測能力)較差,從而出現過擬合的情況。

​ coef0:type:float, optional(default=0.0)

​ 核函數中的獨立項,只在核函數為‘poly’跟‘sigmoid’時使用。

​ tol:type:float, optional(default=1e-3)

​ 停止判斷的公差

​ C:type:float, optional(default=1.0)

​ 錯誤項的懲罰因子:表征有多重視離群點,C越大越重視,也就是越不想丟掉這些離群點。C值大時對誤差分類的懲罰增大,C值小時對誤差分類的懲罰減小。當C趨近於無窮大時,表示不允許分類誤差的存在;當C趨於0時,表示不再關注分類是否正確。

​ epsilon:type:float, optional(default=0.1)

​ pass

​ shrinking:type:boolean,optional(default=True)

​ 是否使用收縮啟發式

​ cache_size:type:float, optional

​ 內核緩存的大小

​ verbose:type:bool, default:False

​ 啟用詳細輸出。如果啟用,在多線程環境下可能無法正常工作

​ max_iter:type:int, optional(default=-1)

​ 解算器內迭代的硬性限制,默認為-1(無限制)

​ 在上面的參數中不難看出,其中一半的參數均與核函數有關,那么問題來了,什么是核函數?核函數在SVR中作為一個什么角色?起到了什么作用?

​ 在SVM/SVR中,如果沒有核映射思想的引入,那么SVM/SVR就是一種加了距離限制的PLA(感知機,有興趣的可自行百度)

​ 准確的來說,核函數在機器學習中更應該是一種技巧,這種技巧主要體現在不需要明確的指定核映射的具體形式。核映射一般有三總情況:1.在不增減維度的情況下做變換,2.涉及到維度的增減,3.兩種情況都包含。

​ 核函數一般有多項式核、高斯徑向基核、指數徑向基核、多隱層感知核、傅立葉級數核、樣條核等,在回歸模型中,不同的核函數對擬合的結果會有較大的影響。

​ 針對於非線性支持向量回歸機,通常做法就是將低維數據映射到高維的空間,在高維空間中找到線性可分的超平面,最后再把高維空間的超平面映射回低維空間,這樣就可以實現SVM的分類或者SVR的回歸。但是,將低維的數據映射到高維的空間,在高維空間做計算,計算量特別大,尤其是當維度很高的情況下,而且也會容易過擬合。

​ 核函數就是為了解決這個問題產生的,用核函數代替線性方程中的線性項可以使原來的線性算法非線性化,即能做非線性回歸,此時引進核函數達到了升維的目的,也可以有效的控制過擬合。通俗的講就是應用核函數就是在低維時就對數據做了計算,這個計算可以看做是將低維空間的數據映射到高維空間中做的計算(就是一個隱式變換)。

​ 除核函數外,還有一個比較重要的概念就是損失函數:

​ 損失函數是學習模型在學習過程中對誤差的一種度量,一般在模型學習前已經選定,不同的學習問題對應的損失函數也不同,同一學習問題選取的損失函數不同得到的模型也會不同。

​ 在SVR中對於損失函數構成的模型,有些權重很大,有些權重很小,這樣就會容易導致過擬合(就是過分擬合了訓練數據集),而過擬合則是因為樣本太多的特征被包含進來,很多與項目本身無關的特征也被包含進來。

​ 解決過擬合問題有很多方式,常見的有以下幾種:

​ 1).喂數據,也就是給足夠多的數據,只有數據多了,數據的很多特征才會更加明顯的體現出來,訓練的模型也會不斷的修正,特征的作用也會體現的越來越大。

​ 2).特征降維,越多的特征導致訓練集的維度越高,降維就是把高維空間的數據投影到低維空間中(保存下來的特征是數據量大的)。主要有:PCA降維(主成分分析,無監督)、反向特征消除、隨機森林/組合樹、LDA(線性判別分析,有監督)、LLE(局部線性嵌入)、Laplacian Eigenmaps(拉普拉斯特征映射)等

​ 3).針對具體的負荷預測,對電量值進行標准化或者歸一化。可以時特征訓練集能夠快速的收斂,可以使特征值域范圍變小,有利於提高精度。

作者:羅漢堂主
鏈接:https://www.jianshu.com/p/399ddcac2178
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM