我們將從簡(jiǎn)單的理解 SVM 開(kāi)始。
【視頻】支持向量機SVM、支持向量回歸SVR和R語(yǔ)言網(wǎng)格搜索超參數優(yōu)化實(shí)例
假設我們有兩個(gè)標簽類(lèi)的圖,如下圖所示:
你能決定分隔線(xiàn)是什么嗎?你可能想出了這個(gè):
這條線(xiàn)將類(lèi)完全分開(kāi)。這就是 SVM 本質(zhì)上所做的——簡(jiǎn)單的類(lèi)分離。

現在,數據是這樣的:

在這里,我們沒(méi)有一條簡(jiǎn)單的線(xiàn)來(lái)分隔這兩個(gè)類(lèi)。所以我們將擴展我們的維度并沿 z 軸引入一個(gè)新維度。

我們現在可以將這兩個(gè)類(lèi)分開(kāi):

這正是 SVM 所做的!它試圖找到分隔這兩個(gè)類(lèi)的線(xiàn)/超平面(在多維空間中)。然后根據要預測的類(lèi)別,根據它是位于超平面的正面還是負面,對新點(diǎn)進(jìn)行分類(lèi)。
在繼續之前,您應該了解 SVM 的一些重要參數:
核:核幫助我們在更高維空間中找到超平面,而不會(huì )增加計算成本。通常,如果數據的維度增加,計算成本會(huì )增加。當我們無(wú)法在給定維度中找到分離超平面并且需要在更高維度中移動(dòng)時(shí),需要增加維度:
超平面:這基本上是 SVM 中兩個(gè)數據類(lèi)之間的分隔線(xiàn)。但在支持向量回歸中,這條線(xiàn)將用于預測連續輸出
決策邊界:決策邊界可以被認為是一條分界線(xiàn)(為簡(jiǎn)化起見(jiàn)),其一側是正例,另一側是負例。在這條線(xiàn)上,這些例子可以分為正面或負面。SVM 的相同概念也將應用于支持向量回歸

支持向量回歸 (SVR) 使用與 SVM 相同的原理,但用于回歸問(wèn)題。讓我們花幾分鐘時(shí)間了解 SVR 背后的想法。
回歸的問(wèn)題是在訓練樣本的基礎上找到一個(gè)近似映射從輸入域到實(shí)數的函數。因此,現在讓我們深入了解 SVR 的實(shí)際工作原理。
將這兩條綠線(xiàn)視為決策邊界,將藍線(xiàn)視為超平面。當我們繼續使用 SVR 時(shí),我們的目標是基本上考慮決策邊界線(xiàn)內的點(diǎn)。我們的最佳擬合線(xiàn)是具有最大點(diǎn)數的超平面。

我們首先要了解的是什么是決策邊界。將這些線(xiàn)視為距超平面的任何距離,例如“a”。因此,這些是我們在距超平面“+a”和“-a”距離處繪制的線(xiàn)。文中的這個(gè)'a'基本上被稱(chēng)為epsilon。
假設超平面的方程如下:
Y = wx+b(超平面方程)
則決策邊界方程變?yōu)椋?/p>
wx+b=+a
wx+b= -a
因此,任何滿(mǎn)足我們的 SVR 的超平面都應該滿(mǎn)足:
-a < Y- wx+b < +a
我們的主要目標是在距原始超平面“a”距離處確定決策邊界,以便最接近超平面的數據點(diǎn)或支持向量位于該邊界線(xiàn)內。
因此,我們將只選取那些在決策邊界內且錯誤率最低的點(diǎn),或者在公差范圍內的點(diǎn)。這給了我們一個(gè)更好的擬合模型。
接下來(lái),我們將展示如何使用R語(yǔ)言來(lái)進(jìn)行支持向量回歸SVR。
我們將首先做一個(gè)簡(jiǎn)單的線(xiàn)性回歸,然后轉向支持向量回歸,這樣你就可以看到兩者在相同數據下的表現。
首先,我們將使用這個(gè)簡(jiǎn)單的數據集。

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


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

下面是CSV格式的相同數據,我把它保存在regression.csv文件中。

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

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

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

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

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

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

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

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

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

# 這個(gè)值在你的電腦上可能是不同的
# 因為調參方法會(huì )隨機調整數據
tunedModelRMSE <- rmse(error)

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

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

聯(lián)系客服