首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将kernlab包与预计算内核一起使用时出错

将kernlab包与预计算内核一起使用时出错
EN

Stack Overflow用户
提问于 2016-05-18 13:15:54
回答 1查看 711关注 0票数 1

我一直在使用kernlab包,在使用带有预计算内核的ksvm/predict函数时遇到一些问题。

我得到的错误消息是:

代码语言:javascript
运行
复制
> ksvm.mod <- ksvm(trainingset.outer, traininglabels.outer, kernel = "matrix",type="C-svc", C = 60, prob.model = TRUE)
> temp <-  predict(ksvm.mod, test.kernel.outer)
Error in .local(object, ...) : test vector does not match model !

我查看了错误位置的源代码,发现这是由于列的差异造成的

代码语言:javascript
运行
复制
newnrows <- nrow(newdata)
newncols <- ncol(newdata)
if(!is(newdata,"kernelMatrix") && !is.null(xmatrix(object))){
  if(is(xmatrix(object),"list") && is(xmatrix(object)[[1]],"matrix")) oldco <- ncol(xmatrix(object)[[1]])
  if(is(xmatrix(object),"matrix")) oldco <- ncol(xmatrix(object))
  if (oldco != newncols) stop ("test vector does not match model !")
}

但是,我使用的对象具有相等的列

代码语言:javascript
运行
复制
> ncol(trainingset.outer)
[1] 1498
> ncol(test.kernel.outer)
[1] 1498

​然后,我查看了根据模型存储的列,并发现了以下内容:

代码语言:javascript
运行
复制
> ncol(xmatrix(ksvm.mod)[[1]])
Error in xmatrix(ksvm.mod)[[1]] : subscript out of bounds
> xmatrix(ksvm.mod)[[1]]
Error in xmatrix(ksvm.mod)[[1]] : subscript out of bounds
> xmatrix(ksvm.mod)
<0 x 0 matrix>
> ?xmatrix
> ksvm.mod
Support Vector Machine object of class "ksvm" 

SV type: C-svc  (classification) 
 parameter : cost C = 60 

[1] " Kernel matrix used as input."

Number of Support Vectors : 831 

Objective Function Value : -211534.1 
Training error : 0.257677 
Probability model included. ​
> ncol(xmatrix(gene)[[1]]) # for dataframes used without precomputed kernels
[1] 172

我猜模型没有存储任何对象,我的理解正确吗?由于web上没有很好的例子来使用带有预计算内核的包,所以我写这篇文章是为了寻求你的帮助。

PS:如果需要,我会尝试提供测试数据。

EN

回答 1

Stack Overflow用户

发布于 2016-06-29 00:07:22

你做的只对了一半。predict对象只需要newdata和支持向量之间的内核距离,但它不会自己提取它们,您必须自己传递它们。

试试这个:

代码语言:javascript
运行
复制
ksvm.mod <- ksvm(trainingset.outer, traininglabels.outer, kernel = "matrix",type="C-svc", C = 60, prob.model = TRUE)
temp <-  predict(ksvm.mod, test.kernel.outer[, SVindex(ksvm.mod))

我在这里假设test.kernel.outer是一个kernelMatrix,它测量测试数据(行)和训练数据(列)之间的内核距离。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37290816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档