我正在尝试使用kernlab
R 包来做支持向量机(SVM)。对于我非常简单的示例,我有两条训练数据。A和B。
(A 和 B 属于类型matrix
- 它们是图的邻接矩阵。)
所以我写了一个函数,它接受 A+B 并生成一个核矩阵。
> km
[,1] [,2]
[1,] 14.33333 18.47368
[2,] 18.47368 38.96053
现在我使用kernlab
'sksvm
函数来生成我的预测模型。现在,我只是想让这该死的东西发挥作用——我不担心训练错误等。
那么,问题 1:我是否正确生成了我的模型?合理吗?
# y are my classes. In this case, A is in class "1" and B is in class "-1"
> y
[1] 1 -1
> model2 = ksvm(km, y, type="C-svc", kernel = "matrix");
> model2
Support Vector Machine object of class "ksvm"
SV type: C-svc (classification)
parameter : cost C = 1
[1] " Kernel matrix used as input."
Number of Support Vectors : 2
Objective Function Value : -0.1224
Training error : 0
到现在为止还挺好。我们创建了自定义内核矩阵,然后使用该矩阵创建了 ksvm 模型。我们将训练数据标记为“1”和“-1”。
现在预测:
> A
[,1] [,2] [,3]
[1,] 0 1 1
[2,] 1 0 1
[3,] 0 0 0
> predict(model2, A)
Error in as.matrix(Z) : object 'Z' not found
哦哦。这没关系。有点期待,真的。“预测”需要某种向量,而不是矩阵。
所以让我们尝试一些事情:
> predict(model2, c(1))
Error in as.matrix(Z) : object 'Z' not found
> predict(model2, c(1,1))
Error in as.matrix(Z) : object 'Z' not found
> predict(model2, c(1,1,1))
Error in as.matrix(Z) : object 'Z' not found
> predict(model2, c(1,1,1,1))
Error in as.matrix(Z) : object 'Z' not found
> predict(model2, km)
Error in as.matrix(Z) : object 'Z' not found
上面的一些测试是荒谬的,但这就是我的观点:无论我做什么,我都无法让 predict() 查看我的数据并进行预测。标量不起作用,向量不起作用。2x2 矩阵不起作用,3x3 矩阵也不起作用。
我在这里做错了什么?
(一旦我弄清楚 ksvm想要什么,那么我就可以确保我的测试数据能够以理智/合理/数学上合理的方式符合该格式。)