多变量多项式回归分析:按月输出系数与截距问题求助
按月份分组回归提取系数的修正代码
核心思路
- 先构造回归所需的二次项特征(
x1_sq,x2_sq,x3_sq) - 按
Month列分组,对每组数据拟合指定形式的线性回归模型 - 提取每组模型的系数与截距,整理成结构化的结果表
完整修正代码
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
相关产品推荐
相关产品推荐

