2016-03-07 93 views
0

我在包e1071中使用了svm函數。據我所知,svm基本功能可以用超平面(支持向量)分隔兩個線性可分類的類。更高級的功能允許您執行數字迴歸和非線性分離。 當我開始對一些數據進行測試時,我無法理解爲什麼模型的輸出是一組巨大的支持向量。 當我在一些非常簡單的測試示例上運行它時,我得到了相同的結果。下面是一個例子:限制R svm package e1071中支持向量的數量?

X = rnorm(1000) 
Y = rnorm(1000) 
data = data.frame(X, Y, Z = as.factor(X + Y > 0)) 
model = svm(formula = Z ~ X + Y, data = data, kernel = "linear") 

下面是結果:

Call: 
svm(formula = Z ~ X + Y, data = data, kernel = "linear") 


Parameters: 
    SVM-Type: C-classification 
SVM-Kernel: linear 
    cost: 1 
    gamma: 0.5 

Number of Support Vectors: 102 

本實施例顯然僅由一個支持向量線性可分。如果不相信你可以運行:

ggplot(data, aes(X, Y, col = Z)) + geom_point() 

102支持向量是什麼意思?爲什麼支持向量的數量不是一個參數?

感謝

回答

1

有一個軟保證金硬保證金 SVM之間的區別。這由成本參數控制,該成本參數懲罰允許支持向量違反邊際約束的程度。因此,只有在成本參數(非常大)的情況下,您才能獲得支持向量的最小數量(三個而不是一個)。嘗試使用成本參數> 10000的值,您將獲得三個支持向量。

+0

感謝您的回答。事實上,一個巨大的成本函數爲我提供了所需的3個向量(我忘了邊際)。你能否詳細說明爲什麼我們在明顯線性可分的變量情況下得到3個以上的向量?是否因爲其他向量爲成本函數產生一個客觀價值,足以接近最低成本? – eaglefreeman

+0

隨着成本的降低,保證金的增加會導致越來越多的寶貝現在躺在邊緣區域。邊緣區域的點越多,支撐向量就越多。 – DatamineR