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

如何在R中让训练集与测试集观测数一致?当前训练集观测数不足

解决方案

要实现训练集与测试集观测数相等,核心是通过采样操作调整其中一个数据集的行数,join/merge类操作用于合并数据集字段,无法实现该需求。根据使用场景可选择以下两种方案:

方案1:下采样测试集(推荐优先使用)

从测试集中随机抽取和训练集行数一致的样本,不会引入训练集过拟合风险。

Python(pandas)实现

假设train_df为训练集DataFrame,test_df为测试集DataFrame:

import pandas as pd

# 获取训练集观测数
n_train = len(train_df)
# 随机采样测试集,random_state固定保证结果可复现
test_sampled = test_df.sample(n=n_train, random_state=42)

如需保证测试集标签分布和原数据集一致,可使用分层采样:

from sklearn.model_selection import train_test_split

test_sampled, _ = train_test_split(
    test_df,
    train_size = len(train_df)/len(test_df),
    stratify = test_df["label"], # label替换为你的标签列名
    random_state = 42
)

R实现

假设train_df为训练集数据框,test_df为测试集数据框:

n_train <- nrow(train_df)
set.seed(42)
test_sampled <- test_df[sample(nrow(test_df), n_train), ]

分层采样实现(需提前安装加载caret包):

library(caret)
set.seed(42)
sample_idx <- createDataPartition(
  test_df$label, # label替换为你的标签列名
  p = nrow(train_df)/nrow(test_df),
  list = FALSE
)
test_sampled <- test_df[sample_idx, ]

方案2:上采样训练集(仅适用于训练集数据量极小的场景)

对训练集进行有放回重复采样,直到行数和测试集一致,该方案容易引发过拟合,需谨慎使用。

Python(pandas)实现

n_test = len(test_df)
# replace=True开启有放回采样,支持抽取比原数据集更多的样本
train_sampled = train_df.sample(n=n_test, replace=True, random_state=42)

R实现

n_test <- nrow(test_df)
set.seed(42)
train_sampled <- train_df[sample(nrow(train_df), n_test, replace = TRUE), ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:27:08