1

161 個の観測値を持つ 151 個の変数を含むデータ セットに対して、次の操作を実行しました。

> library(DAAG)
> fit <- lm(RT..seconds.~., data=cadets)
> cv.lm(df = cadets, fit, m = 10)

そして、次の結果を得ました: -

fold 1 
Observations in test set: 16 
                  7     11     12      24     33    38      52     67     72
Predicted      49.6   44.1   26.4    39.8   53.3 40.33    47.8   56.7   58.5
cvpred        575.0 -113.2  640.7 -1045.8  876.7 -5.93  2183.0 -129.7  212.6
RT..seconds.   42.0   44.0   44.0    45.0   45.0 46.00    49.0   56.0   58.0
CV residual  -533.0  157.2 -596.7  1090.8 -831.7 51.93 -2134.0  185.7 -154.6

私がやりたいのは、予測結果を実際の実験結果と比較することです。そのため、2 つのグラフを相互にプロットして、それらがどれほど類似しているかを示すことができます。cvpred ではなく、Predicted 行の値を予測結果として使用することでこれを行うと思いますか?

キャレットパッケージでまったく同じことを実行したときに、予測値と観測値が互いにはるかに異なることが判明したため、これを尋ねるだけです:-

library(caret) ctrl <- trainControl(method = "cv", savePred=T, classProb=T) mod <- train(RT..seconds.~., data=cadets, method = "lm", trControl = ctrl) mod$pred

        pred obs rowIndex .parameter Resample
1      141.2  42        6       none   Fold01
2     -504.0  42        7       none   Fold01
3     1196.1  44       16       none   Fold01
4       45.0  45       27       none   Fold01
5      262.2  45       35       none   Fold01
6      570.9  52       58       none   Fold01
7     -166.3  53       61       none   Fold01
8    -1579.1  59       77       none   Fold01
9     2699.0  60       79       none   Fold01

最初は 1664 個の変数から開始し、ランダム フォレストを使用してモデルを減らしたため、モデルはこのように不正確であってはなりません。変数の重要度が 1 より大きい変数のみが使用され、データセットが 162 * 1664 から 162 に大幅に減少しました。 * 151.

誰かが私にこれを説明できたら、私は感謝します、ありがとう

4

1 に答える 1

5

ここで混乱する部分はほとんどないと思います。

の「予測」セクションcv.lmは、クロス検証の結果に対応していません。crossvalidaiton に興味がある場合は、「cvpred」の結果を確認する必要があります。「Predicted」は、すべてのデータを使用したモデル フィットからの予測に対応します。

予測と cvpredictions の間にこのような大きな差がある理由は、クロスバリデーションが非常に重要である理由を説明する必要がある、最終的なモデルが過適合であるためである可能性があります。

モデルのフィッティングがcv.lm間違っていると思います。cv.lm(df = cadets, RT..seconds.~., m = 10)パッケージを使用したことはありませんが、オブジェクトではなく次のようなものを渡したいと思いますfit。上記の例で cvpred と Predicted のオプションに大きな違いが見られる理由はわかりませんが、これらの結果は、モデルを渡すと、各 CV のすべてのデータに適合したモデルを使用することになることを示しています。折り畳み:

library(DAAG)
fit <- lm(Sepal.Length ~ ., data=iris)
mod1 <- cv.lm(df=iris,fit,m=10)
mod2 <- cv.lm(df=iris,Sepal.Length ~ .,m=10)
> sqrt(mean((mod1$cvpred - mod1$Sepal.Length)^2))
[1] 0.318
> sqrt(mean((mod2$cvpred - mod2$Sepal.Length)^2))
[1] 5.94
> sqrt(mean((mod1$cvpred - mod1$Predicted)^2))
[1] 0.0311
> sqrt(mean((mod2$cvpred - mod2$Predicted)^2))
[1] 5.94

結果にこのような違いがあるのはcaret、「予測」セクションを見ていたためです。「cvpred」はキャレットと密接に並べる必要があります (ただし、cv 結果にインデックスを作成するようにしてください)。「予測」結果をキャレットと並べたい場合は、次のようなものを使用して予測を取得する必要がありますpredict(mod,cadets)

于 2013-12-09T15:49:33.270 に答える