支持向量機(SVM)本身是針對二分類問題提出的,而SVR(支持向量回歸)是SVM(支持向量機)中的一個重要的應用分支。SVR回歸與SVM分類的區別在於,SVR的樣本點最終只有一類,它所尋求的最優超平面不是SVM那樣使兩類或多類樣本點分的“最開”,而是使所有的樣本點離着超平面的總偏差最小。
SVM是要使到超平面最近的樣本點的“距離”最大;
SVR則是要使到超平面最遠的樣本點的“距離”最小。
SVM/SVR圖示
回歸就像是尋找一堆數據的內在的關系。不論這堆數據有幾種類別組成,得到一個公式,擬合這些數據,當給個新的坐標值時,能夠求得一個新的值。所以對於SVR,就是求得一個面或者一個函數,可以把所有數據擬合了(就是指所有的數據點,不管屬於哪一類,數據點到這個面或者函數的距離最近)
統計上的理解就是:使得所有的數據的類內方差最小,把所有的類的數據看作是一個類。
傳統的回歸方法當且僅當回歸f(x)完全等於y時才認為是預測正確,需計算其損失;而支持向量回歸(SVR)則認為只要是f(x)與y偏離程度不要太大,既可認為預測正確,不用計算損失。具體的就是設置一個閾值α,只是計算 |f(x) - y| > α 的數據點的loss。如圖:支持向量回歸表示只要在虛線內部的值都可認為是預測正確,只要計算虛線外部的值的損失即可。
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
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。