2016-08-11 23 views
1

の実装にRコードを使用しています。このソースのアルゴリズムhttp://www.uccor.edu.ar/paginas/seminarios/Software/SVM_RFE_R_implementation.pdfですが、rコードでgnumライブラリを使用するように少し変更しました。機能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) 
} 

xためinputyためinputとしてfactorとしてmatrixを受け取る:コードは以下の通りです。私はいくつかのデータのための機能を使用して、私は最後の反復で、次のエラーメッセージが表示されます

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) 

ので、機能のエラー情報:コードのデバッグ

Error in if (nrow(x) != length(y)) { : argument is of length zero 

を、私はこれが得ました?

答えて

1

1つのフィーチャだけが残っていると、マトリックスがリストに変換されているように見えます。試してみてください:

svmModel = SVM(as.matrix(x[, survivingFeaturesIndexes]), y, C = 10, cache_size=500,kernel="linear") 
関連する問題