Manuel Mendoza
2021-Feb-05 05:10 UTC
[R-es] Obtener una df a partir de una lista (o algo así)
Buenos días, estoy tratando de implementar el código que veis abajo, de la documentación del paquete xgboost. Me desconcierta que al cargar las bases de datos aparezcan como listas. Cuando la llama directamente al aplicar la función xgboost (data = train$data) me desconcierta todavía más. Entiendo que se puede hacer así también, claro. Aunque no aparezca en el documento, pretendo componer la df para trabajar desde ella (tal y como acostumbro a hacer) pero, en mi infinita ignorancia, no lo consigo. He probado cosas como: df<-as.data.frame(train), df<-as.data.frame(train$data) y también con as.matrix, pero no funcionan. Si alguien me dice cómo hacerlo (y de paso, por qué) se lo agradecería mucho. library(xgboost) data(agaricus.train, package='xgboost') data(agaricus.test, package='xgboost') train <- agaricus.train test <- agaricus.test bst <- xgboost(data = train$data, label = train$label, max_depth = 2, eta 1, nrounds = 2, objective = "binary:logistic") Gracias, como siempre, Manuel [[alternative HTML version deleted]]
Carlos J. Gil Bellosta
2021-Feb-05 05:35 UTC
[R-es] Obtener una df a partir de una lista (o algo así)
Hola, ¿qué tal? Por razones que no vienen al caso y a diferencia de muchos otros tipos de modelos tal como se implementan en R, xgboost admite como argumentos la X (data) y la Y (label) de tu problema por separado. Son dos objetos distintos. agaricus.train es una lista que contiene esos dos objetos (la X y la Y); de hecho, una lista es precisamente eso: una estructura que permite yuxtaponer otras. Los dos objetos son, el uno, la matriz agaricus.train$data ---puedes ver que se trata de una matriz "sparse" haciendo class(agaricus.train$data) o usar las funciones head, etc. para inspeccionarla--- y el otro es un vector de números (0 o 1), agaricus.train$label. Puedes convertir todo en un df tradicional haciendo algo así como datos <- data.frame(as.matrix(agaricus.train$data), label agaricus.train$label) Dicho todo lo cual, creo que te vendría bien echarle un buen vistazo a los capítulos 2, 3 y 5 de esto <https://datanalytics.com/libro_r/> antes de meterte con XGBoost o sufrirás mucho. Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El vie, 5 feb 2021 a las 6:11, Manuel Mendoza (<mmendoza en fulbrightmail.org>) escribió:> Buenos días, estoy tratando de implementar el código que veis abajo, de la > documentación del paquete xgboost. Me desconcierta que al cargar las bases > de datos aparezcan como listas. Cuando la llama directamente al aplicar la > función xgboost (data = train$data) me desconcierta todavía más. Entiendo > que se puede hacer así también, claro. Aunque no aparezca en el documento, > pretendo componer la df para trabajar desde ella (tal y como acostumbro a > hacer) pero, en mi infinita ignorancia, no lo consigo. > He probado cosas como: > df<-as.data.frame(train), > df<-as.data.frame(train$data) > y también con as.matrix, pero no funcionan. > Si alguien me dice cómo hacerlo (y de paso, por qué) se lo agradecería > mucho. > > library(xgboost) > data(agaricus.train, package='xgboost') > data(agaricus.test, package='xgboost') > train <- agaricus.train > test <- agaricus.test > bst <- xgboost(data = train$data, label = train$label, max_depth = 2, eta > 1, nrounds = 2, objective = "binary:logistic") > > Gracias, como siempre, > Manuel > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]