我转换数据以满足线性模型(正态分布)的要求:
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
,因为模型适用于转换后的数据,这对我来说没有任何物理意义?
答案 0 :(得分:2)
这是一个函数的模型,可以根据所选的初始变换进行修改(例如,这里的初始变换是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)
由于问题问题已超过6个月,我认为你已经找到了解决这个问题的方法,但鉴于类似的问题是here,它可能仍然有意义。也是。
要对值进行舍入,请将第二个map2_df
的输出传递给此:
mutate_if(is.numeric,funs(round(.,digits = digits)))
答案 1 :(得分:0)
这是另一个补充,如果你缩放到0-1,你可以使用它来逆变换它。对深度学习很有用
#!/bin/bash
LOG_DIR="public_html_cron_logs"
DAY=`date +"%d-%m-%Y"`
HOUR=`date "+%H-%M"`
GET_LOG="GET.log"
POST_LOG="POST.log"
if [ ! -d /home/$USER/$LOG_DIR/$DAY ]; then
mkdir /home/$USER/$LOG_DIR/$DAY;
fi
CREATE_DIR=/home/$USER/$LOG_DIR/$DAY
GET_LOG=$CREATE_DIR/$HOUR-$GET_LOG
POST_LOG=$CREATE_DIR/$HOUR-$POST_LOG
while read line; do
DATE_LOG=`echo $line | awk '{print $4}'`; DATE_LOG=${DATE_LOG:1}
MONTH_VERB=`echo $DATE_LOG | awk -F '[/:]' '{print $2}'`
if [ "$MONTH_VERB" = "January" ]; then
MONTH=01
elif [ "$MONTH_VERB" = "February" ]; then
MONTH=02
elif [ "$MONTH_VERB" = "March" ]; then
MONTH=03
elif [ "$MONTH_VERB" = "April" ]; then
MONTH=04
elif [ "$MONTH_VERB" = "May" ]; then
MONTH=05
elif [ "$MONTH_VERB" = "June" ]; then
MONTH=06
elif [ "$MONTH_VERB" = "July" ]; then
MONTH=07
elif [ "$MONTH_VERB" = "August" ]; then
MONTH=08
elif [ "$MONTH_VERB" = "September" ]; then
MONTH=09
elif [ "$MONTH_VERB" = "October" ]; then
MONTH=10
elif [ "$MONTH_VERB" = "November" ]; then
MONTH=11
elif [ "$MONTH_VERB" = "December" ]; then
MONTH=12
fi
UNIX_DATE=`echo $DATE_LOG | awk -v AWK_MONTH="$MONTH" -F '[/:]' '{print $3"-"AWK_MONTH"-"$1" "$4":"$5":"$6}'`
UNIX_TIMESTAMP_LOG=`date -d "$UNIX_DATE" "+%s"`
UNIX_TIMESTAMP_LAST_HOUR=`date -d '60 min ago' "+%s"`
if [ $UNIX_TIMESTAMP_LOG -gt $UNIX_TIMESTAMP_LAST_HOUR ]; then
if [[ $line = *"GET"* ]]; then
echo $line | awk '{print $1}' >> $GET_LOG
else
echo $line | awk '{print $1}' >> $POST_LOG
fi
fi
done < ~/access-logs/ENTER_YOUR_DOMAIN_LOG_FILE_HERE