SVM-RFE算法在R中的实现
我使用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
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: