我正在开发一种新算法,该算法会生成一个修改过的内核矩阵,用于使用 SVM 进行训练,但遇到了一个奇怪的问题。
出于测试目的,我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型。例如,
# Model with kernelMatrix computation within ksvm
svp1 <- ksvm(x, y, type="C-svc", kernel=vanilladot(), scaled=F)
# Model with kernelMatrix computed outside ksvm
K <- kernelMatrix(vanilladot(), x)
svp2 <- ksvm(K, y, type="C-svc")
identical(nSV(svp1), nSV(svp2))
请注意,我已关闭缩放,因为我不确定如何在内核矩阵上执行缩放。
据我了解,两者都svp1
应该svp2
返回相同的模型。但是,我观察到对于一些数据集,例如glass0
来自KEEL的数据集并非如此。
我在这里想念什么?