梯度提升树:建模
梯度提升是一种用来提升其他模型性能的技术。核心思路是先运行一个较弱但计算简单的模型。然后用该模型的残差替换原始响应值,再拟合另一个模型。将原始的响应预测模型与新的残差预测模型"相加",就能得到更准确的模型。您可以反复执行这个过程:不断训练新模型去预测前一轮模型的残差,并把结果加总进去。随着迭代次数的增加,模型会越来越强。
更具体地说,sparklyr 使用的是梯度提升树,也就是以决策树作为"弱但易计算"的基学习器进行梯度提升。它既可用于分类问题(响应变量为类别型),也可用于回归问题(响应变量为连续型)。在这里要用到的回归场景中,衡量拟合好坏的指标就是残差。
关于决策树,可参考课程 Supervised Learning in R: Classification 和 Supervised Learning in R: Regression 的更深入讲解。后者也涵盖了梯度提升。
在 sparklyr 中运行梯度提升树模型,请调用 ml_gradient_boosted_trees()。本章第一个练习已介绍过该函数的用法。
本练习是课程的一部分
R 中使用 sparklyr 的 Spark 入门
练习说明
我们已为您创建好名为 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。
- 调用
交互式实操练习
通过完成这段示例代码来试试这个练习。
# track_data_to_model_tbl has been pre-defined
track_data_to_model_tbl
feature_colnames <- track_data_to_model_tbl %>%
# Get the column names
___ %>%
# Limit to the timbre columns
___(___(___))
feature_colnames
# Create the formula for the model
year_formula <- ___
gradient_boosted_trees_model <- track_data_to_model_tbl %>%
# Run the gradient boosted trees model
___