【視頻】支持向量機SVM、支持向量回歸SVR和R語言網格搜索超參數優(yōu)化實例
原文鏈接:http://tecdat.cn/?p=23305
原文出處:拓端數據部落公眾號
什么是支持向量機?(SVM)?
我們將從簡單的理解?SVM?開始。
【視頻】支持向量機SVM、支持向量回歸SVR和R語言網格搜索超參數優(yōu)化實例
支持向量機SVM、支持向量回歸SVR和R語言網格搜索超參數優(yōu)化實例
,時長07:24
假設我們有兩個標簽類的圖,如下圖所示:
你能決定分隔線是什么嗎?你可能想出了這個:
這條線將類完全分開。這就是 SVM 本質上所做的——簡單的類分離。

現在,數據是這樣的:

在這里,我們沒有一條簡單的線來分隔這兩個類。所以我們將擴展我們的維度并沿 z 軸引入一個新維度。

我們現在可以將這兩個類分開:

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

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

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

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

我們現在可以用R來顯示數據并擬合直線。
#?從csv文件中加載數據 dataDirectory?<-?"D:/"?#把你自己的文件夾放在這里 data?<-?read.csv(paste(dataDirectory,?'data.csv',?sep=""),?header?=?TRUE) #?繪制數據 plot(data,?pch=16) #?創(chuàng)建一個線性回歸模型 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創(chuàng)建一個SVR模型。
下面是用支持向量回歸進行預測的代碼。
model?<-?svm(Y?~?X?,?data)
如你所見,它看起來很像線性回歸的代碼。請注意,我們調用了svm函數(而不是svr?。@是因為這個函數也可以用來用支持向量機進行分類。如果該函數檢測到數據是分類的(如果變量是R中的一個因子),它將自動選擇SVM。
代碼畫出了下面的圖。

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

正如預期的那樣,RMSE更好了,現在是3.15,而之前是5.70。
但我們能做得更好嗎?
第四步:調整你的支持向量回歸模型
為了提高支持向量回歸的性能,我們將需要為模型選擇最佳參數。
在我們之前的例子中,我們進行了ε-回歸,我們沒有為ε(?)設置任何值,但它的默認值是0.1。?還有一個成本參數,我們可以改變它以避免過度擬合。
選擇這些參數的過程被稱為超參數優(yōu)化,或模型選擇。
標準的方法是進行網格搜索。這意味著我們將為?和成本的不同組合訓練大量的模型,并選擇最好的一個。
#?進行網格搜索 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。
最后一行繪制了網格搜索的結果。

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

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

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

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

本文摘選《R語言進行支持向量機回歸SVR和網格搜索超參數優(yōu)化》,點擊“閱讀原文”獲取全文完整資料。
點擊標題查閱往期內容
邏輯回歸、隨機森林、SVM支持向量機預測心臟病風險數據和模型診斷可視化
R語言梯度提升機 GBM、支持向量機SVM、正則判別分析RDA模型訓練、參數調優(yōu)化和性能比較可視化分析聲納數據
R語言量化交易RSI策略:使用支持向量機SVM
基于隨機森林、svm、CNN機器學習的風控欺詐識別模型
Matlab建立SVM,KNN和樸素貝葉斯模型分類繪制ROC曲線
基于ARIMA、SVM、隨機森林銷售的時間序列預測
基于數據挖掘SVM模型的pre-incident事故預防預測
R語言用rle,svm和rpart決策樹進行時間序列預測
Python中基于網格搜索算法優(yōu)化的深度學習模型分析糖尿病數據
隨機森林優(yōu)化貝葉斯預測分析汽車燃油經濟性
Python基于粒子群優(yōu)化的投資組合優(yōu)化研究
matlab使用貝葉斯優(yōu)化的深度學習:卷積神經網絡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神經網絡分類