簡體   English   中英

在R中存儲/保存預測模型

[英]Store/Save Predictive Model in R

我想存儲以下代碼的輸出。 我嘗試了列表,數據框和向量,但無法存儲它。

Model<-lda( y ~ Trend+Class+F1+F4+ATR+macd_signal+macd1+F5 ,data=x)


> Model

Call:
lda(y ~ Trend + Class + F1 + F4 + ATR + macd_signal + macd1 + 
    F5, data = x)

Prior probabilities of groups:

     LOSS    PROFIT 
0.4981818 0.5018182 

Group means:

       TrendBull   ClassUP       F1       F4      ATR   macd_signal       macd1       F5
LOSS   0.5450122 0.3990268 1480.451 1481.672 11.64657 -0.0005850151  0.01542818 1478.567
PROFIT 0.5000000 0.4082126 1487.280 1486.707 12.25799 -0.0304256947 -0.03845741 1489.620

Coefficients of linear discriminants:

                     LD1
TrendBull   -0.033267160

ClassUP      0.151291378

F1          -0.003215276

F4          -0.042431558

ATR          0.082615338

macd_signal  0.090182055

macd1        2.637216918

F5           0.045956343

> class(Model)

[1] "lda"

> typeof(Model)

[1] "list"

有關如何存儲的任何想法?

您可以做的一件事是將模型輸出保存在自己的文件中。 R對象可以保存為rds文件。 例如:

saveRDS(model, file = "your path/filename.rds")

然后,您可以將對象加載到R環境中:

mod <- readRDS("your path/filename.rds")

TL; DR: Model本身就是一個包含所有所需信息的列表。 運行str(Model)查看其組件。 但是,您也可以只提取所需的信息並將其保存在列表中,如下所示:

my_lda_smry = function(x) {
  list(Call=x$call, Prior=x$prior, `Group Means`=x$means, 
     Coefficients=x$scaling,
     `Proportion of Trace`= round(x$svd^2/sum(x$svd^2), 4))
}

Model_summary = my_lda_smry(Model)

請參閱下面的其他說明。



Model是一個lda模型對象,它是一個包含lda函數所有輸出的列表。 鍵入Model ,R調用該lda模型對象的print “方法”,這是一個名為print.lda的函數(在控制台中輸入Model相當於鍵入print(Model) ,它運行print.lda函數你的模型對象)。 因此,您可以查看模型對象和print.lda函數以查看它們正在執行的操作,然后從中創建自己的摘要對象。

查看print.lda代碼

print.lda的代碼如下。 請注意, print.lda從模型對象獲取其每個輸出。 例如, x$prior是每個組的先驗概率。 我們只需要創建一個函數來提取我們想要的每個元素。

getAnywhere(print.lda)
 function (x, ...) { if (!is.null(cl <- x$call)) { names(cl)[2L] <- "" cat("Call:\\n") dput(cl, control = NULL) } cat("\\nPrior probabilities of groups:\\n") print(x$prior, ...) cat("\\nGroup means:\\n") print(x$means, ...) cat("\\nCoefficients of linear discriminants:\\n") print(x$scaling, ...) svd <- x$svd names(svd) <- dimnames(x$scaling)[[2L]] if (length(svd) > 1L) { cat("\\nProportion of trace:\\n") print(round(svd^2/sum(svd^2), 4L), ...) } invisible(x) } 

查看lda返回的模型對象

現在讓我們創建一個模型並查看模型對象。 我們實際上不需要在這里查看模型對象,因為print.lda告訴我們需要知道什么。 但是,如果要提取包中提供的標准提取函數未返回的信息,則了解模型對象的結構會很有幫助。 請注意,模型對象是包含有關模型的各種類型信息的列表。

library(MASS)

model = lda(mpg ~ wt + hp + carb + cyl, data=mtcars)

