03:00
Introducciendo Tidymodels
¿Como ajustar un modelo linear en R?
¿De cuantas maneras sabes como ajustar este tipo de modelo?
03:00
lm
para regresión linear
glm
para regresión linear generalizada
glmnet
para regresión regularizada
keras
para regresión dentro de Tensorflow
stan
para regresión bayensiana
spark
para datos “grandes”
Corre el “chunk” arbol_espec
en tu archivo .qmd
.
Cambia el código para que utilize una regresión linear
El listado de modelos se encuentra aquí: https://www.tidymodels.org/find/parsnip/
Reto: Edita el código para usar otro tipo de modelo. Por ejemplo, trata de usar el árbol disponible dentro del paquete partykit, o trata un modelo de tipo diferente
05:00
\(log(\frac{p}{1 - p}) = \beta_0 + \beta_1\cdot \text{A}\)
El resultado es decidido usando una serie de decisiones basados en las variables predictivas
Primero, el arbol crece hasta que se llega a una decision
Después, el arbol es recortado para que no sea tan complejo
flowchart LR dt[Datos] pr[Predictores] subgraph fl[Flujo del modelo] pca[PCA] ls[Menos cuadrados] pca-->ls end dt-->fl pr-->fl ft[Modelo ajustado] fl-->ft style fl fill:#fff,stroke:#666,color:#000
flowchart LR dt[Datos] pr[Predictores] pca[PCA] subgraph fl[Flujo del modelo] ls[Menos cuadrados] end pca-->fl dt-->pca pr-->pca ft[Modelo ajustado] fl-->ft style fl fill:#fff,stroke:#666,color:#000
workflow()
? workflow
maneja nuevos niveles factoriales mejor que las herramientas regulares de Rworkflow
encaja todo el processo de modelamiento, desde la creación (fit()
) del modelo, hasta el uso del modelo (predict()
)arbol_espec <-
decision_tree(cost_complexity = 0.002) %>%
set_mode("classification")
arbol_espec %>%
fit(propina ~ ., data = taxi_entrenar)
#> parsnip model object
#>
#> n= 8000
#>
#> node), split, n, loss, yval, (yprob)
#> * denotes terminal node
#>
#> 1) root 8000 616 si (0.92300000 0.07700000)
#> 2) distancia>=14.12 2041 68 si (0.96668300 0.03331700) *
#> 3) distancia< 14.12 5959 548 si (0.90803826 0.09196174)
#> 6) distancia< 5.275 5419 450 si (0.91695885 0.08304115) *
#> 7) distancia>=5.275 540 98 si (0.81851852 0.18148148)
#> 14) compania=Chicago Independents,City Service,otra,Sun Taxi,Taxi Affiliation Services,Taxicab Insurance Agency Llc 478 68 si (0.85774059 0.14225941) *
#> 15) compania=Flash Cab 62 30 si (0.51612903 0.48387097)
#> 30) dia=Jue 12 2 si (0.83333333 0.16666667) *
#> 31) dia=Lun,Mar,Mie,Vie,Sab,Dom 50 22 no (0.44000000 0.56000000)
#> 62) distancia>=11.77 14 4 si (0.71428571 0.28571429) *
#> 63) distancia< 11.77 36 12 no (0.33333333 0.66666667) *
arbol_espec <-
decision_tree(cost_complexity = 0.002) %>%
set_mode("classification")
workflow() %>%
add_formula(propina ~ .) %>%
add_model(arbol_espec) %>%
fit(data = taxi_entrenar)
#> ══ Workflow [trained] ════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: decision_tree()
#>
#> ── Preprocessor ──────────────────────────────────────────────────────
#> propina ~ .
#>
#> ── Model ─────────────────────────────────────────────────────────────
#> n= 8000
#>
#> node), split, n, loss, yval, (yprob)
#> * denotes terminal node
#>
#> 1) root 8000 616 si (0.92300000 0.07700000)
#> 2) distancia>=14.12 2041 68 si (0.96668300 0.03331700) *
#> 3) distancia< 14.12 5959 548 si (0.90803826 0.09196174)
#> 6) distancia< 5.275 5419 450 si (0.91695885 0.08304115) *
#> 7) distancia>=5.275 540 98 si (0.81851852 0.18148148)
#> 14) compania=Chicago Independents,City Service,otra,Sun Taxi,Taxi Affiliation Services,Taxicab Insurance Agency Llc 478 68 si (0.85774059 0.14225941) *
#> 15) compania=Flash Cab 62 30 si (0.51612903 0.48387097)
#> 30) dia=Jue 12 2 si (0.83333333 0.16666667) *
#> 31) dia=Lun,Mar,Mie,Vie,Sab,Dom 50 22 no (0.44000000 0.56000000)
#> 62) distancia>=11.77 14 4 si (0.71428571 0.28571429) *
#> 63) distancia< 11.77 36 12 no (0.33333333 0.66666667) *
arbol_espec <-
decision_tree(cost_complexity = 0.002) %>%
set_mode("classification")
workflow(propina ~ ., arbol_espec) %>%
fit(data = taxi_entrenar)
#> ══ Workflow [trained] ════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: decision_tree()
#>
#> ── Preprocessor ──────────────────────────────────────────────────────
#> propina ~ .
#>
#> ── Model ─────────────────────────────────────────────────────────────
#> n= 8000
#>
#> node), split, n, loss, yval, (yprob)
#> * denotes terminal node
#>
#> 1) root 8000 616 si (0.92300000 0.07700000)
#> 2) distancia>=14.12 2041 68 si (0.96668300 0.03331700) *
#> 3) distancia< 14.12 5959 548 si (0.90803826 0.09196174)
#> 6) distancia< 5.275 5419 450 si (0.91695885 0.08304115) *
#> 7) distancia>=5.275 540 98 si (0.81851852 0.18148148)
#> 14) compania=Chicago Independents,City Service,otra,Sun Taxi,Taxi Affiliation Services,Taxicab Insurance Agency Llc 478 68 si (0.85774059 0.14225941) *
#> 15) compania=Flash Cab 62 30 si (0.51612903 0.48387097)
#> 30) dia=Jue 12 2 si (0.83333333 0.16666667) *
#> 31) dia=Lun,Mar,Mie,Vie,Sab,Dom 50 22 no (0.44000000 0.56000000)
#> 62) distancia>=11.77 14 4 si (0.71428571 0.28571429) *
#> 63) distancia< 11.77 36 12 no (0.33333333 0.66666667) *
Corre el “chunk” arbol_flujo
en tu archivo .qmd
.
Edita el codigo para crear un flujo con un modelo que tú elijas
Reto: ¿Que otros “preprocesadores”, aparte de formulas, podemos usar en workflow
?
05:00
¿Como usar su nuevo modelo arbol_flujo
?
Corre:
predict(arbol_flujo, new_data = taxi_prueba)
¿Que resultado te dio?
03:00
Corre:
augment(arbol_flujo, new_data = taxi_prueba)
¿Que resultado te dio?
03:00
new_data
) y los resultados siempre var a ser el mismo¿Como podemos entender nuestro nuevo modelo arbol_flujo
?
¿Como podemos entender nuestro nuevo modelo arbol_flujo
?
Puedes extraer varios componentes de tu flujo usando las funciones que empiezan con extract_*()
⚠️ ¡Nunca trate de predecir usando los componentes extraídos!
¿Como podemos entender nuestro nuevo modelo arbol_flujo
?
Puedes usar tu flujo ajustado para obtener explicaciones del modelo o de las predicciones:
Para aprender más: https://www.tmwr.org/explain.html
Extrae el “motor” del modelo de tu flujo y examínalo
05:00
flowchart LR ad[Todos\nlos datos] style ad fill:#fff,stroke:#666,color:#000 tr[Entrenamiento] style tr fill:#FBE9BF,stroke:#666,color:#000 ts[Prueba] style ts fill:#E5E7FD,stroke:#666,color:#000 ad --> tr ad --> ts rs[Remuestreo] style rs fill:#fff,stroke:#eee,color:#ddd tr --> dt lg[Regresión\nlogística] style lg fill:#fff,stroke:#eee,color:#ddd rs --> lg dt[Arbol de\nDecisión] style dt fill:#FDF4E3,stroke:#666,color:#000 rs --> dt rf[Bosque\nAleatorio] style rf fill:#fff,stroke:#eee,color:#ddd rs --> rf sm[Seleccionar\nmodelo] style sm fill:#fff,stroke:#eee,color:#ddd lg --> sm dt --> sm rf --> sm fm[Entrenar modelo\nselecionado] style fm fill:#fff,stroke:#eee,color:#ddd sm --> fm tr --> fm vm[Verificar la\ncalidad] style vm fill:#fff,stroke:#eee,color:#ddd fm --> vm ts --> vm