如何解决Python线性回归特征两两分组计算MSE的维度不匹配问题
问题报错原因
- 错误核心是你对双特征切片后做了多余的
reshape(-1,1)操作:当你取Xtrain[:,c]时,c是长度为2的组合索引,得到的数组形状本身就是(样本数, 2),完全符合sklearn要求的fit方法输入特征维度要求。你用reshape(-1,1)会把2列特征直接压成1列,样本量翻倍,自然和单输出的ytrain维度不匹配。
修正后完整可运行代码
import numpy as np from sklearn.datasets import make_regression from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from itertools import combinations # 生成测试数据 X, y = make_regression(n_samples=100, n_features=4, n_informative=3, n_targets=1, noise=0.01) # 拆分训练测试集(原代码缺失该步骤,需补充) Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=0.3, random_state=42) # 两两特征组合拟合模型计算MSE for c in combinations(range(4), 2): lr = LinearRegression() # 去掉多余的reshape操作,直接传入双特征的二维数组即可 lr.fit(Xtrain[:, c], ytrain) yp = lr.predict(Xtest[:, c]) print(f"特征组合{c}的MSE:", np.sum((ytest - yp)**2) / len(ytest))
补充说明
- 仅当你需要对单个特征做单变量回归时,才需要用
reshape(-1,1)把一维的单特征列转为二维数组;多特征输入只要本身维度是(样本数, 特征数)就可以直接传入。 - 你也可以直接用sklearn的
mean_squared_error工具函数计算MSE,不用手动写计算逻辑:导入from sklearn.metrics import mean_squared_error后,调用mean_squared_error(ytest, yp)即可得到相同结果。
内容的提问来源于stack exchange,提问作者David Sanchez Hommen
相关产品推荐
相关产品推荐

