いくつかの異なる線形モデルを比較したいデータがあります。私はcaTools::sample.split()
を使って1つのトレーニング/テストセットを得ることができます。同じサンプルから異なるテストとトレーニングセットを取得する
同じサンプルの別のトレーニング/テストセットを使用した場合、モデルがどのように変化するかを知りたいと思います。 set.seed()
を使用しない場合は、sample.split
と呼び出すたびに別のセットを取得する必要があります。
私は今、関数に特定の回数を呼び出すためにlapply
を使用しています:
library(data.table)
library(caTools)
dat <- as.data.table(iris)
dat_list <- lapply(1:20, function(z) {
sample_indices <- sample.split(dat$Sepal.Length, SplitRatio = 3/4)
inter <- dat
inter$typ <- "test"
inter$typ[sample_indices] <- "train"
inter$set_no <- z
return(as.data.table(inter))})
と係数を比較する:
coefs <- sapply(1:20, function(z){
m <- lm(Sepal.Length ~ Sepal.Width, data = dat_list[[z]][typ == "train"])
return(unname(m$coefficients))
})
最後の数行を返すように編集することができテストセット(typ=="test"
)の値を予測するときのRMSエラー
もっと良い方法があるのでしょうか?
より良い方法は何ですか?データを複数回に分割する?係数を比較する?問題に近づく?私はあなたが大丈夫だと言うでしょう、そして結果に満足すれば、一緒に移動してください!代わりにk-foldクロスバリデーションに興味があるかもしれません。これはもっと一般的であり、同様の目標を共有しています。あなたは 'キャレット 'を使って自動的にそれを行うことができます。 – Gregor
ありがとう!私はデータを効率的に分割することに興味があります(私の実際のデータセットはかなり大きい)。私はまた、この方法でモデルを比較するための標準的な方法があるかどうかを知りたいと思っています - あなたが言及したk-foldメソッドを調べます。私の統計知識は悲しいかなか貧弱です。 – Gautam