[R-es] Obtener una df a partir de una lista (o algo así)

Carlos J. Gil Bellosta cgb @end|ng |rom d@t@n@|yt|c@@com
Vie Feb 5 06:35:56 CET 2021


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 using 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 using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es