(PDP)可視化で得られた考察を反映するはじめにtidymodelsに属するparsnipパッケージを用いて機械学習を行った場合、大本のパッケージで学習した場合と異なる構造のオブジェクトが返ります。xgboost::xgboost関数で学習した結果はxgb.Boosterクラスを持つオブジェクトです。一方でparsnip::fit関数を用いてXGBoostの学習を行った結果は、_xgb.Boosterクラスとmodel_fitクラスを持つオブジェクトです。このため、後者はxgb.Boosterクラス用に用意された様々な関数を適用することができません。Plotを行うpdp::partialなどがあります。これらはブラックボックスモデルなXGBoostの結果を解釈する上で非常に重要な関数です。簡単に使える方法を探ることにしました1。結論としては学習結果の"fit"要素が、xgboost本来の学習結果ですので、これを取り出せば様々な関数を利用できます。いうわけで試してみましょう。dplyr)XGBoostによる学習ggplot2::diamondsデータセットについて、価格を予想するモデルを構築します。tr)ここで、dplyr::glimpse(fit_xgb)すると、学習結果の構造を見ることができます。tr$Price)と比較してみて下さい。fit_xgb$fitと同じ構造をしていることが分かります。これにはxgboost::xgb.importance関数を用います。xgboost::xgb.importance関数はxgb.Boosterクラスオブジェクトを受けとるように設計されているので、fit_xgbそのものではなく、fit_xgb$fitを食わせてやりましょう。価格に大きく影響することが分かります。ついてPDPを可視化してみます。pdp::partial関数もparsnip::fit関数の結果を受け取れないので、fit_xgb$fitを食わせます。計算時間を節約するため、train引数には訓練データの2割を与えることにしました。pred.varには注目したい変数であるcaratを指定します。Expectationを表示するか。"ggplot")どうやら、2カラット以上では、大きさだけで価格が決まらなくなるようです。yにも注目して2変量を用いたPDPを作成してみましょう。すると、同じ大きさでも幅広なダイヤモンドの方が高値になる傾向が伺えます。大きなダイヤモンドは指輪にする時に、楕円状のテーブルを持っていた方が良いのかも知れません。"ggplot")可視化で得られた考察を反映する大きなダイヤモンドは指輪にする時に、楕円状のテーブルを持っていた方が良いのかも知れません。考えたので、縦横比を特徴量として追加してみましょう。tr2)そしてmetricsを計算し、前回の学習結果と比較してみます。0.0835僅かながら、rmseとmaeは減少し、rsqは上昇しました。読みがあたりましたね!工夫すれば、vip::vip関数やpdp::partial関数を適用できるが、簡単ではない。Dropout)↩︎ShareHome。