簡體   English   中英

在R中調整線性SVM模型時,具有負epsilon是否有意義?

[英]Does it make sense to have negative epsilon when tuning a linear-SVM model in R?

我正在使用以下調整代碼來為我的svn模型找到最佳情況和epsilon。

tuneResult <- tune(
    svm, 
    labels ~ ., 
    data = dataset, 
    ranges = list(epsilon = seq(-5.0, 5, 0.1), cost = 2^(0:3)))

但是令人驚訝的是,它表明cost = 4epsilon = -5

然后,我使用這些參數訓練了模型,並使用confusionMatrix進行了測試。 不幸的是,該模型不如沒有這些參數的模型准確。

model1 <-  svm(labels ~ ., data = dataset, kernel = "linear", cost = 4 , epsilon = -5)
model2 <-  svm(labels ~ ., data = dataset, kernel = "linear")

我在這里想念什么嗎?

tldr;

問題出在您的tuneResult命令中,您在其中允許epsilon[-5, +5]范圍內變化,因為為值>=0定義epsilon沒有意義。 tuneResult返回epsilon = -5的事實表明,在嘗試找到最佳的(超)參數集時會發生收斂失敗/問題。 不幸的是,沒有(樣本)數據,很難對分類模型中的任何(潛在)計算挑戰有所了解。


epsilon的作用/解釋

簡要說明一下:在SVM中, epsilon描述了容差裕度(“不敏感區域”),在該容限內不會對分類錯誤進行懲罰(您應查看?e1071::svm來了解epsilon的默認值)。 epsilon從右向零逼近的極限中, 所有分類錯誤都會受到懲罰,從而導致支持向量數量最多(作為epsilon的函數)。 有關各種SVM(超級)參數的解釋/定義,請參見此處的更多詳細信息。

超參數優化和收斂

讓我們回到為什么優化收斂失敗的問題:我認為這個問題源於同時優化costepsilon參數的問題。 隨着epsilon變得越來越小,對錯誤分類的懲罰越來越多(減少支持向量的數量)。 同時 ,通過允許越來越多的cost參數,您可以包含越來越多的支持向量,以抵消小epsilon的誤分類。 在交叉驗證期間,這實質上將模型驅動到越來越小的epsilon和越來越大的cost超參數。

一個例子

我們可以使用一些用於SVM分類問題的模擬數據來重現此行為。

  1. 讓我們生成一些樣本數據

     # Sample data set.seed(1) x <- rbind(matrix(rnorm(10 * 2, mean = 0), ncol = 2), matrix(rnorm(10 * 2, mean = 2), ncol = 2)) y <- c(rep(-1, 10), rep(1, 10)) df <- data.frame(x = x, y = as.factor(y)) 
  2. 讓我們同時調整epsilon和成本超參數。 我們使用與您原始帖子相同的范圍,包括無意義(即負)的ε值。

     # tune epsilon and cost hyper-parameters library(caret) tuneResult <- tune( svm, y ~ ., data = df, ranges = list(epsilon = seq(-5, 5, 0.01), cost = 2^(0:3)) ) # #Parameter tuning of 'svm': # #- sampling method: 10-fold cross validation # #- best parameters: # epsilon cost # -5 4 # #- best performance: 0.1 

    您會看到epsiloncost參數如何趨向於各自的最小/最大極限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM