按组效应划分数据
在运行任何模型之前,您需要将数据划分为训练集和测试集。这个数据集有一个特殊之处,因此您不能直接调用 sdf_random_split()。问题在于:同一位艺术家的所有曲目应当出现在同一个集合中。如果将某位艺术家的曲目用于训练模型,而同一艺术家的其他曲目又出现在测试集中,模型的准确率会被高估。
解决方法是只对艺术家 ID 进行划分,然后将这些已划分的 ID 与原始数据集做内连接。请注意,用于划分时,artist_id 比 artist_name 更可靠,因为有些艺术家在不同曲目中会使用名字的不同写法。例如,Duke Ellington 有时的艺术家名是 "Duke Ellington",但有时是 "Duke Ellington & His Orchestra",或者其他拼写变体。
本练习是课程的一部分
R 中使用 sparklyr 的 Spark 入门
练习说明
已经为您创建了一个 Spark 连接 spark_conn。一个附着在 Spark 中已合并且过滤后的曲目信息/音色数据上的 tibble 已预定义为 track_data_tbl。
- 将艺术家 ID 划分为训练集和测试集,并将结果赋给
training_testing_artist_ids。- 选择
track_data_tbl的artist_id列。 - 获取不重复的行。
- 将其划分为 70% 训练集和 30% 测试集。
- 选择
- 将训练数据集按
artist_id与track_data_tbl做内连接,并将结果赋给track_data_to_model_tbl。 - 将测试数据集按
artist_id与track_data_tbl做内连接,并将结果赋给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
___