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

如何在PySpark ML中使用SGD实现线性回归?

问题

我正在使用PySpark ML中的LinearRegression模型进行预测,代码示例如下:

import pyspark.ml.regression.LinearRegression

featureassembler = VectorAssembler(inputCols=['Year', 'Present_Price', 
                                              'Kms_Driven', 'Owner'], 
                                   outputCol='features')

output = featureassembler.transform(df)
data = output.select('features', 'Selling_Price')

# Initializing a Linear Regression model
ss = LinearRegression(featuresCol='features', labelCol='Selling_Price')

我想要测试基于SGD(Stochastic Gradient Descent,随机梯度下降)的线性回归,但发现PySpark ML中没有类似mllib中的LinearRegressionWithSGD类,且mllib中的该类自2.0.0版本起已被废弃。请问如何在PySpark ML中实现基于SGD的线性回归?是否有相关参数可以配置?

解决方案

PySpark ML里的LinearRegression类本身就支持通过参数配置来使用SGD优化器,无需单独的类,具体设置方式如下:

核心参数配置

  • 指定SGD优化器:通过optimizer参数设置为"sgd"即可切换到随机梯度下降(默认优化器为"l-bfgs")。
  • 调整SGD专属参数:
    • maxIter:控制SGD的最大训练迭代次数。
    • stepSize:设置SGD的学习率,决定每一步参数更新的幅度。
    • regParam:设置正则化系数,用于防止过拟合,配合elasticNetParam可选择正则化类型:
      • elasticNetParam=0:使用L2正则化(Ridge回归)
      • elasticNetParam=1:使用L1正则化(Lasso回归)
      • 0~1之间的数值:混合L1和L2正则化(Elastic Net)
    • tol:设置收敛阈值,当损失函数的变化量小于该值时,提前终止迭代。

修改后的代码示例

import pyspark.ml.regression.LinearRegression

featureassembler = VectorAssembler(inputCols=['Year', 'Present_Price', 
                                              'Kms_Driven', 'Owner'], 
                                   outputCol='features')

output = featureassembler.transform(df)
data = output.select('features', 'Selling_Price')

# 初始化基于SGD的线性回归模型
lr_sgd = LinearRegression(
    featuresCol='features', 
    labelCol='Selling_Price',
    optimizer='sgd',        # 指定使用SGD优化器
    maxIter=100,            # 最大迭代次数
    stepSize=0.01,          # 学习率
    regParam=0.01,          # 正则化系数
    elasticNetParam=0.0,    # 使用L2正则化
    tol=1e-6                # 收敛阈值
)

# 训练模型
model = lr_sgd.fit(data)

补充说明

  • PySpark ML的LinearRegression封装了多种优化器(SGD、L-BFGS等),通过参数切换即可实现不同优化策略,这也是MLlib中旧的LinearRegressionWithSGD被废弃的核心原因——统一到单一类中更便于维护和使用。
  • 实际训练时,可根据数据集规模和收敛情况调整参数:比如数据集较大时,可适当调大stepSize或增加maxIter;若出现过拟合,可提高regParam的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:55:21