[英]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.