原文鏈接:http:///?p=23305在這篇文章中,,我將展示如何使用R語言來進行支持向量回歸SVR。 我們將首先做一個簡單的線性回歸,,然后轉(zhuǎn)向支持向量回歸,,這樣你就可以看到兩者在相同數(shù)據(jù)下的表現(xiàn)。 一個簡單的數(shù)據(jù)集首先,,我們將使用這個簡單的數(shù)據(jù)集,。 正如你所看到的,在我們的兩個變量X和Y之間似乎存在某種關(guān)系,,看起來我們可以擬合出一條在每個點附近通過的直線,。 我們用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步:我們的回歸效果怎么樣,?為了能夠比較線性回歸和支持向量回歸,我們首先需要一種方法來衡量它的效果,。 為了做到這一點,,我們改變一下代碼,使模型做出每一個預(yù)測可視化 # 對每個X做一個預(yù)測pred <- predict(model, data) # 顯示預(yù)測結(jié)果 points(X, pred) 產(chǎn)生了以下圖表,。 對于每個數(shù)據(jù)點Xi,,模型都會做出預(yù)測Y^i,在圖上顯示為一個紅色的十字,。與之前的圖表唯一不同的是,,這些點沒有相互連接。 為了衡量我們的模型效果,,我們計算它的誤差有多大,。 我們可以將每個Yi值與相關(guān)的預(yù)測值Y^i進行比較,看看它們之間有多大的差異,。 請注意,,表達式Y(jié)^i-Yi是誤差,如果我們做出一個完美的預(yù)測,,Y^i將等于Yi,,誤差為零。 如果我們對每個數(shù)據(jù)點都這樣做,,并將誤差相加,,我們將得到誤差之和,如果我們?nèi)∑骄?,我們將得到平均平方誤差(MSE),。 在機器學(xué)習(xí)中,衡量誤差的一個常見方法是使用均方根誤差(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模型。 下面是用支持向量回歸進行預(yù)測的代碼。 model <- svm(Y ~ X , data)如你所見,,它看起來很像線性回歸的代碼,。請注意,我們調(diào)用了svm函數(shù)(而不是svr?。?,這是因為這個函數(shù)也可以用來用支持向量機進行分類。如果該函數(shù)檢測到數(shù)據(jù)是分類的(如果變量是R中的一個因子),,它將自動選擇SVM,。 代碼畫出了下面的圖。 這一次的預(yù)測結(jié)果更接近于真實的數(shù)值 ! 讓我們計算一下支持向量回歸模型的RMSE,。 # 這次svrModel$residuals與data$Y - predictedY不一樣,。#所以我們這樣計算誤差 svrPredictionRMSE 正如預(yù)期的那樣,RMSE更好了,,現(xiàn)在是3.15,,而之前是5.70。 但我們能做得更好嗎,? 第四步:調(diào)整你的支持向量回歸模型為了提高支持向量回歸的性能,,我們將需要為模型選擇最佳參數(shù)。 在我們之前的例子中,,我們進行了ε-回歸,,我們沒有為ε(?)設(shè)置任何值,但它的默認(rèn)值是0.1,。 還有一個成本參數(shù),,我們可以改變它以避免過度擬合。 選擇這些參數(shù)的過程被稱為超參數(shù)優(yōu)化,,或模型選擇,。 標(biāo)準(zhǔn)的方法是進行網(wǎng)格搜索。這意味著我們將為?和成本的不同組合訓(xùn)練大量的模型,,并選擇最好的一個,。 # 進行網(wǎng)格搜索tuneResultranges = list(epsilon = seq(0,1,0.1), cost = 2^(2:9)) # 繪制調(diào)參圖 plot(Result) 在上面的代碼中有兩個重要的點。
最后一行繪制了網(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))我們用這一小段代碼訓(xùn)練了不同的168模型。 當(dāng)我們放大暗區(qū)域時,,我們可以看到有幾個較暗的斑塊,。 從圖中可以看出,C在200到300之間,,?在0.08到0.09之間的模型誤差較小,。 希望對我們來說,我們不必用眼睛去選擇最好的模型,,R讓我們非常容易地得到它,,并用來進行預(yù)測。 # 這個值在你的電腦上可能是不同的# 因為調(diào)參方法會隨機調(diào)整數(shù)據(jù) tunedModelRMSE <- rmse(error) 我們再次提高了支持向量回歸模型的RMSE ! 我們可以把我們的兩個模型都可視化,。在下圖中,,第一個SVR模型是紅色的,而調(diào)整后的SVR模型是藍色的,。 我希望你喜歡這個關(guān)于用R支持向量回歸的介紹,。你可以查看原文得到本教程的源代碼。 |
|