不使用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
相关产品推荐
相关产品推荐

