R語(yǔ)言進(jìn)行支持向量機(jī)回歸SVR和網(wǎng)格搜索超參數(shù)優(yōu)化|附代碼數(shù)據(jù)
全文鏈接:http://tecdat.cn/?p=23305
最近我們被客戶(hù)要求撰寫(xiě)關(guān)于支持向量機(jī)回歸的研究報(bào)告,包括一些圖形和統(tǒng)計(jì)輸出。
在這篇文章中,我將展示如何使用R語(yǔ)言來(lái)進(jìn)行支持向量回歸SVR
我們將首先做一個(gè)簡(jiǎn)單的線性回歸,然后轉(zhuǎn)向支持向量回歸,這樣你就可以看到兩者在相同數(shù)據(jù)下的表現(xiàn)。
一個(gè)簡(jiǎn)單的數(shù)據(jù)集
首先,我們將使用這個(gè)簡(jiǎn)單的數(shù)據(jù)集。

正如你所看到的,在我們的兩個(gè)變量X和Y之間似乎存在某種關(guān)系,看起來(lái)我們可以擬合出一條在每個(gè)點(diǎn)附近通過(guò)的直線。
我們用R語(yǔ)言來(lái)做吧!
點(diǎn)擊標(biāo)題查閱往期內(nèi)容

Matlab建立SVM,KNN和樸素貝葉斯模型分類(lèi)繪制ROC曲線

左右滑動(dòng)查看更多

01

02

03

04

第1步:在R中進(jìn)行簡(jiǎn)單的線性回歸
下面是CSV格式的相同數(shù)據(jù),我把它保存在regression.csv文件中。

我們現(xiàn)在可以用R來(lái)顯示數(shù)據(jù)并擬合直線。
#?從csv文件中加載數(shù)據(jù)dataDirectory?<-?"D:/"?#把你自己的文件夾放在這里data?<-?read.csv(paste(dataDirectory,?'data.csv',?sep=""),?header?=?TRUE)#?繪制數(shù)據(jù)plot(data,?pch=16)#?創(chuàng)建一個(gè)線性回歸模型model?<-?lm(Y?~?X,?data)#?添加擬合線abline(model)
上面的代碼顯示以下圖表:

第2步:我們的回歸效果怎么樣?
為了能夠比較線性回歸和支持向量回歸,我們首先需要一種方法來(lái)衡量它的效果。
為了做到這一點(diǎn),我們改變一下代碼,使模型做出每一個(gè)預(yù)測(cè)可視化
#?對(duì)每個(gè)X做一個(gè)預(yù)測(cè)pred?<-?predict(model,?data)#?顯示預(yù)測(cè)結(jié)果points(X,?pred)
產(chǎn)生了以下圖表。

對(duì)于每個(gè)數(shù)據(jù)點(diǎn)Xi,模型都會(huì)做出預(yù)測(cè)Y^i,在圖上顯示為一個(gè)紅色的十字。與之前的圖表唯一不同的是,這些點(diǎn)沒(méi)有相互連接。
為了衡量我們的模型效果,我們計(jì)算它的誤差有多大。
我們可以將每個(gè)Yi值與相關(guān)的預(yù)測(cè)值Y^i進(jìn)行比較,看看它們之間有多大的差異。
請(qǐng)注意,表達(dá)式Y(jié)^i-Yi是誤差,如果我們做出一個(gè)完美的預(yù)測(cè),Y^i將等于Yi,誤差為零。
如果我們對(duì)每個(gè)數(shù)據(jù)點(diǎn)都這樣做,并將誤差相加,我們將得到誤差之和,如果我們?nèi)∑骄?,我們將得到平均平方誤差(MSE)。

在機(jī)器學(xué)習(xí)中,衡量誤差的一個(gè)常見(jiàn)方法是使用均方根誤差(RMSE),所以我們將使用它來(lái)代替。
為了計(jì)算RMSE,我們?nèi)∑淦椒礁?,我們得到RMSE

使用R,我們可以得到以下代碼來(lái)計(jì)算RMSE
rmse?<-?function(error){??sqrt(mean(error^2))}

