使用SVM预测时在1:nrow(newdata)中出现长度为0的参数错误

我正在尝试基于通过SVM训练的模型来预测A值。这是我的训练和测试数据的外观:

A     B    C     Dr00  r01  r02   r03...  ...  ...   ...

代码片段如下:

featvecs = [“B”]

for (f in 1:nrow(featvecs)) {    tuned <- svm(A ~., data = train[,c("A",featvecs[f,])], gamma = 0.01, cost = 10, kernel= "radial")    svm.predict <- predict(tuned, test[,featvecs[f,]])}

我在svm.predict这一行得到了以下错误,但我不太确定为什么?

Error in 1:nrow(newdata) : argument of length 0

训练数据的结构:

structure(list(A = structure(6L, .Label = c("'1'", "'2'", "'3'" ), class = "factor"), B =  structure(15L, .Label = c(...)...)

测试数据的结构:

structure(list(A = structure(2L, .Label = c("'1'", "'2'", "'3'" ), class = "factor"), B =  structure(17L, .Label = c(...)...)

回答:

我怀疑featvecs只有一个列,所以featvecs[f,]的长度为1

然后test[,featvecs[f,]]输出的是一个向量而不是预期的数据框(参见mtcars[, "mpg"]mtcars[, "mpg", drop = FALSE]之间的区别),而nrow()应用于向量时输出NULL:1:nrow(newdata)svm.predict()的源代码中会得到1:NULL,这导致了你的错误。

尝试在test[,featvecs[f,], drop = FALSE]中添加drop = FALSE,这样你就能得到一个数据框。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注