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

Pyspark使用LinearRegression做直线拟合得到异常系数问题排查

问题核心原因

你犯了线性回归变量匹配的基础错误:搞反了自变量和因变量的对应关系。
你需要获取的是Moving_Ratio随行号rownumber变化的趋势斜率,本质上要拟合的公式为:
Moving_Ratio = k * rownumber + b,其中k就是你需要的斜率。
但你现有代码把Moving_Ratio设为特征(自变量X),rownumber设为标签(因变量Y),实际拟合的是rownumber = a * Moving_Ratio + c,得到的系数a自然和预期斜率完全不符,预测值也会全部错位。同时你设置了较大的正则化参数,也会进一步拉偏拟合结果。

修正后的实现代码
# 特征改为自变量rownumber,要拟合的标签为目标指标Moving_Ratio
vect_assm = VectorAssembler(inputCols =['rownumber'], outputCol='features')
df_vect=vect_assm.transform(df)

# 无正则需求可将regParam设为0,避免正则项干扰拟合结果
lir = LinearRegression(featuresCol = 'features', labelCol='Moving_Ratio', maxIter=50, 
regParam=0, elasticNetParam=0)
model = lir.fit(df_vect)
Predictions = model.transform(df_vect)

# 取出的coefficients就是你需要的整体趋势斜率
trend_slope = model.coefficients[0]
可选优化建议

如果曲线非线性特征较强,需要更贴合整体趋势的斜率,可以额外做如下处理:

  • 先对原始数据做等间隔采样,降低局部波动对整体斜率的影响
  • 先对Moving_Ratio做滚动平均平滑处理,消除噪声后再做线性拟合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:36:04