Gradient boosted trees: modelleren
Gradient boosting is een techniek om de prestaties van andere modellen te verbeteren. Het idee is dat je een zwak maar snel te berekenen model draait. Daarna vervang je de responswaarden door de residuen van dat model en pas je nog een model toe. Door het oorspronkelijke model voor de respons te “tellen bij” het nieuwe model dat de residuen voorspelt, krijg je een nauwkeuriger model. Dit proces kun je blijven herhalen: je traint steeds nieuwe modellen op de residuen van de vorige modellen en telt de resultaten op. Bij elke iteratie wordt het model sterker.
Als concreet voorbeeld gebruikt sparklyr gradient boosted trees: gradient boosting met beslissingsbomen als het zwakke maar snelle basismodel. Deze kun je gebruiken voor zowel classificatieproblemen (waar de responsvariabele categorisch is) als regressieproblemen (waar de responsvariabele continu is). In het regressiegeval, zoals je hier doet, is de maat voor hoe slecht een punt is gefit het residu.
Beslissingsbomen komen uitgebreider aan bod in de cursussen Supervised Learning in R: Classification en Supervised Learning in R: Regression. In die laatste cursus komt ook gradient boosting aan bod.
Om een gradient boosted trees-model in sparklyr te draaien, roep je ml_gradient_boosted_trees() aan. Het gebruik van deze functie is besproken in de eerste oefening van dit hoofdstuk.
Deze oefening maakt deel uit van de cursus
Introductie tot Spark met sparklyr in R
Oefeninstructies
Er is al een Spark-verbinding voor je aangemaakt als spark_conn. Een tibble die is gekoppeld aan de gecombineerde en gefilterde trackmetadata/timbre-gegevens in Spark is vooraf gedefinieerd als track_data_to_model_tbl.
- Haal de kolommen op die de string
"timbre"bevatten om als features te gebruiken.- Gebruik
colnames()om de kolomnamen vantrack_data_to_model_tblop te halen. Let op:names()geeft je hier niet wat je nodig hebt. - Gebruik
str_subset()om de kolommen te filteren. - Het
pattern-argument van die functie moetfixed("timbre")zijn. - Ken het resultaat toe aan
feature_colnames.
- Gebruik
- Maak de
formulavoor het model metreformulate().- Het argument
termlabels(inputs van de formule) moetfeature_colnameszijn. - Het argument
response(output van de formule) moet"year"zijn. - Ken het resultaat toe aan
year_formula. - Door
reformulate()zo te gebruiken, worden alle variabelen infeature_colnamesmet een+gecombineerd tot de rechterkant van deformula. Dit levert een formule opyear ~ timbre1 + timbre2 + ... + timbre12, die de relatie tussen de variabelen definieert die in het model worden opgenomen.
- Het argument
- Draai het gradient boosting-model.
- Roep
ml_gradient_boosted_trees()aan met de door jou gemaakteyear_formulaals enige argument. - Ken het resultaat toe aan
gradient_boosted_trees_model.
- Roep
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# track_data_to_model_tbl has been pre-defined
track_data_to_model_tbl
feature_colnames <- track_data_to_model_tbl %>%
# Get the column names
___ %>%
# Limit to the timbre columns
___(___(___))
feature_colnames
# Create the formula for the model
year_formula <- ___
gradient_boosted_trees_model <- track_data_to_model_tbl %>%
# Run the gradient boosted trees model
___