str(model)
 List of 10 $ prior : Named num [1:25] 0.0625 0.0312 0.0312 0.0312 0.0312 ... ..- attr(*, "names")= chr [1:25] "10.4" "13.3" "14.3" "14.7" ... $ counts : Named int [1:25] 2 1 1 1 1 2 1 1 1 1 ... ..- attr(*, "names")= chr [1:25] "10.4" "13.3" "14.3" "14.7" ... $ means : num [1:25, 1:4] 5.34 3.84 3.57 5.34 3.57 ... ..- attr(*, "dimnames")=List of 2 .. ..$ : chr [1:25] "10.4" "13.3" "14.3" "14.7" ... .. ..$ : chr [1:4] "wt" "hp" "carb" "cyl" $ scaling: num [1:4, 1:4] 4.668 -0.0115 -3.6744 -3.8415 4.2625 ... ..- attr(*, "dimnames")=List of 2 .. ..$ : chr [1:4] "wt" "hp" "carb" "cyl" .. ..$ : chr [1:4] "LD1" "LD2" "LD3" "LD4" $ lev : chr [1:25] "10.4" "13.3" "14.3" "14.7" ... $ svd : num [1:4] 10.51 3.42 1.49 1.05 $ N : int 32 $ call : language lda(formula = mpg ~ wt + hp + carb + cyl, data = mtcars) $ terms :Classes 'terms', 'formula' language mpg ~ wt + hp + carb + cyl .. ..- attr(*, "variables")= language list(mpg, wt, hp, carb, cyl) .. ..- attr(*, "factors")= int [1:5, 1:4] 0 1 0 0 0 0 0 1 0 0 ... .. .. ..- attr(*, "dimnames")=List of 2 .. .. .. ..$ : chr [1:5] "mpg" "wt" "hp" "carb" ... .. .. .. ..$ : chr [1:4] "wt" "hp" "carb" "cyl" .. ..- attr(*, "term.labels")= chr [1:4] "wt" "hp" "carb" "cyl" .. ..- attr(*, "order")= int [1:4] 1 1 1 1 .. ..- attr(*, "intercept")= int 1 .. ..- attr(*, "response")= int 1 .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv> .. ..- attr(*, "predvars")= language list(mpg, wt, hp, carb, cyl) .. ..- attr(*, "dataClasses")= Named chr [1:5] "numeric" "numeric" "numeric" "numeric" ... .. .. ..- attr(*, "names")= chr [1:5] "mpg" "wt" "hp" "carb" ... $ xlevels: Named list() - attr(*, "class")= chr "lda" 

提取我們想要的信息並將其返回列表

下面的函數只是模仿print.lda所做的,但將結果保存在列表中,而不是將其打印到屏幕上:

my_lda_smry = function(x) {
  list(Call=x$call, Prior=x$prior, `Group Means`=x$means, 
     Coefficients=x$scaling,
     `Proportion of Trace`= round(x$svd^2/sum(x$svd^2), 4))
}

現在運行函數:

m.smry = my_lda_smry(model)
 $Call lda(formula = mpg ~ wt + hp + carb + cyl, data = mtcars) $Prior 10.4 13.3 14.3 14.7 15 15.2 15.5 15.8 16.4 17.3 17.8 18.1 18.7 19.2 19.7 21 0.06250 0.03125 0.03125 0.03125 0.03125 0.06250 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.03125 0.06250 0.03125 0.06250 21.4 21.5 22.8 24.4 26 27.3 30.4 32.4 33.9 0.06250 0.03125 0.06250 0.03125 0.03125 0.03125 0.06250 0.03125 0.03125 $`Group Means` wt hp carb cyl 10.4 5.3370 210.0 4.0 8 13.3 3.8400 245.0 4.0 8 14.3 3.5700 245.0 4.0 8 14.7 5.3450 230.0 4.0 8 15 3.5700 335.0 8.0 8 15.2 3.6075 165.0 2.5 8 15.5 3.5200 150.0 2.0 8 15.8 3.1700 264.0 4.0 8 16.4 4.0700 180.0 3.0 8 17.3 3.7300 180.0 3.0 8 17.8 3.4400 123.0 4.0 6 18.1 3.4600 105.0 1.0 6 18.7 3.4400 175.0 2.0 8 19.2 3.6425 149.0 3.0 7 19.7 2.7700 175.0 6.0 6 21 2.7475 110.0 4.0 6 21.4 2.9975 109.5 1.5 5 21.5 2.4650 97.0 1.0 4 22.8 2.7350 94.0 1.5 4 24.4 3.1900 62.0 2.0 4 26 2.1400 91.0 2.0 4 27.3 1.9350 66.0 1.0 4 30.4 1.5640 82.5 2.0 4 32.4 2.2000 66.0 1.0 4 33.9 1.8350 65.0 1.0 4 $Coefficients LD1 LD2 LD3 LD4 wt 4.66796895 4.262520788 0.35307402 -0.67013561 hp -0.01149489 0.005714994 0.04376624 0.01627358 carb -3.67441417 -0.581458148 -0.44870373 -0.83522067 cyl -3.84149993 -0.911662765 -1.52258858 0.37350681 $`Proportion of Trace` [1] 0.8804 0.0930 0.0178 0.0088 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM