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

基于sklearn执行线性回归遇TypeError,求问题排查及绘图实现

问题分析与解决方案

错误类型判断

这个问题同时包含语法使用错误和逻辑错误:

  • 语法错误:pd.concat()要求第一个参数是可迭代的pandas对象(比如列表),你直接传入两个Series,触发TypeError。
  • 逻辑错误:
    1. sklearn的LinearRegression.fit()要求输入的特征矩阵X是二维结构(n行n列),你传入的是一维Series,不符合模型输入规范。
    2. 拼接失业率和通胀率的方式破坏了数据对应关系——原数据中同一行的利率、失业率、通胀率属于同时间点,拼接后会把失业率全放在前、通胀率全放在后,和X的索引完全不匹配。
    3. 代码里的ylabel写的是“Natural Gas Opening Price”,但实际y是失业率和通胀率,属于变量对应错误。
    4. X.dropna(axis=0)没有赋值回原变量,等于没处理缺失值。

修正后的代码

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.impute import SimpleImputer

# 加载数据
df1 = pd.read_csv('index.csv', sep=',')

# 定义特征X(二维DataFrame)和目标变量y(保持同索引的多列)
X = df1[["Effective Federal Funds Rate"]]
y = df1[["Unemployment Rate", "Inflation Rate"]]

# 用均值填充缺失值,避免丢失过多样本
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)
y_imputed = imputer.transform(y)

# 训练多输出线性回归模型
model = LinearRegression()
model.fit(X_imputed, y_imputed)

# 输出模型参数
print('系数矩阵(对应失业率、通胀率): ', model.coef_)
print('截距项(对应失业率、通胀率): ', model.intercept_)
r_squared = model.score(X_imputed, y_imputed)
print('R²值: ', r_squared)

# 生成变量关系子图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))

# 失业率 vs 联邦基金利率
ax1.scatter(X, y["Unemployment Rate"], alpha=0.5, label='实际数据')
ax1.plot(X, model.predict(X_imputed)[:, 0], color='red', label='回归拟合线')
ax1.set_xlabel('Effective Federal Funds Rate')
ax1.set_ylabel('Unemployment Rate')
ax1.set_title('失业率 vs 联邦基金利率')
ax1.legend()

# 通胀率 vs 联邦基金利率
ax2.scatter(X, y["Inflation Rate"], alpha=0.5, label='实际数据', color='green')
ax2.plot(X, model.predict(X_imputed)[:, 1], color='red', label='回归拟合线')
ax2.set_xlabel('Effective Federal Funds Rate')
ax2.set_ylabel('Inflation Rate')
ax2.set_title('通胀率 vs 联邦基金利率')
ax2.legend()

plt.tight_layout()
plt.show()

关键修正点说明

  1. 修正数据拼接错误:直接从原DataFrame选取多列作为y,保留了数据的时间对应关系,避免索引混乱。
  2. 调整特征结构:用df[["列名"]]返回二维DataFrame,符合sklearn模型的输入要求。
  3. 正确处理缺失值:使用SimpleImputer填充缺失值,确保模型训练用的是完整数据集。
  4. 适配多输出回归:sklearn的LinearRegression天然支持多目标变量回归,直接传入多列y即可,输出的系数矩阵对应每个目标变量的特征系数。
  5. 图表优化:用子图分别展示两个目标变量与特征的关系,修正标签和标题,让变量关系更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:47:42