我們現(xiàn)在知道,我們的線性回歸模型的RMSE是5.70。讓我們嘗試用SVR來(lái)改善它吧!
第3步:支持向量回歸
用R創(chuàng)建一個(gè)SVR模型。
下面是用支持向量回歸進(jìn)行預(yù)測(cè)的代碼。
model?<-?svm(Y?~?X?,?data)
如你所見(jiàn),它看起來(lái)很像線性回歸的代碼。請(qǐng)注意,我們調(diào)用了svm函數(shù)(而不是svr?。?,這是因?yàn)檫@個(gè)函數(shù)也可以用來(lái)用支持向量機(jī)進(jìn)行分類(lèi)。如果該函數(shù)檢測(cè)到數(shù)據(jù)是分類(lèi)的(如果變量是R中的一個(gè)因子),它將自動(dòng)選擇SVM。
代碼畫(huà)出了下面的圖。

這一次的預(yù)測(cè)結(jié)果更接近于真實(shí)的數(shù)值 ! 讓我們計(jì)算一下支持向量回歸模型的RMSE。
#?這次svrModel$residuals與data$Y?- predictedY不一樣。#所以我們這樣計(jì)算誤差svrPredictionRMSE

正如預(yù)期的那樣,RMSE更好了,現(xiàn)在是3.15,而之前是5.70。
但我們能做得更好嗎?
第四步:調(diào)整你的支持向量回歸模型
為了提高支持向量回歸的性能,我們將需要為模型選擇最佳參數(shù)。
在我們之前的例子中,我們進(jìn)行了ε-回歸,我們沒(méi)有為ε(?)設(shè)置任何值,但它的默認(rèn)值是0.1。?還有一個(gè)成本參數(shù),我們可以改變它以避免過(guò)度擬合。
選擇這些參數(shù)的過(guò)程被稱(chēng)為超參數(shù)優(yōu)化,或模型選擇。
標(biāo)準(zhǔn)的方法是進(jìn)行網(wǎng)格搜索。這意味著我們將為?和成本的不同組合訓(xùn)練大量的模型,并選擇最好的一個(gè)。
#?進(jìn)行網(wǎng)格搜索tuneResultranges?=?list(epsilon?=?seq(0,1,0.1),?cost?=?2^(2:9))#?繪制調(diào)參圖plot(Result)
在上面的代碼中有兩個(gè)重要的點(diǎn)。
我們使用tune方法訓(xùn)練模型,?=0,0.1,0.2,...,1和cost=22,23,24,...,29這意味著它將訓(xùn)練88個(gè)模型(這可能需要很長(zhǎng)一段時(shí)間
tuneResult返回MSE,別忘了在與我們之前的模型進(jìn)行比較之前將其轉(zhuǎn)換為RMSE。
最后一行繪制了網(wǎng)格搜索的結(jié)果。

在這張圖上,我們可以看到,區(qū)域顏色越深,我們的模型就越好(因?yàn)镽MSE在深色區(qū)域更接近于零)。
這意味著我們可以在更窄的范圍內(nèi)嘗試另一個(gè)網(wǎng)格搜索,我們將嘗試在0和0.2之間的?值。目前看來(lái),成本值并沒(méi)有產(chǎn)生影響,所以我們將保持原樣,看看是否有變化。
rangelist(epsilo?=?seq(0,0.2,0.01),?cost?=?2^(2:9))
我們用這一小段代碼訓(xùn)練了不同的168模型。
當(dāng)我們放大暗區(qū)域時(shí),我們可以看到有幾個(gè)較暗的斑塊。
從圖中可以看出,C在200到300之間,?在0.08到0.09之間的模型誤差較小。

希望對(duì)我們來(lái)說(shuō),我們不必用眼睛去選擇最好的模型,R讓我們非常容易地得到它,并用來(lái)進(jìn)行預(yù)測(cè)。
#?這個(gè)值在你的電腦上可能是不同的#?因?yàn)檎{(diào)參方法會(huì)隨機(jī)調(diào)整數(shù)據(jù)tunedModelRMSE?<-?rmse(error)

我們?cè)俅翁岣吡酥С窒蛄炕貧w模型的RMSE !
我們可以把我們的兩個(gè)模型都可視化。在下圖中,第一個(gè)SVR模型是紅色的,而調(diào)整后的SVR模型是藍(lán)色的。

