基于矩阵表的简单回归:线性回归R2仅0.7的原因排查
线性回归效果不佳的原因分析
根据你提供的理论公式、数据集和代码,线性回归R²仅为0.7的核心原因是模型没有正确捕捉目标变量与特征间的乘积交互关系,具体拆解如下:
特征编码逻辑错误
你对Frequency(每周购买次数,数值型特征)使用了独热编码,这会把连续的数值拆成多个分类特征,完全破坏了它的数值属性,让线性回归无法学习到它和Amount、水果单价之间的乘法关联。
另外,虽然对Fruit的独热编码合理,但你没有将其与Amount、Frequency构建交互项,模型只能单独学习每个特征的线性贡献,无法理解水果单价(由Fruit决定)× Amount × Frequency的组合关系。未利用已知的单价信息
你没有将水果单价表合并到数据集,线性回归完全不知道不同水果的单价差异,只能通过独热编码的系数去间接拟合单价的影响,这会大幅降低模型的拟合精度。模型本质限制
线性回归默认只能学习特征的线性相加关系(y = w₁x₁ + w₂x₂ + ... + b),但你的目标变量是三个特征的乘积,属于非线性的交互关系。如果不手动构建交互特征,线性回归无法自动学习这种复杂关联。代码语法错误
你的代码存在几处语法问题,会导致模型训练使用错误的特征甚至报错:freq_dummies = pdf.get_dummies(df.frequency)中的pdf应为pddf = df.drop(columns = ['fruit','frequency']和df = df.drop(columns = ['total_per_week']缺少闭合右括号- 没有移除
Unique_ID列,这个无关特征会干扰模型训练
而随机森林作为树模型,能自动捕捉特征间的交互关系,不需要手动构建交互项,因此能更好拟合目标变量的生成逻辑,效果自然优于线性回归。
快速修复方向
- 将水果单价表合并到数据集,新增
单价列 - 保留
Frequency的数值型,移除对它的独热编码 - 构建交互特征:
Amount × Frequency × 单价(或直接用这个计算值作为特征,因为理论上目标变量等于它) - 移除
Unique_ID无关特征,修正代码语法错误
内容的提问来源于stack exchange,提问作者ZHX
相关产品推荐
相关产品推荐

