R語言進行支持向量機回歸SVR和網格搜索超參數優化|附代碼數據

2023-08-15     tecdat拓端

原標題:R語言進行支持向量機回歸SVR和網格搜索超參數優化|附代碼數據

全文連結: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)

在上面的代碼中有兩個重要的點。

  • 我們使用tune方法訓練模型,ϵ=0,0.1,0.2,...,1和cost=22,23,24,...,29這意味著它將訓練88個模型(這可能需要很長一段時間
  • tuneResult返回MSE,別忘了在與我們之前的模型進行比較之前將其轉換為RMSE。

最後一行繪製了網格搜索的結果。

在這張圖上,我們可以看到,區域顏色越深,我們的模型就越好(因為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神經網絡分類

文章來源: https://twgreatdaily.com/zh-sg/8664c947be96f8e29759d3d2e47f2d6d.html