2016-08-15 5 views
5

caret::trainの中にxというスパース行列を使用したいと考えていますが、その多くがデータフレームを期待しているようです。私はXGboostcaretの疎行列を使用することができましたが、nnetELMの両方にデータフレームが必要なようです。コードで気付いたように、キャレットはnnetELMモデルのデータフレームにxを変換しようとします。キャレット内のどのモデルがXに疎行列を使用できますか?

スパース行列をサポートするモデルのリストはありますか?

答えて

2

このコードを使用すると、fit関数でas.matrixを使用しているモデルを見つけることができます。

as.matrixは疎な行列を完全な行列に変換することに注意してください。メモリの問題が発生する可能性があります。個々の基礎となるモデルが疎な行列を受け入れるかどうかはテストしていません。

library(caret) # run on version 6.0-71 

model_list <- getModelInfo() 
df <- data.frame(models = names(model_list), 
       fit = rep("", length(model_list)), 
       stringsAsFactors = FALSE) 

for (i in 1:length(model_list)) { 
    df$fit[i] <- as.expression(functionBody(model_list[[i]]$fit)) 
} 

# find xgboost matrix 
df$models[grep("xgb.DMatrix", df$fit)] 
[1] "xgbLinear" "xgbTree" 

# find all models where fit contains as.matrix(x) 
df$models[grep("as.matrix\\(x\\)", df$fit)] 

[1] "bdk"    "binda"    "blasso"   "blassoAveraged" "bridge"   "brnn"    
[7] "dnn"    "dwdLinear"   "dwdPoly"   "dwdRadial"   "enet"    "enpls.fs"   
[13] "enpls"    "foba"    "gaussprLinear"  "gaussprPoly"  "gaussprRadial"  "glmnet"   
[19] "knn"    "lars"    "lars2"    "lasso"    "logicBag"   "LogitBoost"  
[25] "lssvmLinear"  "lssvmPoly"   "lssvmRadial"  "mlpSGD"   "nnls"    "ordinalNet"  
[31] "ORFlog"   "ORFpls"   "ORFridge"   "ORFsvm"   "ownn"    "PenalizedLDA"  
[37] "ppr"    "qrnn"    "randomGLM"   "relaxo"   "ridge"    "rocc"    
[43] "rqlasso"   "rqnc"    "rvmLinear"   "rvmPoly"   "rvmRadial"   "sda"    
[49] "sddaLDA"   "sddaQDA"   "sdwd"    "snn"    "spikeslab"   "svmLinear"   
[55] "svmLinear2"  "svmLinear3"  "svmLinearWeights" "svmLinearWeights2" "svmPoly"   "svmRadial"   
[61] "svmRadialCost"  "svmRadialSigma" "svmRadialWeights" "xgbLinear"   "xgbTree"   "xyf"  
+1

ありがとうございます。これは私の質問に答える。しかし、as.matrixのようなものを使用することは、疎な行列を使う目的に反する。 –

関連する問題