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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:27:19