如何在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
相关产品推荐
相关产品推荐

