Python含三变量的线性回归循环执行报错求助
问题解决:循环执行二元线性回归的错误修正
错误原因
报错ValueError: Found input variables with inconsistent numbers of samples: [2,74]的核心原因是特征输入格式不符合sklearn要求:
你构造的X = sal_ens[i], temp_ens[i]是两个独立的一维数组(每个长度74),而sklearn.linear_model.LinearRegression.fit()要求特征矩阵必须是二维数组,形状为(样本数, 特征数)(这里应为(74, 2)),而非一维数组的元组。
修正后的完整代码
from sklearn import linear_model import numpy as np # 初始数据加载部分(保持不变) x = glodap_hot_merged_finalized['G2salinity'] y = glodap_hot_merged_finalized['G2talk'] z = glodap_hot_merged_finalized['G2temperature'] iterations = 1000 # 修正结果存储数组:slopes需要存储每个回归的2个斜率,改为二维数组 stdevs = np.empty((iterations,), dtype=float) slopes = np.empty((iterations, 2), dtype=float) # 每行对应一次回归的两个斜率 intercepts = np.empty((iterations,), dtype=float) nbot = len(x) sal = x.values alk = y.values temp = z.values sal_ens = np.random.randn(iterations, nbot) * 1e-3 + sal[np.newaxis, :] alk_ens = np.random.randn(iterations, nbot) * 2 + alk temp_ens = np.random.randn(iterations, nbot) * 1e-2 + temp[np.newaxis, :] # 修正后的循环 for i in range(iterations): # 将两个一维特征数组合并为(74, 2)的二维特征矩阵 X = np.column_stack([sal_ens[i], temp_ens[i]]) Y = alk_ens[i] regr = linear_model.LinearRegression() regr.fit(X, Y) # 直接从模型获取截距和斜率 intercepts[i] = regr.intercept_ slopes[i] = regr.coef_ # coef是长度为2的数组,对应盐度、温度的系数 # 可选:计算残差标准差 y_pred = regr.predict(X) stdevs[i] = np.std(Y - y_pred)
关键修改说明
- 特征矩阵构造:用
np.column_stack将两个一维数组合并为符合要求的二维矩阵,确保每个样本对应一行,两个特征对应两列。 - 结果提取:
LinearRegression模型训练后,intercept_直接返回截距值,coef_返回长度等于特征数的数组,对应每个自变量的斜率。 - 结果存储:将
slopes改为二维数组,用于存储每次回归的两个斜率值。
内容的提问来源于stack exchange,提问作者Caroline J.
相关产品推荐
相关产品推荐