我希望你喜歡這個(gè)關(guān)于用R支持向量回歸的介紹。你可以查看原文得到本教程的源代碼。
本文摘選?《?R語(yǔ)言進(jìn)行支持向量機(jī)回歸SVR和網(wǎng)格搜索超參數(shù)優(yōu)化?》?,點(diǎn)擊“閱讀原文”獲取全文完整資料。
點(diǎn)擊標(biāo)題查閱往期內(nèi)容
邏輯回歸、隨機(jī)森林、SVM支持向量機(jī)預(yù)測(cè)心臟病風(fēng)險(xiǎn)數(shù)據(jù)和模型診斷可視化
R語(yǔ)言梯度提升機(jī) GBM、支持向量機(jī)SVM、正則判別分析RDA模型訓(xùn)練、參數(shù)調(diào)優(yōu)化和性能比較可視化分析聲納數(shù)據(jù)
R語(yǔ)言量化交易R(shí)SI策略:使用支持向量機(jī)SVM
基于隨機(jī)森林、svm、CNN機(jī)器學(xué)習(xí)的風(fēng)控欺詐識(shí)別模型
Matlab建立SVM,KNN和樸素貝葉斯模型分類(lèi)繪制ROC曲線
基于ARIMA、SVM、隨機(jī)森林銷(xiāo)售的時(shí)間序列預(yù)測(cè)
基于數(shù)據(jù)挖掘SVM模型的pre-incident事故預(yù)防預(yù)測(cè)
R語(yǔ)言用rle,svm和rpart決策樹(shù)進(jìn)行時(shí)間序列預(yù)測(cè)Python中基于網(wǎng)格搜索算法優(yōu)化的深度學(xué)習(xí)模型分析糖尿病數(shù)據(jù)
隨機(jī)森林優(yōu)化貝葉斯預(yù)測(cè)分析汽車(chē)燃油經(jīng)濟(jì)性
Python基于粒子群優(yōu)化的投資組合優(yōu)化研究
matlab使用貝葉斯優(yōu)化的深度學(xué)習(xí):卷積神經(jīng)網(wǎng)絡(luò)CNN
R語(yǔ)言深度學(xué)習(xí):用keras神經(jīng)網(wǎng)絡(luò)回歸模型預(yù)測(cè)時(shí)間序列數(shù)據(jù)
Matlab用深度學(xué)習(xí)長(zhǎng)短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對(duì)文本數(shù)據(jù)進(jìn)行分類(lèi)
R語(yǔ)言KERAS深度學(xué)習(xí)CNN卷積神經(jīng)網(wǎng)絡(luò)分類(lèi)識(shí)別手寫(xiě)數(shù)字圖像數(shù)據(jù)(MNIST)
MATLAB中用BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)人體脂肪百分比數(shù)據(jù)
Python中用PyTorch機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)分類(lèi)預(yù)測(cè)銀行客戶(hù)流失模型
R語(yǔ)言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析
SAS使用鳶尾花(iris)數(shù)據(jù)集訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)(ANN)模型
【視頻】R語(yǔ)言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析
Python使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡(jiǎn)單文本分類(lèi)
R語(yǔ)言用神經(jīng)網(wǎng)絡(luò)改進(jìn)Nelson-Siegel模型擬合收益率曲線分析
R語(yǔ)言基于遞歸神經(jīng)網(wǎng)絡(luò)RNN的溫度時(shí)間序列預(yù)測(cè)
R語(yǔ)言神經(jīng)網(wǎng)絡(luò)模型預(yù)測(cè)車(chē)輛數(shù)量時(shí)間序列
R語(yǔ)言中的BP神經(jīng)網(wǎng)絡(luò)模型分析學(xué)生成績(jī)
matlab使用長(zhǎng)短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對(duì)序列數(shù)據(jù)進(jìn)行分類(lèi)
R語(yǔ)言實(shí)現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)和結(jié)果可視化
用R語(yǔ)言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)股票實(shí)例
使用PYTHON中KERAS的LSTM遞歸神經(jīng)網(wǎng)絡(luò)進(jìn)行時(shí)間序列預(yù)測(cè)
python用于NLP的seq2seq模型實(shí)例:用Keras實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯
用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類(lèi)