Daten mit Gruppeneffekt partitionieren
Bevor du Modelle trainieren kannst, musst du deine Daten in Trainings- und Testsets aufteilen. Bei diesem Datensatz gibt es jedoch eine Besonderheit, sodass du nicht einfach sdf_random_split() auf den gesamten Datensatz anwenden solltest. Der Grund: Alle Tracks eines Künstlers sollten im selben Set landen. Wenn Tracks eines Künstlers zum Trainieren verwendet werden und derselbe Künstler im Testset auftaucht, wirkt dein Modell genauer, als es tatsächlich ist.
Der Trick: Partitioniere nur die Künstler-IDs und verknüpfe diese partitionierten IDs anschließend per Inner Join mit dem ursprünglichen Datensatz. Beachte, dass artist_id für die Partitionierung verlässlicher ist als artist_name, da manche Künstler ihren Namen zwischen Tracks variieren. Duke Ellington erscheint zum Beispiel manchmal als "Duke Ellington", ein anderes Mal als "Duke Ellington & His Orchestra" oder mit einer der mehreren Schreibvarianten.
Diese Übung ist Teil des Kurses
Einführung in Spark mit sparklyr in R
Anleitung zur Übung
Es wurde bereits eine Spark-Verbindung als spark_conn erstellt. Ein Tibble, das mit den kombinierten und gefilterten Track-Metadaten/den Timbre-Daten in Spark verknüpft ist, ist als track_data_tbl vordefiniert.
- Partitioniere die Künstler-IDs in Trainings- und Testsets und weise das Ergebnis
training_testing_artist_idszu.- Wähle die Spalte
artist_idaustrack_data_tblaus. - Ermittle die eindeutigen Zeilen.
- Partitioniere dies in 70 % Training und 30 % Testing.
- Wähle die Spalte
- Führe einen Inner Join des Trainingsdatensatzes mit
track_data_tblanhand vonartist_iddurch und weise das Ergebnistrack_data_to_model_tblzu. - Führe einen Inner Join des Testdatensatzes mit
track_data_tblanhand vonartist_iddurch und weise das Ergebnistrack_data_to_predict_tblzu.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# track_data_tbl has been pre-defined
track_data_tbl
training_testing_artist_ids <- track_data_tbl %>%
# Select the artist ID
___ %>%
# Get distinct rows
___ %>%
# Partition into training/testing sets
___
track_data_to_model_tbl <- track_data_tbl %>%
# Inner join to training partition
___
track_data_to_predict_tbl <- track_data_tbl %>%
# Inner join to testing partition
___