Kernlab kraziness:相同问题的不一致结果

Kernlab kraziness:相同问题的不一致结果,r,machine-learning,svm,kernlab,R,Machine Learning,Svm,Kernlab,我在kernlab软件包中发现了一些令人费解的行为:估计数学上相同的支持向量机会在软件中产生不同的结果 为了简单起见,此代码片段只获取iris数据,并将其作为二进制分类问题。正如你所看到的,我在两种支持向量机中都使用了线性核函数 library(kernlab) library(e1071) data(iris) x <- as.matrix(iris[, 1:4]) y <- as.factor(ifelse(iris[, 5] == 'versicolor', 1, -1))

我在kernlab软件包中发现了一些令人费解的行为:估计数学上相同的支持向量机会在软件中产生不同的结果

为了简单起见,此代码片段只获取iris数据,并将其作为二进制分类问题。正如你所看到的,我在两种支持向量机中都使用了线性核函数

library(kernlab)
library(e1071)

data(iris)
x <- as.matrix(iris[, 1:4])
y <- as.factor(ifelse(iris[, 5] == 'versicolor', 1, -1))
C <- 5.278031643091578

svm1 <- ksvm(x = x, y = y, scaled = FALSE, kernel = 'vanilladot', C = C)

K <- kernelMatrix(vanilladot(), x)
svm2 <- ksvm(x = K, y = y, C = C, kernel = 'matrix')

svm3 <- svm(x = x, y = y, scale = FALSE, kernel = 'linear', cost = C)
为了比较,我还使用e1071计算了相同的模型,它为libsvm包提供了一个R接口

svm3

Call:
svm.default(x = x, y = y, scale = FALSE, kernel = "linear", cost = C)


Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  linear 
       cost:  5.278032 
      gamma:  0.25 

Number of Support Vectors:  89

It reports 89 support vectors, the same as svm1.
我的问题是kernlab包中是否有任何已知的bug可以解释这种异常行为


(Kernlab for R是一个SVM解算器,允许使用几个预打包的内核函数之一,或用户提供的内核矩阵。输出是对用户提供的超参数的支持向量机的估计。)

查看一些代码,似乎这是有问题的一行:


也就是说,在用户提供的内核矩阵的情况下,
ksvm
只是查看两个维度,而不是输入的维度。这似乎很奇怪,可能是因为一些测试或其他原因造成的。用两个维度的数据测试线性核会产生相同的结果:用上面的
1:2
替换
1:4
,输出和预测都一致。

非常有趣。我对此研究了一会儿,但还是被卡住了。我不太明白里面发生了什么。当给定一个预计算的内核矩阵时,“Q”矩阵(请参阅)可能略有不同?至少这是我开始调试的地方。据我所知,检索预计算点积的函数工作正常。一个不同但相关的函数。
svm3

Call:
svm.default(x = x, y = y, scale = FALSE, kernel = "linear", cost = C)


Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  linear 
       cost:  5.278032 
      gamma:  0.25 

Number of Support Vectors:  89

It reports 89 support vectors, the same as svm1.