帶有群組效應的資料分割
在執行任何模型之前,你需要先把資料分成訓練集與測試集。這個資料集有個小麻煩,表示你不能只是直接呼叫 sdf_random_split()。麻煩在於,同一位歌手的所有曲目應該落在同一個集合中;如果某位歌手的曲目同時用來訓練模型,之後又出現在測試集中,你的模型看起來會比實際更準確。
處理方式是先只對歌手 ID 進行分割,然後再把這些已分割的 ID 與原始資料做 inner join。請注意,用於分割時 artist_id 比 artist_name 更可靠,因為有些歌手在不同曲目之間會使用名字的變體。舉例來說,Duke Ellington 有時候的藝人名稱是 "Duke Ellington",但有時候是 "Duke Ellington & His Orchestra",或其他數種拼寫變體。
本練習屬於課程
使用 R 的 sparklyr:Spark 入門
練習說明
已為你建立 spark_conn 這個 Spark 連線。已在 Spark 中預先定義一個附掛於合併且過濾後之曲目中繼資料/音色資料的 tibble,名為 track_data_tbl。
- 將歌手 ID 分割為訓練集與測試集,並將結果指定為
training_testing_artist_ids。- 選取
track_data_tbl的artist_id欄位。 - 取得不重複的列。
- 將其分割為 70% 訓練與 30% 測試。
- 選取
- 以
artist_id為鍵,將訓練資料集與track_data_tbl進行 inner join,並將結果指定為track_data_to_model_tbl。 - 以
artist_id為鍵,將測試資料集與track_data_tbl進行 inner join,並將結果指定為track_data_to_predict_tbl。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# 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
___