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]]
Carlos Ortega
2021-Feb-05 08:33 UTC
[R-es] Obtener una df a partir de una lista (o algo así)
Hola Manuel, Otra alternativa que se me ocurre es que veas el problema de otra forma. En vez de usar un caso del ejemplo de la función "xgboost()" en el que efectivamente las variables de train/test ya tienen una estructura lista para ser utilizados por xgboost, prueba a crear a partir de un data.frame las variables de train y test. Como referencia mira esto: - https://xgboost.readthedocs.io/en/latest/R-package/xgboostPresentation.html - Read the part about "Basic Training using XGBoost" / "Parameter variations" - O este otro ejemplo más completo: - https://www.analyticsvidhya.com/blog/2016/01/xgboost-algorithm-easy-steps/ Gracias, Carlos Ortega www.qualityexcellence.es El vie, 5 feb 2021 a las 6:36, Carlos J. Gil Bellosta (<cgb en datanalytics.com>) escribió:> 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]] > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]