Machine learning 带RBF的SVM:对于遥远的测试样本,决策值往往等于偏差项的负值

Machine learning 带RBF的SVM:对于遥远的测试样本,决策值往往等于偏差项的负值,machine-learning,svm,libsvm,Machine Learning,Svm,Libsvm,在SVM中使用RBF核,为什么远离训练样本的测试样本的决策值往往等于偏差项b的负值 结果是,一旦生成SVM模型,如果我将偏差项设置为0,则远离训练样本的测试样本的决策值趋于0。为什么会这样 使用LibSVM,偏差项b是rho。决策值是到超平面的距离 我需要理解是什么定义了这种行为。有人明白吗 运行以下R脚本,可以看到此行为: library(e1071) library(mlbench) data(Glass) set.seed(2) writeLines('separating traini

在SVM中使用RBF核,为什么远离训练样本的测试样本的决策值往往等于偏差项b的负值

结果是,一旦生成SVM模型,如果我将偏差项设置为0,则远离训练样本的测试样本的决策值趋于0。为什么会这样

使用LibSVM,偏差项b是rho。决策值是到超平面的距离

我需要理解是什么定义了这种行为。有人明白吗

运行以下R脚本,可以看到此行为:

library(e1071)
library(mlbench)
data(Glass)
set.seed(2)

writeLines('separating training and testing samples')
testindex <- sort(sample(1:nrow(Glass), trunc(nrow(Glass)/3)))
training.samples <- Glass[-testindex, ]
testing.samples <- Glass[testindex, ]
writeLines('normalizing samples according to training samples between 0 and 1')
fnorm <- function(ran, data) {
    (data - ran[1]) / (ran[2] - ran[1])
}
minmax <- data.frame(sapply(training.samples[, -10], range))
training.samples[, -10] <- mapply(fnorm, minmax, training.samples[, -10])
testing.samples[, -10] <- mapply(fnorm, minmax, testing.samples[, -10])
writeLines('making the dataset binary')
training.samples$Type <- factor((training.samples$Type == 1) * 1)
testing.samples$Type <- factor((testing.samples$Type == 1) * 1)
writeLines('training the SVM')
svm.model <- svm(Type ~ ., data=training.samples, cost=1, gamma=2**-5)
writeLines('predicting the SVM with outlier samples')
points = c(0, 0.8, 1,                         # non-outliers
  1.5, -0.5, 2, -1, 2.5, -1.5, 3, -2, 10, -9) # outliers
outlier.samples <- t(sapply(points, function(p) rep(p, 9)))
svm.pred <- predict(svm.model, testing.samples[, -10], decision.values=TRUE)
svm.pred.outliers <- predict(svm.model, outlier.samples, decision.values=TRUE)

writeLines('')                          # printing
svm.pred.dv <- c(attr(svm.pred, 'decision.values'))
svm.pred.outliers.dv <- c(attr(svm.pred.outliers, 'decision.values'))
names(svm.pred.outliers.dv) <- points
writeLines('test sample decision values')
print(head(svm.pred.dv))
writeLines('non-outliers and outliers decision values')
print(svm.pred.outliers.dv)
writeLines('svm.model$rho')
print(svm.model$rho)

writeLines('')
writeLines('<< setting svm.model$rho to 0 >>')
writeLines('predicting the SVM with outlier samples')
svm.model$rho <- 0
svm.pred <- predict(svm.model, testing.samples[, -10], decision.values=TRUE)
svm.pred.outliers <- predict(svm.model, outlier.samples, decision.values=TRUE)

writeLines('')                          # printing
svm.pred.dv <- c(attr(svm.pred, 'decision.values'))
svm.pred.outliers.dv <- c(attr(svm.pred.outliers, 'decision.values'))
names(svm.pred.outliers.dv) <- points
writeLines('test sample decision values')
print(head(svm.pred.dv))
writeLines('non-outliers and outliers decision values')
print(svm.pred.outliers.dv)
writeLines('svm.model$rho')
print(svm.model$rho)
库(e1071)
图书馆(mlbench)
数据(玻璃)
种子(2)
writeLines(“分离培训和测试样本”)
testindex你的意思是偏差项为负而不是相反吗

支持向量机的决策函数是符号(w^T x-rho)
,其中
rho
是偏差项,
w
是权重向量,
x
是输入。但这是原始空间/线性形式
w^T x
被我们的核函数替换,在本例中,它是RBF核

RBF核定义为。所以如果两个物体之间的距离很大,那么它就会平方,我们得到一个巨大的数字
γ
是一个正数,所以我们将我们的巨大值设为巨大的负值
exp(-10)
已经达到了5*10^-5的数量级,因此对于遥远的点,RBF核将本质上变为零。如果sample远离您的所有培训数据,那么所有的内核产品都将接近于零。这意味着
w^T x
将接近于零。所以你剩下的基本上是符号(0-rho),即:你的偏差项的负数