11

クラス lm のオブジェクトを「圧縮」して、ディスクに保存し、後でロードして predict.lm で使用できるようにする方法はありますか?

保存時に最大 142 MB になる lm オブジェクトがあり、線形予測を行うために predict.lm が元の観測値/適合値/残差などのすべてを必要としているとは信じがたいです。保存するモデルを小さくするために情報を削除できますか?

一部の変数 (fitted.values、residuals など) を NA に設定してみましたが、保存されるファイル サイズには影響がないようです。

4

3 に答える 3

6

いくつかのこと:

  1. この質問は本当に重複しています。

  2. 狭義model=FALSEには、別の質問ですでに答えられているように。

  3. 広い意味では、実際には行列とベクトルの乗算を行うだけなので、予測のベクトルだけpredict(fit, newdata)を保存して、それを行列で乗算できます。

  4. 代替のフィッティング機能があります。以下はfastLm()RcppArmadilloの例で、これもたまたま高速です。

説明については、以下を参照してください。

R> library(RcppArmadillo)
Loading required package: Rcpp
R> flm <- fastLm(Volume ~ Girth, data=trees)
R> predict(flm, newdata=trees[1:5,])             ## can predict as with lm()
[1]  5.10315  6.62291  7.63608 16.24803 17.26120
R> object.size(flm)                              ## tiny object size ...
3608 bytes
R> stdlm <- lm(Volume ~ Girth, data=trees)
R> object.size(stdlm)                            ## ... compared to what lm() has
20264 bytes
R> stdlm <- lm(Volume ~ Girth, data=trees, model=FALSE)
R> object.size(stdlm)                            ## ... even when model=FALSE
15424 bytes
R> 
于 2013-03-07T01:30:54.300 に答える
6

biglmモデルを適合させるために使用できbiglmます。モデル オブジェクトは lm モデル オブジェクトよりも小さくなります。predict.biglm予測値を返す newdata 設計行列を渡すことができる関数の作成を使用できます。

別のオプションは、saveRDS複数のオブジェクトを保存できる保存とは異なり、オーバーヘッドが少なく、単一のオブジェクトであるため、わずかに小さいように見えるファイルを保存するために使用することです。

 library(biglm)
 m <- lm(log(Volume)~log(Girth)+log(Height), trees)
 mm <- lm(log(Volume)~log(Girth)+log(Height), trees, model = FALSE, x =FALSE, y = FALSE)
 bm <- biglm(log(Volume)~log(Girth)+log(Height), trees)
 pred <- predict(bm, make.function = TRUE)
 save(m, file = 'm.rdata')
 save(mm, file = 'mm.rdata')
 save(bm, file = 'bm.rdata')
 save(pred, file = 'pred.rdata')
 saveRDS(m, file = 'm.rds')
 saveRDS(mm, file = 'mm.rds')
 saveRDS(bm, file = 'bm.rds')
 saveRDS(pred, file = 'pred.rds')

 file.info(paste(rep(c('m','mm','bm','pred'),each=2) ,c('.rdata','.rds'),sep=''))
#             size isdir mode mtime               ctime               atime               exe
#  m.rdata    2806 FALSE  666 2013-03-07 11:29:30 2013-03-07 11:24:23 2013-03-07 11:29:30  no
#  m.rds      2798 FALSE  666 2013-03-07 11:29:30 2013-03-07 11:29:30 2013-03-07 11:29:30  no
#  mm.rdata   2113 FALSE  666 2013-03-07 11:29:30 2013-03-07 11:24:28 2013-03-07 11:29:30  no
#  mm.rds     2102 FALSE  666 2013-03-07 11:29:30 2013-03-07 11:29:30 2013-03-07 11:29:30  no
#  bm.rdata    592 FALSE  666 2013-03-07 11:29:30 2013-03-07 11:24:34 2013-03-07 11:29:30  no
#  bm.rds      583 FALSE  666 2013-03-07 11:29:30 2013-03-07 11:29:30 2013-03-07 11:29:30  no
#  pred.rdata 1007 FALSE  666 2013-03-07 11:29:30 2013-03-07 11:24:40 2013-03-07 11:29:30  no
#  pred.rds    995 FALSE  666 2013-03-07 11:29:30 2013-03-07 11:27:30 2013-03-07 11:29:30  no
于 2013-03-07T00:33:05.633 に答える
4

私は自分の問題を解決したことがわかりました。以下を使用します。

model<-lm(form,data=ct,model=FALSE,x=FALSE,y=FALSE)

モデルのサイズを大幅に縮小しました。

于 2013-03-06T23:53:29.473 に答える