无法在R中训练KSVM

4

我将一直为您服务。假设我有一个如下所示的训练数据:

1.0000000 0.8260869 0
0.7333333 0.4666667 0
0.0000000 0.0000000 0
0.3076923 0.3076923 0
0.2307692 0.4615385 0
0.9333333 0.4666667 1
0.3157895 0.4210526 1
1.0000000 0.7000000 1
0.3157895 0.2631579 1
0.6666667 0.4444444 1

前几列是我们的特征集,每行的最后一列是我们要学习/预测的标签。

但是当我尝试使用下面的脚本对上述数据进行SVM训练时:

library(kernlab)
library(Matrix)

kp = function(d, e){
    gama = 0.25

    DA = d[,1]
    DB = d[,2]
    DE = e[,1]
    DF = e[,2]


    q1 = (norm(as.matrix(DA-DE)))^2
    q2 = (norm(as.matrix(DB-DF)))^2
    q3 = (norm(as.matrix(DA-DF)))^2
    q4 = (norm(as.matrix(DB-DE)))^2

    s1 = min((q1+q2),(q3+q4))

    s = (norm(as.matrix(s1)))^2

    exp(-gama*s)
}

data    <- read.csv(file = "dataset.dat", stringsAsFactors = TRUE, nrows = 10)

xtrain  <- as.matrix(data[,1:2])

ytrain  <- as.matrix(data[,687])

class(kp)<-"kernel"

ksvm(x = xtrain, y = ytrain, type = "C-svc", kernel = kp, C = 128, scale = FALSE)

我遇到了以下错误。
Error in indexes[[j]] : subscript out of bounds
Calls: ksvm -> ksvm -> .local
Execution halted

我已经搜索过了,但是没有找到解决方案。

问题:

我做错了什么,怎样才能让它工作起来?


编辑

traceback()的结果如下:

3: .local(x, ...)
2: ksvm(x = xtrain, y = ytrain, type = "C-svc", kernel = kp, C = 128)
1: ksvm(x = xtrain, y = ytrain, type = "C-svc", kernel = kp, C = 128)

此外还有dput(数据)

structure(list(X0.8 = c(1, 0.7333333, 0, 0.3076923, 0.2307692), X0.7 = c(0.8260869, 0.4666667, 0, 0.3076923, .4615385)), .Names = c("X0.8",  "X0.7"), row.names = c(NA, 5L), class = "data.frame")

我认为你的问题可能在于训练数据输入x和响应向量y。你能否检查一下y是否应该是一个矩阵? - Tim Biegeleisen
请发布traceback()的结果。最好附上一个能够重现问题的小数据集的dput() - shadowtalker
问题已被编辑。 - zahra
2个回答

0

我遇到了相同的问题,实际上问题是数据集中存在一些无限元素。

您可以使用类似 apply(xtrain,2,range) 的方法检查它们,然后使用 xtrain$your_var[xtrain$your_var==Inf] <- 0 将其任意设置为零。


0
在我的情况下,问题是NA值。我已经把它们删除了并且解决了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接