拓端tecdat|R語言進行支持向量機回歸SVR和網(wǎng)格搜索超參數(shù)優(yōu)化
原文鏈接:http://tecdat.cn/?p=23305?
原文出處:拓端數(shù)據(jù)部落公眾號
在這篇文章中,我將展示如何使用R語言來進行支持向量回歸SVR。
我們將首先做一個簡單的線性回歸,然后轉(zhuǎn)向支持向量回歸,這樣你就可以看到兩者在相同數(shù)據(jù)下的表現(xiàn)。
?
一個簡單的數(shù)據(jù)集
首先,我們將使用這個簡單的數(shù)據(jù)集。

正如你所看到的,在我們的兩個變量X和Y之間似乎存在某種關系,看起來我們可以擬合出一條在每個點附近通過的直線。
我們用R語言來做吧!
第1步:在R中進行簡單的線性回歸
下面是CSV格式的相同數(shù)據(jù),我把它保存在regression.csv文件中。

我們現(xiàn)在可以用R來顯示數(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)建一個線性回歸模型
model <- lm(Y ~ X, data)
# 添加擬合線
abline(model)
上面的代碼顯示以下圖表:

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

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

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

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

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

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

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

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

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

我們再次提高了支持向量回歸模型的RMSE !
我們可以把我們的兩個模型都可視化。在下圖中,第一個SVR模型是紅色的,而調(diào)整后的SVR模型是藍色的。

我希望你喜歡這個關于用R支持向量回歸的介紹。你可以查看原文得到本教程的源代碼。

最受歡迎的見解
1.R語言多元Logistic邏輯回歸 應用案例
2.面板平滑轉(zhuǎn)移回歸(PSTR)分析案例實現(xiàn)
3.matlab中的偏最小二乘回歸(PLSR)和主成分回歸(PCR)
4.R語言泊松Poisson回歸模型分析案例
5.R語言混合效應邏輯回歸Logistic模型分析肺癌
6.r語言中對LASSO回歸,Ridge嶺回歸和Elastic Net模型實現(xiàn)
7.R語言邏輯回歸、Naive Bayes貝葉斯、決策樹、隨機森林算法預測心臟病
8.python用線性回歸預測股票價格
9.R語言用邏輯回歸、決策樹和隨機森林對信貸數(shù)據(jù)集進行分類預測