SVM-RFE算法在R中的实现

SVM-RFE算法在R中的实现,r,machine-learning,svm,libsvm,R,Machine Learning,Svm,Libsvm,我使用R代码来实现这个源代码中的SVM-RFE算法,但是我做了一个小的修改,使R代码使用gnum库。代码如下: svmrfeFeatureRanking = function(x,y){ n = ncol(x) survivingFeaturesIndexes = seq(1:n) featureRankedList = vector(length=n) rankedFeatureIndex = n while(length(survivingFeaturesIndexe

我使用R代码来实现这个源代码中的
SVM-RFE
算法,但是我做了一个小的修改,使R代码使用
gnum
库。代码如下:

svmrfeFeatureRanking = function(x,y){
  n = ncol(x)

  survivingFeaturesIndexes = seq(1:n)
  featureRankedList = vector(length=n)
  rankedFeatureIndex = n

  while(length(survivingFeaturesIndexes)>0){
    #train the support vector machine
    svmModel = SVM(x[, survivingFeaturesIndexes], y, C = 10, cache_size=500,kernel="linear" )



    #compute ranking criteria
    rankingCriteria = svmModel$w * svmModel$w

    #rank the features
    ranking = sort(rankingCriteria, index.return = TRUE)$ix

    #update feature ranked list
    featureRankedList[rankedFeatureIndex] = survivingFeaturesIndexes[ranking[1]]
    rankedFeatureIndex = rankedFeatureIndex - 1

    #eliminate the feature with smallest ranking criterion
    (survivingFeaturesIndexes = survivingFeaturesIndexes[-ranking[1]])

  }

  return (featureRankedList)
} 
该函数接收一个
矩阵
作为
x的
输入
,以及一个
因子
作为
y的
输入
。我对一些数据使用该函数,在最后一次迭代中收到以下错误消息:

 Error in if (nrow(x) != length(y)) { : argument is of length zero 
在调试代码时,我得到以下信息:

3 SVM.default(x[, survivingFeaturesIndexes], y, C = 10, cache_size = 500, 
    kernel = "linear") 
2 SVM(x[, survivingFeaturesIndexes], y, C = 10, cache_size = 500, 
    kernel = "linear") 
1 svmrfeFeatureRanking(sdatx, ym) 

那么,函数的错误是什么呢?

看起来,当只剩下一个功能时,矩阵会被转换成一个列表。试试这个:

svmModel = SVM(as.matrix(x[, survivingFeaturesIndexes]), y, C = 10, cache_size=500,kernel="linear" )

插入符号包似乎包含RFE: