問題タブ [mlr3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - LASSO モデル係数にアクセスして MLR3 (glmnet 学習者) と比較する方法は?
ゴール
- MLR3 を使用して LASSO モデルを作成する
- ネストされた CVを使用して、ハイパーパラメーター (ラムダ) の決定に内部 CV またはブートストラップを使用し、モデルのパフォーマンス評価に外部 CV を使用して (テスト トレイン スピットを 1 つだけ実行する代わりに)、異なるモデル インスタンス間で異なる LASSO 回帰係数の標準偏差を見つけます。
- まだ利用できないテスト データ セットで予測を行います。
問題
- 説明されているネストされた CV アプローチが、以下のコードで正しく実装されているかどうかはわかりません。
- alpha が正しく alpha = 1 のみに設定されているかどうかはわかりません。
- mlr3 でリサンプリングを使用する場合、LASSO ラムダ係数にアクセスする方法がわかりません。(mlr3learners の importance() はまだ LASSO をサポートしていません)
- mlr3 で利用できないテスト セットに可能なモデルを適用する方法がわかりません。
コード
reprex パッケージ(v0.3.0)により 2020-06-11 に作成
編集 1 (LASSO 係数)
ミスユースからのコメントによると、LASSO 係数にはさらにアクセスできます。さらに、モデルを保存して係数にアクセスするには、結果に設定する必要があることがresult$data$learner[[1]]$model$rp$model$glmnet.fit$beta
わかりました。store_models = TRUE
- alpha = 1 に設定しているにもかかわらず、複数の LASSO 係数を取得しました。「最高の」LASSO係数が欲しいです(たとえば、lamda = lamda.minまたはlamda.1seに由来します)。異なる s1、s2、s3、... とはどういう意味ですか? これらは異なるラムダですか?
- さまざまな係数は、実際には、s1、s2、s3、... として示されるさまざまなラムダ値に由来するようです (数値はインデックスです)。「最良の」係数は、最初に「最良の」ラムダのインデックスを見つけることによってアクセスできると思います。
index_lamda.1se = which(ft$lambda == ft$lambda.1se)[[1]]; index_lamda.min = which(ft$lambda == ft$lambda.min)[[1]]
次に、係数のセットを見つけます。「最良の」係数を見つけるためのより簡潔なアプローチは、misuse によるコメントに記載されています。
reprex パッケージ(v0.3.0)により 2020-06-15 に作成
編集 2 (オプションのフォローアップの質問)
ネストされた CV は、複数のモデル間の不一致評価を提供します。この不一致は、外側の CV によって得られる誤差 (RMSE など) として表すことができます。その誤差は小さいかもしれませんが、モデル (外側の CV によってインスタンス化される) からの個々の LASSO 係数 (予測子の重要性) はかなり異なる場合があります。
- mlr3 は、予測変数の定量的重要性における一貫性、つまり、外部 CV によって作成されたモデル間の LASSO 係数の RMSE を記述する機能を提供しますか? または、カスタム関数を作成して、
result$data$learner[[i]]$model$rp$model$glmnet.fit$beta
i = 1、2、3、4、5 を外側の CV の折り畳みとして使用して (misuse によって提案された) LASSO 係数を取得し、一致する係数の RMSE を取得する必要がありますか?