1. Learn
  2. /
  3. 课程
  4. /
  5. R 中使用 sparklyr 的 Spark 入门

Connected

道练习

梯度提升树:建模

梯度提升是一种用来提升其他模型性能的技术。核心思路是先运行一个较弱但计算简单的模型。然后用该模型的残差替换原始响应值,再拟合另一个模型。将原始的响应预测模型与新的残差预测模型"相加",就能得到更准确的模型。您可以反复执行这个过程:不断训练新模型去预测前一轮模型的残差,并把结果加总进去。随着迭代次数的增加,模型会越来越强。

更具体地说,sparklyr 使用的是梯度提升树,也就是以决策树作为"弱但易计算"的基学习器进行梯度提升。它既可用于分类问题(响应变量为类别型),也可用于回归问题(响应变量为连续型)。在这里要用到的回归场景中,衡量拟合好坏的指标就是残差。

关于决策树,可参考课程 Supervised Learning in R: Classification 和 Supervised Learning in R: Regression 的更深入讲解。后者也涵盖了梯度提升。

在 sparklyr 中运行梯度提升树模型,请调用 ml_gradient_boosted_trees()。本章第一个练习已介绍过该函数的用法。

说明

100 XP

我们已为您创建好名为 spark_conn 的 Spark 连接。基于存储在 Spark 中、已合并并过滤的曲目元数据/音色数据,预先定义了一个名为 track_data_to_model_tbl 的 tibble。

  • 获取包含字符串 "timbre" 的列,作为特征使用。
    • 使用 colnames() 获取 track_data_to_model_tbl 的列名。注意:names() 不能满足需求。
    • 使用 str_subset() 过滤列名。
    • 该函数的 pattern 参数应为 fixed("timbre")。
    • 将结果赋值给 feature_colnames。
  • 使用 reformulate() 为模型创建 formula。
    • termlabels 参数(公式的输入)应为 feature_colnames。
    • response 参数(公式的输出)应为 "year"。
    • 将结果赋值给 year_formula。
    • 以这种方式使用 reformulate() 会用 + 号将 feature_colnames 中的所有变量连接为 formula 的右侧。最终得到的公式形如 year ~ timbre1 + timbre2 + ... + timbre12,用于定义要纳入模型的变量之间的关系。
  • 运行梯度提升模型。
    • 调用 ml_gradient_boosted_trees(),并将刚创建的 year_formula 作为其唯一参数。
    • 将结果赋值给 gradient_boosted_trees_model。