4

データセットに対してさまざまなモデリング アルゴリズムを実行しています。入力変数を一度に 1 つずつ応答にモデル化することで、最良の結果が得られました。

model <- train(y ~ x1 + x2 + ... + xn, ...)

モデルをトレーニングしたら、毎回再実行したくないので、.rdaファイルとして保存しようとしています。ランダム フォレスト モデルのループの例を次に示します (ループよりも優れた方法を自由に提案してください!)。

# data_resp contains my measured responses, one per column
# data_pred contains my predictors, one per column

for (i in 1:ncol(data_resp)) {

  model <- train(data_pred_scale[!is.na(data_resp[, i]), ],
                 data_resp[!is.na(data_resp[, i]), i],
                 method = "rf",
                 tuneGrid = data.frame(.mtry = c(3:6)),
                 nodesize = 3,
                 ntrees = 500)

  save(model, file = paste("./models/model_rf_", names(data_resp)[i], ".rda", sep = ""))

ただし、モデルをロードすると、 と呼ばれmodelます。

モデルを対応する名前で保存して、後で参照するための良い方法が見つかりませんでした。次のように、オブジェクトを文字列に割り当てることができることがわかりました。

assign(paste("./models/model_rf_", names(data_resp)[i], ".rda", sep = ""), train(...))

しかし、オブジェクトを保存するときにオブジェクトを参照する方法がまだ残っています。

save(???, file = ...)

カスタム名でオブジェクトを呼び出す方法がわかりません。

最後に、ロードでも問題が発生しました。試してみましassign("model_name", load("./model.rda"))たが、呼び出された結果のオブジェクトstringは、オブジェクト名「モデル」の文字列を保持するだけになります。


周りを見回すと、関連しているように見えるこの質問が見つかりましたが、それを自分の状況に適用する方法を見つけようとしています。

data_resp(測定された応答)の各列名の名前を含むリストを作成し、 を使用することもできますがlapplytrain()結果のモデルを保持するために新しいオブジェクト名を動的に参照する方法にまだ少し固執しています。

4

4 に答える 4

1

この回答にはかなりの推測が含まれていますが、これが役立つと思います。

# get a vector with the column names in data_resp
modNames <- colnames( data_resp )

# create empty list
models <- as.list( NULL )

# iterate through your columns and assign the result as list members
for( n in modNames )
{
  models[[n]] <- train(data_pred_scale[!is.na(data_resp[, n]), ],  ### this may need modification, can't test without data
                 data_resp[!is.na(data_resp[, n]), n],
                 method = "rf",
                 tuneGrid = data.frame(.mtry = c(3:6)),
                 nodesize = 3,
                 ntrees = 500)
}

# save the whole bunch
save( models, file = "models.rda" )

だけでload( "models.rda )、この 1 つのオブジェクト、すべてのモデルを含むリストを取得し、リスト表記法 (列名として、models[[1]]または列名など) でそれらをアドレス指定できます。models[["first"]].

于 2013-07-21T05:15:32.670 に答える