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

多变量多项式回归分析:按月输出系数与截距问题求助

按月份分组回归提取系数的修正代码

核心思路

  1. 先构造回归所需的二次项特征(x1_sq, x2_sq, x3_sq)
  2. 按Month列分组,对每组数据拟合指定形式的线性回归模型
  3. 提取每组模型的系数与截距,整理成结构化的结果表

完整修正代码

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression

# ---------------------- 测试用例生成 ----------------------
np.random.seed(42)
months = np.repeat(range(1, 13), 50)  # 12个月,每月50条数据
x1 = np.random.randn(600)
x2 = np.random.randn(600)
x3 = np.random.randn(600)
# 模拟真实Y值:Y = x1 + 0.5*x1² + 0.3*x2² + 0.2*x3² + 2 + 噪声
Y = x1 + 0.5*(x1**2) + 0.3*(x2**2) + 0.2*(x3**2) + 2 + np.random.randn(600)*0.1

df = pd.DataFrame({
    'Y': Y,
    'x1': x1,
    'x2': x2,
    'x3': x3,
    'Month': months
})

# ---------------------- 回归分析与系数提取 ----------------------
# 构造二次项特征
df['x1_sq'] = df['x1'] ** 2
df['x2_sq'] = df['x2'] ** 2
df['x3_sq'] = df['x3'] ** 2

# 初始化结果存储列表
results = []

# 按月份分组处理
for month, group in df.groupby('Month'):
    # 定义特征矩阵X和目标变量y
    X = group[['x1', 'x1_sq', 'x2_sq', 'x3_sq']]
    y = group['Y']
    
    # 拟合线性回归模型
    model = LinearRegression()
    model.fit(X, y)
    
    # 提取系数与截距,对应公式中的参数:x1系数、A(x1²)、B(x2²)、C(x3²)、Constant
    coeffs = {
        'Month': month,
        'x1_coeff': model.coef_[0],
        'A(x1²)': model.coef_[1],
        'B(x2²)': model.coef_[2],
        'C(x3²)': model.coef_[3],
        'Constant': model.intercept_
    }
    results.append(coeffs)

# 转换为结果DataFrame
result_df = pd.DataFrame(results)
print(result_df)

关键修正点说明

  • 特征构造:必须显式生成二次项特征,因为LinearRegression只能处理线性组合,需要把非线性项转化为特征列
  • 分组处理:使用groupby('Month')遍历每个月份的子数据集,确保每个模型只对应当月数据
  • 系数映射:model.coef_返回的是特征列顺序对应的系数,要和X中的列顺序(x1, x1_sq, x2_sq, x3_sq)一一对应,model.intercept_就是公式中的常数项
  • 结果存储:用字典存储每个月份的参数,最后拼接成DataFrame,方便查看和导出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:52:08