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

R语言如何按时序原始顺序非随机划分天气数据集训练测试集

问题解答

按原始时间顺序划分训练集、测试集的需求完全可以实现,这也是时序类预测任务的标准采样方式——随机采样会造成未来数据泄露,得到的模型验证结果不具备实际参考价值。

原代码问题说明

  • 你已经完成了时序切分的前置步骤:通过dataset[order(dataset$Date),]将数据集按日期从早到晚升序排列
  • 原代码使用sample()函数随机抽取行号,本质是打乱数据顺序采样,自然会出现测试集时间乱序的问题
  • 原代码存在比例逻辑错误:代码中抽取的是80%的行赋值给测试集,剩余20%作为训练集,和注释标注的占比完全相反

实现方法

方法1:按固定比例时序切分

如果需要按比例划分(例如80%训练、20%测试),直接按排序后的行号连续切分即可,无需随机采样:

# 数据已按日期升序排列的前提下
train_ratio <- 0.8
train_row_num <- floor(nrow(dataset) * train_ratio)

# 前序时间更早的数据作为训练集
train <- dataset[1:train_row_num, ]
# 后序时间更晚的数据作为测试集
test <- dataset[(train_row_num + 1):nrow(dataset), ]

方法2:按预测目标时段精准切分

你的任务是固定预测2008年5月7日至2008年5月18日的气温,不需要按比例切分,直接通过日期字段筛选是最贴合实际场景的方案:

# 先将Date列转换为日期格式,避免字符串匹配误差
dataset$Date <- as.Date(dataset$Date)

# 训练集:预测起始日之前的所有历史数据
train <- dataset[dataset$Date < as.Date("2008-05-07"), ]
# 测试集:需要预测的目标时段数据
test <- dataset[dataset$Date >= as.Date("2008-05-07") & dataset$Date <= as.Date("2008-05-18"), ]

验证方式

切分完成后可通过以下命令校验结果,确认训练集的最晚日期早于测试集的最早日期,且两个子集均保留原始时间顺序:

# 查看训练集最后几条的日期
tail(train$Date)
# 查看测试集前几条的日期
head(test$Date)

注意:后续使用决策树、随机森林、SVM、神经网络开展预测时,必须使用这种时间顺序切分的数据集验证效果,随机采样会让模型在训练阶段提前接触到未来时段的信息,导致验证效果远好于实际预测的真实表现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:39:19