開始使用免費開始

帶有群組效應的資料分割

在執行任何模型之前,你需要先把資料分成訓練集與測試集。這個資料集有個小麻煩,表示你不能只是直接呼叫 sdf_random_split()。麻煩在於,同一位歌手的所有曲目應該落在同一個集合中;如果某位歌手的曲目同時用來訓練模型,之後又出現在測試集中,你的模型看起來會比實際更準確。

處理方式是先只對歌手 ID 進行分割,然後再把這些已分割的 ID 與原始資料做 inner join。請注意,用於分割時 artist_idartist_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_tblartist_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
  ___
編輯並執行程式碼