2016-08-11 146 views
1

我使用R代码来实现SVM-RFE算法从这个源http://www.uccor.edu.ar/paginas/seminarios/Software/SVM_RFE_R_implementation.pdf但我做了一个小的修改,使r代码使用gnum库。该代码是下面的:R中的SVM-RFE算法的实现

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) 
} 

该功能接收matrix作为input用于xfactor作为inputy。我使用的功能对于一些数据,我收到的最后一个迭代以下错误信息:

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) 

那么,有什么功能的错误?

回答

1

看起来像只有一个功能保留时,矩阵转换为列表。试试这个:

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