簡體   English   中英

還原轉換預處理插入符號

[英]Revert transformation preprocess caret

我將數據轉換為符合線性模型(正態分布)的要求:

d.reg1 = d.reg %>% preProcess("YeoJohnson") %>% predict(d.reg) 

調整后的模型:

fit = lm(log10(Qmld)~log10(Peq750), data = d.reg1) #potential regression

預測數據:

a=10^fit$coefficients[1]
b=fit$coefficients[2]

d.reg1$Qmld_predita=a*d.reg1$Peq750^b 

由於該模型適合轉換后的數據並且對我沒有物理意義,因此我如何才能d.reg1$Qmld_predita

這是一個可以基於所選初始轉換(例如,此處初始轉換為c("scale", "center")修改的函數的模型。

library(tidyverse)

revPredict <- function(preproc, data, digits=0) {
  data %>%
    select(one_of(preproc$mean %>% names)) %>%
    map2_df(preproc$std, ., function(sig, dat) dat * sig) %>%
    map2_df(preproc$mean, ., function(mu, dat) dat + mu)
}

revPredict(preprocess_params, df_needing_reverse_transformation)

自問問題以來已經有六個多月了,我想您已經找到解決這個問題的方法,但是鑒於此處存在類似的問題,它仍然可能引起人們的興趣。


要舍入值,請將第二個map2_df的輸出通過map2_df傳遞到此:

    mutate_if(is.numeric,funs(round(.,digits = digits)))

這是另一個補充,如果您縮放到0-1,則可以使用它進行逆變換。 對深度學習有用

revPredict <- function(preproc, data,digits=0,range = F) {
   if (range == T){
     data<-data %>%
       select(one_of(dimnames(preproc$ranges)[[2]])) %>%
       map2_df(preproc$ranges[2,]-preproc$ranges[1,], ., function(min_max, dat) min_max* dat)  %>%
       map2_df(preproc$ranges[1,], ., function(min, dat) min + dat) %>%
      mutate_if(is.numeric,funs(round(.,digits = digits)))
    return(data)
    }
  data<- data %>%
    select(one_of(names(preproc$mean))) %>%
    map2_df(preproc$std, ., function(sig, dat) dat * sig)  %>%
    map2_df(preproc$mean, ., function(mu, dat) dat + mu) %>%
    mutate_if(is.numeric,funs(round(.,digits = digits)))
  return(data)
}

暫無
暫無

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

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