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

如何移除两个变量间的线性拟合以消除其3月份数据的相关性

解决消除X和Y的3月数据相关性的问题

嗨,很高兴能帮到你!你已经完成了数据读取和筛选的基础工作,接下来我们可以通过线性回归提取残差的方式,消除Y的'Mar'列和X的'Mar'列之间的线性相关性。残差就是Y的原始值减去拟合直线的预测值,这部分数据会和X的'Mar'列几乎没有线性关联。

步骤详解 & 完整代码

首先我们需要导入必要的工具库,然后一步步处理:

# 先导入你已经在用的pandas,以及线性回归需要的库
import pandas as pd
from sklearn.linear_model import LinearRegression
import numpy as np

# ---------- 你已有的代码(可以直接保留) ----------
X = pd.read_csv(r'C:\Users\folder\X.csv')
X = pd.DataFrame(X, columns=['Year','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'])
X = X[X['Year'].between(1984,2020, inclusive="both")]

Y = pd.read_csv(r'C:\Users\folder\Y.csv')
Y = pd.DataFrame(Y, columns=['Year','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'])
Y = Y[Y['Year'].between(1984,2020, inclusive="both")]

# ---------- 新增的处理代码 ----------
# 1. 提取X和Y的3月数据,注意sklearn模型需要二维数组格式
X_mar = X['Mar'].values.reshape(-1, 1)  # 把一维数组转成二维(n行1列)
Y_mar = Y['Mar'].values

# 2. 拟合线性回归模型,得到X和Y的3月数据之间的拟合直线
model = LinearRegression()
model.fit(X_mar, Y_mar)

# 3. 计算拟合直线的预测值,然后用Y的原始3月数据减去预测值,得到残差(消除相关性后的数据)
Y_mar_pred = model.predict(X_mar)
new_Y_mar = Y_mar - Y_mar_pred

# 4. 创建new_Y:复制原来的Y,然后替换'Mar'列为残差
new_Y = Y.copy()
new_Y['Mar'] = new_Y_mar

# 可选:验证一下相关性是否消除——计算new_Y的Mar和X的Mar的相关系数,应该接近0
corr = np.corrcoef(new_Y['Mar'], X['Mar'])[0,1]
print(f"处理后的相关系数:{corr:.4f}")

关键部分解释

  • reshape(-1,1):因为机器学习模型要求输入的特征是二维矩阵(每一行是一个样本,每一列是一个特征),所以我们需要把一维的'Mar'列数据转换成二维格式。
  • 残差的意义:残差代表了Y的3月数据中,无法被X的3月数据用线性关系解释的部分,这部分自然就和X的3月数据没有线性相关性了。
  • 验证步骤:最后打印的相关系数如果接近0,就说明我们成功消除了线性相关性。

如果之后你需要处理非线性的相关性,可以随时调整方法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:07:38