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

不使用train_test_split,按周数拆分数据集后如何划分训练测试集?

解决方案

首先纠正你代码里的一个问题:你的循环是在生成52个不同周数的组合作为测试集,但根据你的需求,只需要把week_number等于52的行单独作为测试集,不需要遍历组合,所以可以简化训练集和测试集的拆分逻辑。

接下来是具体的拆分步骤和修改后的代码:

核心步骤

  • 从训练集train中提取特征列xvars作为X_train,目标列yvar作为y_train
  • 从测试集test中提取特征列xvars作为X_test,目标列yvar作为y_test
  • 保持和你原代码一致的reshape处理(适用于单个特征的场景,如果是多个特征可以去掉reshape(-1,1))

修改后的完整代码

import itertools
from sklearn.linear_model import LinearRegression

def regressionsquare(data, yvar, xvars): 
    lm = LinearRegression()
    
    # 按需求拆分训练集和测试集:week_number=52为测试集
    train = data[data['week_number'] != 52]
    test = data[data['week_number'] == 52]
    
    # 拆分X_train、y_train
    X_train = train[xvars].values.reshape(-1, 1)
    y_train = train[yvar].values.reshape(-1, 1)
    
    # 拆分X_test、y_test
    X_test = test[xvars].values.reshape(-1, 1)
    y_test = test[yvar].values.reshape(-1, 1)
    
    lm.fit(X_train, y_train)
    y_predicted = lm.predict(X_test)
    
    # 可添加评估逻辑,比如计算MSE等
    return y_predicted, y_test

补充说明

  • 如果你的xvars是多个特征(比如一个特征列表),不需要reshape(-1,1),直接用train[xvars].values即可,sklearn线性回归模型接受二维数组作为输入。
  • 原代码中的itertools.combinations循环不符合你的需求,直接移除即可;若后续有交叉验证需求,可再调整逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:50:33