2016-08-15 2 views
5

Je voudrais être en mesure d'utiliser une matrice clairsemée comme x dans caret::train et il semble que beaucoup d'entre eux attendent une trame de données. J'ai été en mesure d'utiliser la matrice clairsemée avec XGboost avec caret mais nnet et ELM semblent tous deux nécessiter une trame de données. J'ai remarqué dans le code, caret essaie de convertir x à la trame de données pour nnet et ELM modèles.Quels modèles dans caret peuvent utiliser une matrice clairsemée pour X?

Existe-t-il une liste de modèles prenant en charge une matrice fragmentée?

Répondre

2

Vous pouvez utiliser cette partie du code pour trouver les modèles qui utilisent as.matrix dans la fonction d'ajustement.

Attention, comme.matrix transforme une matrice clairsemée en une matrice pleine fusion. Vous pourriez rencontrer des problèmes de mémoire. Je n'ai pas testé si les modèles sous-jacents individuels acceptent une matrice clairsemée.

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

Merci. Cela répond à ma question. Mais l'utilisation de as.matrix défait le but de l'utilisation de la matrice sparse. –