-3

Post# Filtering out columns in Rを参照すると、すべて 1 と 0 の列が training_data から正常に削除されました。ただし、分類アルゴリズムは、値のほとんどが 1 または 2 を除いて 0 である列についてまだ不平を言っています (列内のすべての値は、1 または 2 の値を除いて 0 です)。

penalizedSVM R パッケージを使用して機能選択を実行しています。データセットをさらに詳しく見ると、関数 svm.fs は、1 つまたは 2 つの値を除いてほとんどの値が 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)

または、まったく異なるソリューションを提案することもできます。

4

1 に答える 1

1

ブール値を合計できるという事実を利用して、ゼロの許容範囲を定義します。

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

これがドロップの条件になるところ。ただし、多くの場合、ゼロは有効なデータであるだけでなく、研究対象の現象にとって重要です。このアプローチを進める前に、アルゴリズムの選択と列を削除する決定について慎重に検討する必要があります。

于 2013-03-05T17:27:59.067 に答える