R语言中如何将经极差归一化的数据集还原为原始值?
还原方法说明
极差归一化(Min-Max归一化)的逆运算公式如下:
原始值 = 归一化后的值 × (原始变量最大值 - 原始变量最小值) + 原始变量最小值
注意:必须提前保存原始数据中所有x开头变量的最大值、最小值,仅靠归一化后的df_mod无法完成还原,归一化过程会丢失原始极值信息。
完整可运行代码示例
1. 预先计算并保存原始变量极值、执行归一化
library(dplyr) # 原始数据集 df <- data.frame(x1=c(1, 2, 3, 2, 1), x2=c(1, 10, 5, 8, 3)) # 提取所有x开头的目标变量 target_vars <- names(select(df, starts_with("x"))) # 存储每个变量的最小值、最大值、极差 min_vals <- summarise_all(select(df, all_of(target_vars)), min, na.rm = TRUE) max_vals <- summarise_all(select(df, all_of(target_vars)), max, na.rm = TRUE) range_vals <- max_vals - min_vals # 执行极差归一化得到df_mod df_mod <- df%>% mutate_at(vars(starts_with("x")), funs((. - min(., na.rm = T))/(max(., na.rm = T) - min(., na.rm = T))))
2. 从df_mod还原原始数据集
df_restored <- df_mod %>% mutate_at(vars(starts_with("x")), funs(. * range_vals[[cur_column()]] + min_vals[[cur_column()]]))
3. 验证还原结果
执行all.equal(df, df_restored)会返回TRUE,证明还原结果和原始数据集完全一致。
内容的提问来源于stack exchange,提问作者Leprechault
相关产品推荐
相关产品推荐

