You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中构建预测模型时,是否应先拆分数据再执行归一化?

分组归一化才是正确做法

首先明确:必须按var分组分别归一化,不能直接对全部数据归一化。原因很简单:你的r组y值集中在1.067-1.077区间,s组集中在1.002-1.012区间,全局归一化会把两个组的数值混在一起计算min和max,导致组内原本的相对差异被破坏,完全不符合你“分组y值标准不同”的需求。分组归一化能让每组的y值独立映射到[0,1]区间,保留组内的相对关系。

修正你的分组归一化代码

你原本的拆分后归一化代码有错误——归一化时误用了整个数据集的y列,应该用对应分组的y列。修正后代码如下:

require(dplyr)
# 按var分组拆分数据
dataR <- data %>% filter(var == "r")
dataS <- data %>% filter(var == "s")

# 分别对每组的y列做归一化,保留原列并新增归一化列
norm_dataR <- dataR %>% mutate(norm_y = min_max_norm(y))
norm_dataS <- dataS %>% mutate(norm_y = min_max_norm(y))

合并归一化后的数据集

有两种常用方法:

  1. 用dplyr的bind_rows()(推荐,支持同结构数据快速合并):
merged_norm_data <- bind_rows(norm_dataR, norm_dataS)
  1. 用基础R的rbind():
merged_norm_data <- rbind(norm_dataR, norm_dataS)

更简洁的一步式写法

其实不用手动拆分再合并,直接用group_by()+mutate()就能完成分组归一化,代码更简洁且不易出错:

require(dplyr)
# 直接在原数据上按var分组,生成归一化列
merged_norm_data <- data %>%
  group_by(var) %>%
  mutate(norm_y = min_max_norm(y)) %>%
  ungroup()

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 03:03:20