2013-03-05 52 views
-3

參考文章#Filtering out columns in R,所有1和0的列都已成功從training_data中刪除。但是,分類算法仍然抱怨其中大部分值爲0的列除1或2(列中的所有值都爲0,1或2的值除外)。篩選出R中的列

我正在使用penalizedSVM R包來執行特徵選擇。仔細查看數據集,函數svm.fs抱怨大多數值爲0的列,除了一個或兩個。

如何修改(或添加一些內容)以下代碼以實現結果。

lambda1.scad<-c(seq(0.01, 0.05, .01), seq(0.1, 0.5, 0.2), 1) 
lambda1.scad<-lambda1.scad[2:3] 
seed <- 123 

f0 <- function(x) any(x!=1) & any(x!=0) & is.numeric(x) 
trainingdata <- lapply(trainingdata, function(data) cbind(label=data$label, 
          colwise(identity, f0)(data))) 

datax <- trainingdata[[1]] 
levels(datax$label) <- c(-1, 1) 
train_x<-datax[, -1] 
train_x<-data.matrix(train_x) 
trainy<-datax[, 1] 

idx <- is.na(train_x) | is.infinite(train_x) 
train_x[idx] <- 0 

tryCatch(scad.fix<-svm.fs(train_x, y=trainy, fs.method="scad", 
          cross.outer=0, grid.search="discrete", 
          lambda1.set=lambda1.scad, parms.coding="none", 
          show="none", maxIter=1000, inner.val.method="cv", 
          cross.inner=5, seed=seed, verbose=FALSE), error=function(e) e) 

或者你可能會提出一個完全不同的解決方案。

+0

請包括您在未來的問題中嘗試過的內容。此外,還要包括諸如您選擇的分類算法等信息,可能有一個您缺少的參數,但除非我們知道更多信息,否則我們無法提供幫助! – Justin 2013-03-05 17:29:15

回答

1

使用的事實,布爾值可以概括和界定零一些寬容:

sum(x == 0)/length(x) >= tolerance 

如果這成爲你的下降情況。但是,零點通常不僅是有效的數據,而且對於正在研究的現象至關重要。在採用這種方法前,您應該仔細考慮您的算法選擇和刪除列的決定。