1. 学ぶ
  2. /
  3. コース
  4. /
  5. sparklyr を使った Spark 入門(R)

Connected

演習

勾配ブースティング木:モデルの構築

勾配ブースティング(Gradient Boosting)は、他のモデルの性能を向上させる手法です。基本的な考え方はこうです。まず、単純で計算しやすい弱いモデルを構築します。次に、そのモデルの残差を新たな目的変数として別のモデルを適合させます。元の予測モデルと残差予測モデルを「足し合わせる」ことで、より精度の高いモデルが得られます。この処理を繰り返し、前のモデルの残差を予測する新しいモデルを追加していくことで、モデルはどんどん強化されていきます。

より具体的に説明すると、sparklyr では勾配ブースティング木(Gradient Boosted Trees)が使用されます。これは、弱いモデルとして決定木を用いた勾配ブースティングです。分類問題(目的変数がカテゴリ型)にも回帰問題(目的変数が連続型)にも使用できます。今回のような回帰問題では、各データ点の当てはまりの悪さを残差で測定します。

決定木については、Supervised Learning in R: Classification および Supervised Learning in R: Regression コースでさらに詳しく解説されています。後者のコースでは勾配ブースティングも扱っています。

sparklyr で勾配ブースティング木モデルを実行するには、ml_gradient_boosted_trees() を呼び出します。この関数の使い方は、本章の最初の演習で説明しました。

指示

100 XP

Spark の接続は spark_conn として作成済みです。また、Spark に保存されたトラックのメタデータとティンバーデータを結合・フィルタリングした Spark テーブルに紐付けられたtibble は、track_data_to_model_tbl として事前に定義されています。

  • 特徴量として使用する "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 に代入します。