Chia dữ liệu có tính đến hiệu ứng theo nhóm
Trước khi chạy bất kỳ mô hình nào, bạn cần chia dữ liệu thành hai phần: training và testing. Bộ dữ liệu này có một điểm phức tạp, nên bạn không thể chỉ đơn giản gọi sdf_random_split(). Cụ thể, mọi track của cùng một nghệ sĩ phải nằm trong cùng một tập; mô hình sẽ có vẻ chính xác hơn thực tế nếu track của một nghệ sĩ vừa được dùng để huấn luyện vừa xuất hiện trong tập testing.
Mẹo xử lý là chỉ phân chia trên tập artist ID, rồi inner join các ID đã được phân chia đó với bộ dữ liệu gốc. Lưu ý artist_id đáng tin cậy hơn artist_name khi phân chia, vì một số nghệ sĩ dùng các biến thể tên khác nhau giữa các track. Ví dụ, Duke Ellington đôi khi có "Duke Ellington" là tên nghệ sĩ, nhưng lúc khác lại là "Duke Ellington & His Orchestra", hoặc một vài biến thể chính tả khác.
Bài tập này là một phần của khóa học
Nhập môn Spark với sparklyr trong R
Hướng dẫn bài tập
Một kết nối Spark đã được tạo sẵn là spark_conn. Một tibble gắn với dữ liệu metadata/timbre của track đã được kết hợp và lọc, lưu trên Spark, đã được định nghĩa sẵn là track_data_tbl.
- Chia các artist ID thành hai tập training và testing, gán kết quả vào
training_testing_artist_ids.- Chọn cột
artist_idcủatrack_data_tbl. - Lấy các dòng duy nhất.
- Chia theo tỷ lệ 70% training và 30% testing.
- Chọn cột
- Inner join tập training với
track_data_tbltheoartist_id, gán kết quả vàotrack_data_to_model_tbl. - Inner join tập testing với
track_data_tbltheoartist_id, gán kết quả vàotrack_data_to_predict_tbl.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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
___