2017-06-18 457 views
4

我想用支持向量機(SVM)進行預測。並與我使用如下功能的MATLAB和fitrsvmpredict使用SVM迴歸進行預測?

tb = table(x,y)             
Mdl = fitrsvm(tb,'y','KernelFunction','gaussian')                   
YFit = predict(Mdl,tb);         
scatter(x,y);             
hold on             
plot(x,YFit,'r.') 

輸出我得到here已經寫代碼。
這裏blude是測試值(tb),紅色是使用SVM進行預測。正如你可以清楚地看到這種預測是錯誤的。任何人都可以告訴我有什麼方法來改進接近測量值的預測嗎?

+1

默認情況下,'fitrsvm'使用線性核函數,產生線性迴歸模型。您應該[指定您的內核函數](https://mathworks.com/help/stats/fitrsvm.html#input_argument_d0e362069)執行非線性擬合。請注意,迴歸擬合可能更適合您的情況。 – m7913d

+0

如何以這種給定的格式添加內核函數。我試圖給我錯誤。任何想法 ? –

+0

其高斯核我想補充 –

回答

3

你應該使用像RBF或高斯等核函數。 enter image description here

默認支持向量機的內核是K(XI,XJ)= xi*xj,它是一個線性的過程kernel.Of你只能得到一個線性迴歸結果。

類似的代碼

x = 0:0.01:5 ; 
y = sin(x)+rand(1, length(x)) ; 
x = x' ; 
y = y' ; 
tb = table(x,y) ; 
Mdl = fitrsvm(tb,'y','KernelFunction','gaussian'); 
YFit = predict(Mdl,tb);         
scatter(x,y);             
hold on             
plot(x,YFit,'r.') 

===================================== ==================================
至於結果的準確性,它取決於許多因素內核類型,懲罰係數調整或其他內容,它通常需要時間來調整參數。交叉驗證可以幫助您找到一組好的參數

+0

謝謝你。我做了同樣的事情,並得到了問題所示的輸出。但我仍然覺得沒有太多接近測試的價值。你能否告訴我我能做些什麼來改善我的預測?我聽說BoxConstraint KernelScale,ε可以幫助改善我的預測,但不知道如何使用這個到這個問題 –

+0

我認爲提高精度的最簡單的方法是進行交叉驗證,以找到最好的動車組具有最佳測試的準確性。至於規模或懲罰係數等等,它也有效但需要調整,這是一項骯髒的工作。 – FesianXu

+0

謝謝你。你能告訴我一些關於如何使用交叉驗證爲此尋找最佳列車組的例子嗎? –