全文連結:http://tecdat.cn/?p=23305
最近我們被客戶要求撰寫關於支持向量機回歸的研究報告,包括一些圖形和統計輸出。
在這篇文章中,我將展示如何使用R語言來進行支持向量回歸SVR
我們將首先做一個簡單的線性回歸,然後轉向支持向量回歸,這樣你就可以看到兩者在相同數據下的表現。
一個簡單的數據集
首先,我們將使用這個簡單的數據集。
正如你所看到的,在我們的兩個變量X和Y之間似乎存在某種關係,看起來我們可以擬合出一條在每個點附近通過的直線。
我們用R語言來做吧!
點擊標題查閱往期內容
Matlab建立SVM,KNN和樸素貝葉斯模型分類繪製ROC曲線
左右滑動查看更多
01
02
03
04
第1步:在R中進行簡單的線性回歸
下面是CSV格式的相同數據,我把它保存在regression.csv文件中。
我們現在可以用R來顯示數據並擬合直線。
# 從csv文件中加載數據
dataDirectory <- "D:/" #把你自己的文件夾放在這裡
data <- read.csv(paste(dataDirectory, 'data.csv', sep=""), header = TRUE)
# 繪製數據
plot(data, pch=16)
# 創建一個線性回歸模型
model <- lm(Y ~ X, data)
# 添加擬合線
abline(model)
上面的代碼顯示以下圖表:
第2步:我們的回歸效果怎麼樣?
為了能夠比較線性回歸和支持向量回歸,我們首先需要一種方法來衡量它的效果。
為了做到這一點,我們改變一下代碼,使模型做出每一個預測可視化
# 對每個X做一個預測
pred <- predict(model, data)
# 顯示預測結果
points(X, pred)
產生了以下圖表。
對於每個數據點Xi,模型都會做出預測Y^i,在圖上顯示為一個紅色的十字。與之前的圖表唯一不同的是,這些點沒有相互連接。
為了衡量我們的模型效果,我們計算它的誤差有多大。
我們可以將每個Yi值與相關的預測值Y^i進行比較,看看它們之間有多大的差異。
請注意,表達式Y^i-Yi是誤差,如果我們做出一個完美的預測,Y^i將等於Yi,誤差為零。
如果我們對每個數據點都這樣做,並將誤差相加,我們將得到誤差之和,如果我們取平均值,我們將得到平均平方誤差(MSE)。
在機器學習中,衡量誤差的一個常見方法是使用均方根誤差(RMSE),所以我們將使用它來代替。
為了計算RMSE,我們取其平方根,我們得到RMSE
使用R,我們可以得到以下代碼來計算RMSE
rmse <- function(error)
{
sqrt(mean(error^2))
}
我們現在知道,我們的線性回歸模型的RMSE是5.70。讓我們嘗試用SVR來改善它吧!
第3步:支持向量回歸
用R創建一個SVR模型。
下面是用支持向量回歸進行預測的代碼。
model <- svm(Y ~ X , data)
如你所見,它看起來很像線性回歸的代碼。請注意,我們調用了svm函數(而不是svr!),這是因為這個函數也可以用來用支持向量機進行分類。如果該函數檢測到數據是分類的(如果變量是R中的一個因子),它將自動選擇SVM。
代碼畫出了下面的圖。
這一次的預測結果更接近於真實的數值 ! 讓我們計算一下支持向量回歸模型的RMSE。
# 這次svrModel$residuals與data$Y - predictedY不一樣。
#所以我們這樣計算誤差
svrPredictionRMSE
正如預期的那樣,RMSE更好了,現在是3.15,而之前是5.70。
但我們能做得更好嗎?
第四步:調整你的支持向量回歸模型
為了提高支持向量回歸的性能,我們將需要為模型選擇最佳參數。
在我們之前的例子中,我們進行了ε-回歸,我們沒有為ε(ϵ)設置任何值,但它的默認值是0.1。 還有一個成本參數,我們可以改變它以避免過度擬合。
選擇這些參數的過程被稱為超參數優化,或模型選擇。
標準的方法是進行網格搜索。這意味著我們將為ϵ和成本的不同組合訓練大量的模型,並選擇最好的一個。
# 進行網格搜索
tuneResultranges = list(epsilon = seq(0,1,0.1), cost = 2^(2:9))
# 繪製調參圖
plot(Result)
在上面的代碼中有兩個重要的點。
最後一行繪製了網格搜索的結果。
在這張圖上,我們可以看到,區域顏色越深,我們的模型就越好(因為RMSE在深色區域更接近於零)。
這意味著我們可以在更窄的範圍內嘗試另一個網格搜索,我們將嘗試在0和0.2之間的ϵ值。目前看來,成本值並沒有產生影響,所以我們將保持原樣,看看是否有變化。
rangelist(epsilo = seq(0,0.2,0.01), cost = 2^(2:9))
我們用這一小段代碼訓練了不同的168模型。
當我們放大暗區域時,我們可以看到有幾個較暗的斑塊。
從圖中可以看出,C在200到300之間,ϵ在0.08到0.09之間的模型誤差較小。
希望對我們來說,我們不必用眼睛去選擇最好的模型,R讓我們非常容易地得到它,並用來進行預測。
# 這個值在你的電腦上可能是不同的
# 因為調參方法會隨機調整數據
tunedModelRMSE <- rmse(error)
我們再次提高了支持向量回歸模型的RMSE !
我們可以把我們的兩個模型都可視化。在下圖中,第一個SVR模型是紅色的,而調整後的SVR模型是藍色的。
我希望你喜歡這個關於用R支持向量回歸的介紹。你可以查看原文得到本教程的原始碼。
本文摘選 《 R語言進行支持向量機回歸SVR和網格搜索超參數優化 》 ,點擊「閱讀原文」獲取全文完整資料。
點擊標題查閱往期內容
邏輯回歸、隨機森林、SVM支持向量機預測心臟病風險數據和模型診斷可視化
R語言梯度提升機 GBM、支持向量機SVM、正則判別分析RDA模型訓練、參數調優化和性能比較可視化分析聲納數據
R語言量化交易RSI策略:使用支持向量機SVM
基於隨機森林、svm、CNN機器學習的風控欺詐識別模型
Matlab建立SVM,KNN和樸素貝葉斯模型分類繪製ROC曲線
基於ARIMA、SVM、隨機森林銷售的時間序列預測
基於數據挖掘SVM模型的pre-incident事故預防預測
R語言用rle,svm和rpart決策樹進行時間序列預測Python中基於網格搜索算法優化的深度學習模型分析糖尿病數據
隨機森林優化貝葉斯預測分析汽車燃油經濟性
Python基於粒子群優化的投資組合優化研究
matlab使用貝葉斯優化的深度學習:卷積神經網絡CNN
R語言深度學習:用keras神經網絡回歸模型預測時間序列數據
Matlab用深度學習長短期記憶(LSTM)神經網絡對文本數據進行分類
R語言KERAS深度學習CNN卷積神經網絡分類識別手寫數字圖像數據(MNIST)
MATLAB中用BP神經網絡預測人體脂肪百分比數據
Python中用PyTorch機器學習神經網絡分類預測銀行客戶流失模型
R語言實現CNN(卷積神經網絡)模型進行回歸數據分析
SAS使用鳶尾花(iris)數據集訓練人工神經網絡(ANN)模型
【視頻】R語言實現CNN(卷積神經網絡)模型進行回歸數據分析
Python使用神經網絡進行簡單文本分類
R語言用神經網絡改進Nelson-Siegel模型擬合收益率曲線分析
R語言基於遞歸神經網絡RNN的溫度時間序列預測
R語言神經網絡模型預測車輛數量時間序列
R語言中的BP神經網絡模型分析學生成績
matlab使用長短期記憶(LSTM)神經網絡對序列數據進行分類
R語言實現擬合神經網絡預測和結果可視化
用R語言實現神經網絡預測股票實例
使用PYTHON中KERAS的LSTM遞歸神經網絡進行時間序列預測
python用於NLP的seq2seq模型實例:用Keras實現神經網絡機器翻譯
用於NLP的Python:使用Keras的多標籤文本LSTM神經網絡分類